利用cacti和性能计数器实现自定义远程监控
性能监控一直是各个网站必须认真考虑的问题,对于一个庞大的系统来说,如果不知道各个模块的运行情况,那出了意外,连怎么瘫掉的都不知道。我想这个很多软件开发商都注意到了这点,所以在相应的web,数据库产品中加了各种监控数据,例如web连接数,request并发量,数据库链接数等等,供大家使用。而且当系统分布在多个机器上时,分布式监控问题又凸显了出来,于是cacti应运而生。通过SNMP协议,cacti能很方便的同时对多台机器进行snmp数据的读取以实现分布式监控。
如果您还是cacti新手,建议您先去cacti的官网上了解一下这个产品(http://www.cacti.net/)。
然而有时候光靠系统、web、数据库提供给我们的预定义监控值还是不够的,很多时候我们需要定义特定的监控值来监控我们的系统。可能您首先想到的是性能计数器,性能计数器可以通过自定义的category和counter,很方便地定义,实现和监控特定需要的值。关于自定义性能计数器的解决方案请参见:
http://it.dianping.com/using_attribute_wrapping_performance_counter.htm
不过有个不足之处,就是查看性能计数器的话,则必须登录到所使用的机器上利用系统的性能组件来查看。那如果能结合cacti和性能计数器,实现远程监控的话,岂不是很完美?
经过各大搜索引擎的帮忙,找到了一个实现类似功能的库,下载地址:http://erwan.l.free.fr/snmptools ,并突破了重重防火墙的限制,通过代理最终下到了这个珍贵的东东。。为了方便大家下载,本文参考资料中提供了此工具的下载。
snmptools基本的实现思路很简单,性能计数器->SNMP->cacti,再细分一下,这个方案分两步,第一步是计数器到SNMP,第二步是SNMP到cacti。
第一步计数器到SNMP,snmptools提供了一个SNMP Service的扩展Agent Dll,与windows自带的SNMP Service集成。这个Agent Dll的主要功能就是通过一个配置文件自定义OID,以及对应的计数器映射。
<counter.ini>
[1.3.6.1.4.1.15.1]
counter=PhysicalDisk\Avg. Disk Queue Length\_Total
[1.3.6.1.4.1.15.2]
counter=LogicalDisk\Free Megabytes\_Total
以上是配置文件的样例,此Dll用的MIB根节点是1.3.6.1.4.15,可以在此节点下定义自己所需要的counter对应的OID。
一旦snmptools安装配置完毕,可通过cacti所在机器使用linux命令测试一下:(cacti一般是装linux上的,虽然有windows版本的cacti,但有些功能不能用)
snmpwalk -v1 -c public [MONITOR_IP] 1.3.6.1.4.1.15
此命令会遍历此节点所有使用到的OID值。如果值都获取到了,说明第一步操作已成功。
接下来是第二步,这步就简单很多,snmptools提供了cacti模板,封装了取snmp值的query方法,将此方法导入后,即可使用。
上图就是通过再上面的配置文件运行,监控得到的结果。呵呵,看上去很爽吧,那就快尝试去用用吧。
snmptools下载地址:snmptools v2
摘自:http://it.dianping.com/using_cacti_performance_counter_to_implement_customized_remote_monitoring.htm