zabbix示例之监控TCP状态(八)

监控报警 靠谱运维 406℃ 0评论

一、zabbix监控TCP状态

1.1 Shell端的操作

这个tcp的连接状态,一般在排查问题的时候会提高很好的参考依据,所以这个一般是要监控上的。

#netstat -an |awk ‘/(^tcp)/{++state[$NF]}END{for(key in state)print key”\t”state[key]}’

Bash
TIME_WAIT       227
SYN_SENT        1
ESTABLISHED     1
LISTEN  8

#可能首先会想到netstat这个我们经常使用的命令,当然一般服务器的连接量级不会太大,你可能感觉不到明显的区别。但是当你的服务器连接数好几万的时候,不仅这个统计时间会比较久而且CPU会占用特别狠,如果你又统计的很频繁如一分钟统计一次,你就会发现这并不是一个很好的方案了。

#ss -ant | awk ‘NR>1 {++s[$1]} END {for(k in s) print k,s[k]}’  #用ss可以解决上面提到的问题

Bash
SYN-SENT 1
ESTAB 1
TIME-WAIT 242
LISTEN 8

编写shell脚本:

#vim /etc/zabbix/scripts/tcp_status.sh  #先编写一个获取tcp状态的脚本文件

Bash
#!/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/

#chown zabbix:zabbix  /home/zabbix/tmp/

#chmod +x /etc/zabbix/scripts/tcp_status.sh

#chown zabbix:zabbix /etc/zabbix/scripts/tcp_status.sh

创建一个自定义的key:

#vim /etc/zabbix/zabbix_agentd.conf.d/tcp_status.conf  #创建一个tcp_status的key

Bash
UserParameter=tcp_status[*],/etc/zabbix/scripts/tcp_status.sh $1

#chown zabbix:zabbix /etc/zabbix/zabbix_agentd.conf.d/tcp_status.conf

#/etc/init.d/zabbix_agentd restart  #重启agent客户端

在proxy端或者服务端做抓取数据测试:

#因为我都是做的通过proxy代理,然后让客户端主动发送数据的形式,所以我在proxy节点上面抓取数据。

#/usr/local/zabbix/bin/zabbix_get -s 192.168.1.28 -p 10050 -k tcp_status[LISTEN]  #LISTEN就作为$1传参到脚本里面去了

Bash
9

1.2 zabbix服务端的web操作

创建tcp连接模板:

image.png

#创建一个叫做:TCP Connection Status的模板

创建应用集:

image.png

创建监控项:

image.png

#监控项创建起来还是很快的,因为你创建完一个之后,就可以采取点进去克隆的方式,然后就是复制$1要传递的TCP状态去覆盖然后一点添加就可以了。

创建图形:

image.png

#然后我是做了下微调,我把ESTABLISHED、LISTEN、TIME-WAIT这种会比较关注而且基本经常数值是变动的状态值放到了图形的最下面,然后用比较深的颜色标注了出来,把基本没啥数的状态丢到了上面的一坨。

主机关联模板:

所有主机批量关联模板和单个主机单独添加关联模板这个就不说了,前面也介绍过了,把这个TCP链接的模板关联上就可以了。

最后查看一下效果图:

image.png

#关于触发器,个人觉得还是要在模板里面加入宏的概念,比如你定了个连接数1000就报警,但是有的机器连接数就是要上万的,对于那些连接数就是上万的机器呢,你都引用模板了触发器的阀值又没办法单独更改,所以引用宏变量是一个不错的解决方案。

#简单的TCP状态的检测模板,没有做触发器,直接导入就可以用了,触发器可以根据自己的需求来搞。

#TCP状态检测模板:

转载请注明:靠谱运维 » zabbix示例之监控TCP状态(八)

喜欢 (2)or分享 (0)
发表我的评论
取消评论

表情