一、zabbix监控TCP状态
1.1 Shell端的操作
这个tcp的连接状态,一般在排查问题的时候会提高很好的参考依据,所以这个一般是要监控上的。文章源自靠谱运维-https://www.ixdba.net/archives/1085
#netstat -an |awk '/(^tcp)/{++state[$NF]}END{for(key in state)print key"\t"state[key]}'文章源自靠谱运维-https://www.ixdba.net/archives/1085
TIME_WAIT 227
SYN_SENT 1
ESTABLISHED 1
LISTEN 8
#可能首先会想到netstat这个我们经常使用的命令,当然一般服务器的连接量级不会太大,你可能感觉不到明显的区别。但是当你的服务器连接数好几万的时候,不仅这个统计时间会比较久而且CPU会占用特别狠,如果你又统计的很频繁如一分钟统计一次,你就会发现这并不是一个很好的方案了。文章源自靠谱运维-https://www.ixdba.net/archives/1085
#ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' #用ss可以解决上面提到的问题文章源自靠谱运维-https://www.ixdba.net/archives/1085
SYN-SENT 1
ESTAB 1
TIME-WAIT 242
LISTEN 8
编写shell脚本:文章源自靠谱运维-https://www.ixdba.net/archives/1085
#vim /etc/zabbix/scripts/tcp_status.sh #先编写一个获取tcp状态的脚本文件文章源自靠谱运维-https://www.ixdba.net/archives/1085
#!/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=/home/zabbix/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
#mkdir /home/zabbix/tmp/文章源自靠谱运维-https://www.ixdba.net/archives/1085
#chown zabbix:zabbix /home/zabbix/tmp/文章源自靠谱运维-https://www.ixdba.net/archives/1085
#chmod +x /etc/zabbix/scripts/tcp_status.sh文章源自靠谱运维-https://www.ixdba.net/archives/1085
#chown zabbix:zabbix /etc/zabbix/scripts/tcp_status.sh文章源自靠谱运维-https://www.ixdba.net/archives/1085
创建一个自定义的key:文章源自靠谱运维-https://www.ixdba.net/archives/1085
#vim /etc/zabbix/zabbix_agentd.conf.d/tcp_status.conf #创建一个tcp_status的key文章源自靠谱运维-https://www.ixdba.net/archives/1085
UserParameter=tcp_status[*],/etc/zabbix/scripts/tcp_status.sh $1
#chown zabbix:zabbix /etc/zabbix/zabbix_agentd.conf.d/tcp_status.conf文章源自靠谱运维-https://www.ixdba.net/archives/1085
#/etc/init.d/zabbix_agentd restart #重启agent客户端文章源自靠谱运维-https://www.ixdba.net/archives/1085
在proxy端或者服务端做抓取数据测试:文章源自靠谱运维-https://www.ixdba.net/archives/1085
#因为我都是做的通过proxy代理,然后让客户端主动发送数据的形式,所以我在proxy节点上面抓取数据。文章源自靠谱运维-https://www.ixdba.net/archives/1085
#/usr/local/zabbix/bin/zabbix_get -s 192.168.1.28 -p 10050 -k tcp_status[LISTEN] #LISTEN就作为$1传参到脚本里面去了文章源自靠谱运维-https://www.ixdba.net/archives/1085
9
1.2 zabbix服务端的web操作
创建tcp连接模板:文章源自靠谱运维-https://www.ixdba.net/archives/1085
文章源自靠谱运维-https://www.ixdba.net/archives/1085
#创建一个叫做:TCP Connection Status的模板文章源自靠谱运维-https://www.ixdba.net/archives/1085
创建应用集:文章源自靠谱运维-https://www.ixdba.net/archives/1085
文章源自靠谱运维-https://www.ixdba.net/archives/1085
创建监控项:文章源自靠谱运维-https://www.ixdba.net/archives/1085
文章源自靠谱运维-https://www.ixdba.net/archives/1085
#监控项创建起来还是很快的,因为你创建完一个之后,就可以采取点进去克隆的方式,然后就是复制$1要传递的TCP状态去覆盖然后一点添加就可以了。文章源自靠谱运维-https://www.ixdba.net/archives/1085
创建图形:文章源自靠谱运维-https://www.ixdba.net/archives/1085
文章源自靠谱运维-https://www.ixdba.net/archives/1085
#然后我是做了下微调,我把ESTABLISHED、LISTEN、TIME-WAIT这种会比较关注而且基本经常数值是变动的状态值放到了图形的最下面,然后用比较深的颜色标注了出来,把基本没啥数的状态丢到了上面的一坨。文章源自靠谱运维-https://www.ixdba.net/archives/1085
主机关联模板:文章源自靠谱运维-https://www.ixdba.net/archives/1085
所有主机批量关联模板和单个主机单独添加关联模板这个就不说了,前面也介绍过了,把这个TCP链接的模板关联上就可以了。文章源自靠谱运维-https://www.ixdba.net/archives/1085
最后查看一下效果图:文章源自靠谱运维-https://www.ixdba.net/archives/1085
文章源自靠谱运维-https://www.ixdba.net/archives/1085
#关于触发器,个人觉得还是要在模板里面加入宏的概念,比如你定了个连接数1000就报警,但是有的机器连接数就是要上万的,对于那些连接数就是上万的机器呢,你都引用模板了触发器的阀值又没办法单独更改,所以引用宏变量是一个不错的解决方案。文章源自靠谱运维-https://www.ixdba.net/archives/1085
#简单的TCP状态的检测模板,没有做触发器,直接导入就可以用了,触发器可以根据自己的需求来搞。文章源自靠谱运维-https://www.ixdba.net/archives/1085
#TCP状态检测模板:文章源自靠谱运维-https://www.ixdba.net/archives/1085
评论