Zabbix 监控TCP连接的状态

本文介绍了一个用于监控TCP连接状态的脚本,通过该脚本可以获取到如ESTABLISHED、SYN-RECV等关键状态的数据,对于评估服务器健康状况至关重要。


    Tcp的连接状态对于我们web服务器来说是至关重要的,尤其是并发量ESTABLISH;或者是syn_recv值,假如这个值比较大的话我们可以认为是不是受到了***,或是是time_wait值比较高的话,我们要考虑看我们内核是否需要调优,太高的time_wait值的话会占用太多端口,要是端口少的话后果不堪设想:

一、下面是一个监控的脚本:

脚本放在/usr/local/zabbix/scripts/下面,命名tcp_status。

#!/bin/bash 
#shuidi
#scripts for tcp status 
function SYNRECV { 
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'SYN-RECV' | awk '{print $2}'
} 
function ESTAB { 
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'ESTAB' | awk '{print $2}'
} 
function FINWAIT1 { 
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'FIN-WAIT-1' | awk '{print $2}'
} 
function FINWAIT2 { 
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'FIN-WAIT-2' | awk '{print $2}'
} 
function TIMEWAIT { 
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'TIME-WAIT' | awk '{print $2}'
} 
function LASTACK { 
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'LAST-ACK' | awk '{print $2}'
} 
function LISTEN { 
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'LISTEN' | awk '{print $2}'
} 
$1

二、填写key值:

# cat /etc/zabbix/zabbix_agentd.conf 
#monitor tcp 
UserParameter=tcp[*],/usr/local/zabbix/scripts/tcp_status $1

三、导入模板(在我的附件上,然后触发器根据自己的情况调整:)

    模版的导入很简单,具体我这里不再介绍。

四、查看效果:

wKiom1YnPuzCSM3cAAV4lFmueQM621.jpg


五、各参数意义

TCP套接字解释                     状态意义
CLOSED                      没有使用这个套接字
LISTEN                        套接字正在监听入境连接
SYN_SENT                  套接字正在试图主动建立连接
SYN_RECEIVED          正在处于连接的初始同步状态
ESTABLISHED             连接已建立
CLOSE_WAIT              远程套接字已经关闭:正在等待关闭这个套接字
FIN_WAIT_1                套接字已关闭,正在关闭连接
CLOSING                     套接字已关闭,远程套接字正在关闭,暂时挂起关闭确认
LAST_ACK                  远程套接字已,正在等待本地套接字的关闭确认
FIN_WAIT_2                套接字已关闭,正在等待远程套接字关闭
TIME_WAIT                 这个套接字已经关闭,正在等待远程套接字的关闭传送


到此TCP监控我们就配置OK了。



好的,这是一个比较复杂的任务,需要使用Shell脚本编写。以下是一个简单的实现,你可以根据实际情况进行修改和完善。 1. Zabbix监控TCP连接状态收集 首先,我们可以使用netstat命令来获取TCP连接状态信息。然后,我们可以编写一个脚本,将该信息转换为Zabbix可接受的格式,并将其发送到Zabbix Server上。 ``` #!/bin/bash HOSTNAME=$(hostname) # 获取TCP连接状态信息 TCP_STATUS=$(netstat -nat | awk '{print $6}' | sort | uniq -c | awk '{print $2,$1}') # 将信息转换为Zabbix可接受的格式 ITEMS="" for status in $TCP_STATUS do key="tcp.status[$status]" value=$(echo $TCP_STATUS | awk -v status="$status" '{if ($1 == status) print $2}') ITEMS="$ITEMS -z $ZABBIX_SERVER -s $HOSTNAME -k $key -o $value" done # 将信息发送到Zabbix Server上 zabbix_sender $ITEMS ``` 2. Zabbix监控MySQL状态信息收集 接下来,我们可以使用MySQL命令行工具来获取MySQL状态信息。然后,我们可以编写一个脚本,将该信息转换为Zabbix可接受的格式,并将其发送到Zabbix Server上。 ``` #!/bin/bash HOSTNAME=$(hostname) # 获取MySQL状态信息 MYSQL_STATUS=$(mysqladmin -u root -pYOUR_PASSWORD status) # 将信息转换为Zabbix可接受的格式 ITEMS="" IFS="|" for status in $MYSQL_STATUS do key=$(echo $status | awk '{print $1}') value=$(echo $status | awk '{print $2}') ITEMS="$ITEMS -z $ZABBIX_SERVER -s $HOSTNAME -k mysql.status[$key] -o $value" done # 将信息发送到Zabbix Server上 zabbix_sender $ITEMS ``` 3. Zabbix监控内存信息收集 最后,我们可以使用free命令来获取内存信息。然后,我们可以编写一个脚本,将该信息转换为Zabbix可接受的格式,并将其发送到Zabbix Server上。 ``` #!/bin/bash HOSTNAME=$(hostname) # 获取内存信息 MEMORY=$(free | awk 'NR==2{print $2,$3,$4}') # 将信息转换为Zabbix可接受的格式 ITEMS="-z $ZABBIX_SERVER -s $HOSTNAME -k memory.total -o $(echo $MEMORY | awk '{print $1}')" ITEMS="$ITEMS -z $ZABBIX_SERVER -s $HOSTNAME -k memory.used -o $(echo $MEMORY | awk '{print $2}')" ITEMS="$ITEMS -z $ZABBIX_SERVER -s $HOSTNAME -k memory.free -o $(echo $MEMORY | awk '{print $3}')" # 将信息发送到Zabbix Server上 zabbix_sender $ITEMS ``` 注意,上述脚本中的ZABBIX_SERVER和YOUR_PASSWORD需要替换为实际的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值