一、实际需求
服务器运行了lighttpd,主要为了统计当前连接数,然后cacti来画出当前连接数的统计图:这里说一下有几个方法来实现这个功能:
1、snmpget直接取值,经常发生取值不准确的问题:
# snmpget -c public -v 2c 127.0.0.1 .1.3.6.1.2.1.6.9.0
TCP-MIB::tcpCurrEstab.0 = Gauge32: 0
2、用snmp抓取所有链接后统计行数,虽然信息比较准确,但效率低下,如果监控点超过千台,那几乎数据都是timeout收场:
# snmpget -c public -v 2c 127.0.0.1 .1.3.6.1.2.1.6.13.1.3 |wc -l
725
3、在本机上写脚本统计后用snmp发送信息,cacti收集后画图,具体方法;
二、解决方案
snmp提供了发送自定义信息的功能。查看snmpd.conf会看到有一个小节是关于外部脚本的,Executables/scripts。这个小节里
面也举了例子,告诉你怎么通过snmp发送信息。
在snmpd.conf任意位置添加一行:
exec .1.3.6.1.4.1.2021.18 tcpCurrEstab /etc/tcpconn.sh
其中tcpCurrEstab是命令的名称,后面是命令以及参数。命令的名称可以随便起。脚本执行的结果类似下面:
# /etc/tcpconn.sh
80
脚本内容如下:
$ cat tcpconn.sh
#!/bin/sh
conn=`netstat -s -t | grep connections\ established |awk '{print $1}'`
echo $conn
经测试直接查看proc的方法比用netstat更有效率。
重启snmpd,然后远程通过snmpwalk接收一下数据看看:
# snmpwalk -c public -v 2c 127.0.0.1 .1.3.6.1.4.1.2021.18
UCD-SNMP-MIB::ucdavis.18.1.1 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.18.2.1 = STRING: "tcpCurrEstab"
UCD-SNMP-MIB::ucdavis.18.3.1 = STRING: "/etc/tcpconn_total.sh"
UCD-SNMP-MIB::ucdavis.18.100.1 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.18.101.1 = STRING: "488"
UCD-SNMP-MIB::ucdavis.18.102.1 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.18.103.1 = ""
其中我们需要的是UCD-SNMP-MIB::ucdavis.18.101.1 = STRING: “488″这一行:
# snmpwalk -v 1 192.168.1.201 -c public .1.3.6.1.4.1.2021.18.101.1
UCD-SNMP-MIB::ucdavis.18.101.1 = STRING: "488"
能采集到数据之后,就可以配置cacti来接收了。在cacti界面中console->Templates->Data
Templates,然后点击右上角的Add,Data Templates中的name是给这个数据模板的命名,Data
Source中的name将来显示在Data Sources中,我这里添加“|host_description| - Tcp Conn. -
ESTBLISHED”,选get snmp data,Internal Data Source
Name也可以随便添,这个用来给rrd文件命名。设置完后就可以save了,save之后会发现下面多了一些选项,在最下面那个添上我们需要的数据的
OID“.1.3.6.1.4.1.2021.18.101.1”,可以保存了。
此后需要创建一个Graph
Templates,好让cacti生成图片。在cacti界面中console->Templates->Graph
Templates,然后点击右上角的Add,Templates中的name是给这个数据模板的命名,Graph
Template中的name是将来显示在图片上面中间的内容,我这里添加“|host_description| - Tcp Conn. -
ESTBLISHED”,其他保持默认,保存之后上面会出来一些选项。
在Graph Template Items中添加一个item,Data Source选之前添加的,color选择一个图片的颜色,Graph
Item Type选AREA,也就是区域,也可以选其他的线条,Text Format设置说明。然后再添加一个,Graph Item
Type选GPRINT,Consolidation Function选LAST,也就是当前的值,Text
Format输入current。你还可以添加一些Graph Item Type为COMMENT的注释说明等。
现在只要为host添加这个画图模板就可以看到画出来的图了。
阅读(949) | 评论(0) | 转发(0) |