使用zabbix监控tcp连接数

说好了每个月至少要写四篇博客,可是最近真的是很忙。其实也不是了,只是我觉得自己在忙,而回首看去,却可笑的发现却在瞎忙,无甚业绩。承诺不可破,正好最近在梳理一些zabbix监控的事情,就简单写篇博客凑凑数吧。

方案一:

平时出故障时,我们到服务器上总是执行netstat -an | awk '/^tcp/ {++S[$NF]} END{for(a in S) print a, S[a]}'看下tcp的连接状态,很显然当使用zabbix监控tcp的连接状态时,首先想到的就是这种方法。

首先在crontab中加入一条下面的计划任务,这么做的原因是直接执行netstat -an | awk '/^tcp/ {++S[$NF]} END{for(a in S) print a, S[a]}'很慢,如果在zabbix中直接这么调用,很大可能收不到数据或者收到的数据断断续续:

# Puppet Name: tcp_status
*/1 * * * * netstat -an | awk '/^tcp/ {++S[$NF]} END{for(a in S) print a, S[a]}' > /tmp/tcp_status

接着在zabbix agent上/etc/zabbix/zabbix_agentd.conf添加自定义的监控项:

UserParameter=tcp.status[*],awk '{if ($$1~/^$1/)print $$2}’ /tmp/tcp_status

最后到zabbix server上新建TCP Connection status模板,加入下面这些监控项:

tcp.status[CLOSED]
tcp.status[CLOSE_WAIT]
tcp.status[CLOSING]
tcp.status[ESTABLISHED]
tcp.status[FIN_WAIT1]
tcp.status[FIN_WAIT2]
tcp.status[LAST_ACK]
tcp.status[LISTEN]
tcp.status[SYN_RECV]
tcp.status[SYN_SENT]
tcp.status[TIME_WAIT]

完成后的效果如下图:

线上设备收集到的实际tcp连接数如下图:


方案二:

未完待续…