通过自己写的小程序(Agent),可以利用SNMP服务获得主机的某些信息(比如服务状态等)。具体步骤如下:
- 软件安装
在被监控的主机上安装snmp服务器软件(比如net-snmp-5.1.2-11.EL4.10),在监控机上安装客户端软件(比如,net-snmp-utils-5.1.2-11.EL4.10)。 - 配置SNMP服务。
可以使用snmpconf命令。选择配置文件后,选择“2: Extending the Agent”,在选择“2: Run a command that intepretes the request for an entire tree”。然后输入OID,(比如:.1.3.6.1.4.1.96.255.1),然后输入自己的程序的位置(比如:/usr/local/sbin/my_agent)。配置完成后保存配置文件,将其拷贝到/etc/snmp/snmpd.conf。可以看出,刚才的配置在其中生成一行:
pass .1.3.6.1.4.1.96.255.1 /usr/local/sbin/my_agent - Agent的要求
并非随便的程序都可以做为SNMP Agent,这里要my_agent的运行结果生成三行:
MIBOID
TypeOfResult
ValueOfResult
IBOID自己定义一个,如.1.3.6.4.1.96.255.1;TypeOfResult,如int;ValueOfResult,如35,或者1或者0。监控机就可以通过这个值来判断被监控机器的情况。要说明的是,agent采用bash脚本,SNMP并不识别。会出错:“ No Such Instance currently exists at this OID”。根据本人测试,用Perl脚本与C语言的printf输出都可以。为什么bash脚本不行,目前还不清楚,猜想是bash的console问题。
- 启动snmp服务。可以用/etc/init.d/snmpd start。但是发现有时通过这个脚本启动后,客户端访问会出错。此时手工启动,即snmpd -c /etc/snmp/snmpd.conf。然后,客户端访问就会成功。所有过程都一样,就是启动方式不一样。不知道为什么?请高手赐教!
- 客户端访问
客户端安装在监控机上,可以通过snmpget来查看,命令如下:
snmpget -v2c -c public IP OID
比如:snmpget -v2c -c public 192.168.50.11 .1.3.6.1.4.1.96.255.1
结果显示:SNMPv2-SMI::enterprises.96.255.1 = INTEGER: 96