linux下,net-snmp已经提供了完整的snmp服务和框架,尤其是基本的snmp信息,如sysObjectId、CPU、内存等。通过标准的snmp的oid,可以很容易的从net-snmp所提供的服务中获取这些信息。但net-snmp的trap功能需要通过脚本来配置和实现,这对于很多做web或java开发的人来说,比较陌生。借助snmp4j,很多熟悉java的人,可以快速的实现基于snmp4j的trap功能。
trap就是基于snmp的agent,运行在被检测的服务器节点上,检测所需要的服务运行状态,当某些指标超过所配置的告警指标,就自动想所配置的网管汇报告警信息。
通常情况下,对于不同的agent,网管中会有独立的标识,也即是sysObjectId。网管与agent之间也会保持心跳信息。net-snmp提供了基本的心跳服务。在心跳信息中,会包含sysObjectId,如果是V3协议,还需要在所有通讯交互的协议头中包含msgAuthoritativeEngineID、msgAuthoritativeEngineBoots、msgAuthoritativeEngineTime,这些信息,snmp4j默认是不对外提供的,也就是没有现成的接口供我们使用(至少目前我没找到,如果有人找到了,告诉我一下)。
msgAuthoritativeEngineID:是trap的ID,唯一标识一个trap,网管通过该值区分不同的trap。该值可以通过net-snmp的配置文件中配置,如在snmpd.conf中增加一下配置项:
oldEngineID 0x8000bee9043133363134313438383733
oldEngineID为