这几天对SNMP协议 进行了研究,相比SSH方式到远程主机获取脚本运行结果的方式,SNMP方式获取既安全又方便,在远程主机繁忙时段,运用SNMP好像比SSH还省资源。
以下示例如何添加自义脚本。
1、目的:想采集远程主机运行脚本
[root@mini25 tmp]# cat /root/conn.sh
#!/bin/sh
conn=`netstat -s -t | grep connections\ established |awk '{print $1}'`
echo $conn
2、远程主机须启用SNMP协议及开启SNMP协议,以下是/etc/snmp/snmpd.conf
com2sec notConfigUser default public
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
view systemview included .1
access notConfigGroup "" any noauth exact systemview none none
extend .1.3.6.1.4.1.2021.18 conn /root/conn.sh
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root (configure /etc/snmp/snmp.local.conf)
注意红色部分:
extend .1.3.6.1.4.1.2021.18 conn /root/conn.sh
extend : 表示SNMP采用EXTEN扩展方法
.1.3.6.1.4.1.2021.18:OID节点,其中.1.3.6.1.4.1.2021.是专用扩展之用,不可更改,后面的可自定义,如18可改成任意数字
conn:自定义OID名,可任意
/root/conn.sh:脚本绝对路径
3,如何获取值
[root@mini25 tmp]# snmpwalk -v 2c -c public 127.0.0.1 .1.3.6.1.4.1.2021.18
UCD-SNMP-MIB::ucdavis.18.1.0 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.18.2.1.2.4.99.111.110.110 = STRING: "/root/conn.sh"
UCD-SNMP-MIB::ucdavis.18.2.1.3.4.99.111.110.110 = ""
UCD-SNMP-MIB::ucdavis.18.2.1.4.4.99.111.110.110 = ""
UCD-SNMP-MIB::ucdavis.18.2.1.5.4.99.111.110.110 = INTEGER: 5
UCD-SNMP-MIB::ucdavis.18.2.1.6.4.99.111.110.110 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.18.2.1.7.4.99.111.110.110 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.18.2.1.20.4.99.111.110.110 = INTEGER: 4
UCD-SNMP-MIB::ucdavis.18.2.1.21.4.99.111.110.110 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.18.3.1.1.4.99.111.110.110 = STRING: "4"
UCD-SNMP-MIB::ucdavis.18.3.1.2.4.99.111.110.110 = STRING: "4"
UCD-SNMP-MIB::ucdavis.18.3.1.3.4.99.111.110.110 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.18.3.1.4.4.99.111.110.110 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.18.4.1.2.4.99.111.110.110.1 = STRING: "4"
[root@mini25 tmp]# snmpwalk -v 2c -c public 127.0.0.1 .1.3.6.1.4.1.2021.18.4.1.2.4.99.111.110.110.1
UCD-SNMP-MIB::ucdavis.18.4.1.2.4.99.111.110.110.1 = STRING: "4"
经测试:OID .1.3.6.1.4.1.2021.18.4.1.2.4.99.111.110.110.1 是固定不变的。
疑问:SNMP对结果的采集是定时执行,还是其它什么规律呢??????
验证测试:
在snmpd.conf 中添加 一行
extend .1.3.6.1.4.1.2021.19 conn /root/wr.sh
对应脚本内容为:
[root@mini25 ~]# cat wr.sh
#!/bin/bash
echo $(date +%F' '%H':'%M':'%S) >> /root/log.txt
作用就是写一个时间值 到日志文件,同时用tailf 监控日志文件,用于验证到底是什么时间运行脚本的?
经验证,只有通过snmpwalk命令访问指定OID.1.3.6.1.4.1.2021.19 时,S NMP才会启动脚进程,所以,脚本执行的频繁度完全取决于访问对应OID频繁度。