Tcp的连接状态对于我们web服务器来说是至关重要的,尤其是并发量ESTAB;或者是syn_recv值,假如这个值比较大的话我们可以认为是不是受到了攻击(例如SYN攻击),或是是time_wait值比较高的话,我们要考虑看我们内核是否需要调优,太高的time_wait值的话会占用太多端口,要是端口少的话后果不堪设想
环境
主机 | ip | zabbix版本 | 关系 |
---|---|---|---|
centos7.5 | 192.168.181.135 | zabbix4.2 | 服务端 |
centos7.5 | 192.168.181.136 | zabbix4.2 | 客户端 |
客户端配置
编写采集规则
编写一个获取tcp状态的脚本文件,参考
vim /etc/zabbix/scripts/tcp_status.sh
#!/bin/bash
#########################################################################
# File Name: tcp_status.sh
# file_path:
# Author: 浪子尘心
# Mail: 536418286@qq.com
# Created Time: 2019-03-18 14:01:34
# Last Changed: 2019-03-18 14:02:18
# Description: TCP状态采集
# Version:
#########################################################################
#!/bin/bash
[ $# -ne 1 ] && echo "Usage:CLOSE-WAIT|CLOSED|CLOSING|ESTAB|FIN-WAIT-1|FIN-WAIT-2|LAST-ACK|LISTEN|SYN-RECV SYN-SENT|TIME-WAIT" && exit 1
ss_file=/tmp/ss.txt
tcp_status_fun(){
[ $1 == "ESTABLISHED" ] && TCP_STAT="ESTAB" || TCP_STAT=$1 #可能大家习惯了看ESTABLISHED,所以我做了个小小的转换。
ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > $ss_file
TCP_STAT_VALUE=$(grep ${TCP_STAT} $ss_file|awk {'print $NF'})
if [ -z "$TCP_STAT_VALUE" ];then
TCP_STAT_VALUE=0
fi
echo $TCP_STAT_VALUE
}
tcp_status_fun $1
给脚本加执行权限
chmod +x /etc/zabbix/scripts/tcp_status.sh
编写自定义key
vim /etc/zabbix/zabbix_agentd.d/tcp_status.conf
UserParameter=tcp_status[*],/etc/zabbix/scripts/tcp_status.sh $1
重启客户端
systemctl restart zabbix-agent
服务端测试获取数据
zabbix_get -s 192.168.181.136 -p 10050 -k tcp_status[LISTEN]
导入监控TCP模板
配置-模板-导入
模板地址
导入完成后选择客户端主机,添加模板即可,点击主机群组 myApplications 查看
点击tcp模板的监控项查看
查看图形