cacti监控TCP连接数的方法介绍

发布时间:2020-09-02编辑:脚本学堂
以前一直认为cacti是一个很难玩的东西。通过这两天的捣鼓发现cacti还是很强大的。cacti默认其实带了很多的模板我们常用的就是HostMIB 、SNMP、ucd/net这几种。当然操作起来也会很方便。

    以前一直认为cacti是一个很难玩的东西。通过这两天的捣鼓发现cacti还是很强大的。cacti默认其实带了很多的模板我们常用的就是HostMIB 、SNMP、ucd/net这几种。当然操作起来也会很方便。模板现成的嘛,由于需求原因。我觉得还是需要绘制tcp连接数的图为好。这样万一有连接数激增的问题发生也可以从容应对。

    从网上下了snmp的tcp connections模板文件。但是在应用中发现连接数超过600多就会发生断图,或者部分其他snmp绘图无法显示的问题发生。通过snmpwalk访问该机器,发现snmp显示非常非常缓慢。
一段一段的出来,而且连接数部分的显示是以下的情况:
TCP-MIB::tcpConnState.10.xx.xx.xx.33620.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33621.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33626.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33635.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33636.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33637.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33643.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33647.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33650.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33655.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33659.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33662.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33663.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33666.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33667.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33671.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33676.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33680.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33681.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33682.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33693.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33699.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33703.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33706.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)
TCP-MIB::tcpConnState.10.xx.xx.xx.33711.10.xx.xx.xx9.10050 = INTEGER: timeWait(11)

过多的连接数会导致snmp反应速度迟钝,因此引起snmp其他工作不正常。

解决办法:
用nagios的插件系统实现tcp连接数监控。

nagios插件系统觉得是一个很强大的中间件,调用远程系统资源感觉很好用。于是可以利用其特点只要返回连接数就ok了。没必要返回那么多信息,自然cacti处理起来速度就快了。对吧?

编写nagios plugins文件
sh
输出结果如下:
ESTABLISHED:4 LISTEN:14 SYN_RECV:0 SYN_SENT:0 TIME_WAIT:49 CLOSE_WAIT:0 FIN_WAIT1:0 FIN_WAIT2:0 UNKNOWN:0 LAST_ACK:0
这样就可以用cacti调用了。

当然由于使用的是nagios 插件因此这里要提醒大家nagios的nrpe部署大家要自己去搞定啊。
这里简单说一下,就是在nrpe.cfg里面需要加上一句:
command[cacti_check_tcp]=/usr/local/nagios/libexec/checktcp.sh

注意目录需要替换成你们自己放checktcp.sh脚本的目录
然后重启。测试命令是否生效
测试nagios的nrpe
/usr/local/nagios/libexec/check_nrpe -H 【你检测的ip】 -c cacti_check_tcp

只要返回结果是如下的格式就好:
ESTABLISHED:4 LISTEN:14 SYN_RECV:0 SYN_SENT:0 TIME_WAIT:49 CLOSE_WAIT:0 FIN_WAIT1:0 FIN_WAIT2:0 UNKNOWN:0 LAST_ACK:0

由于cacti配置过程较复杂我知道大家或许也并不关心究竟是怎么配置的。能画出图来就是王道~~
如果大家是按照我的配置脚本名称做的那直接导入模板就好,如果不是,那请去cacti后台的console->data input methods->nrpe-tcp connections 修改 Input String
默认是:/usr/local/nagios/libexec/check_nrpe -H -c cacti_check_tcp
修改为:[check_nrpe路径] -H -c [你的nrpe.cfg中command中括号里面的名称]

出图效果如下所示:
cacti