这几天研究通过 SNMP 执行 shell 来获取数据,并且由 Cacti 处理,非常不错的,以后通过 shell 和 SNMP 就可以监测很多东西了。

    方法其实也挺简单的,以显示 FAH 进度为例说明。

    1·在 /etc/snmp/snmpd.conf 增加一行。

       exec .1.3.6.1.4.1.2021.255 fah /bin/sh /usr/bin/snmp_fah.sh

    2·snmmp_fah.sh 的内容如下,比较简单的。

         for i in `seq 4`
         do
           [ -f /usr/bin/fah$i/unitinfo.txt ] && {
             cat /usr/bin/fah$i/unitinfo.txt | tail -n1 | awk '{print $2}'
           }
         done

       这个 shell 手工执行后,最多会分四行返回四个百分比的数字,也就是一行一个,如:

       64%
       45%
       44%
       44%

    3·在 Cacti 服务器执行命令 snmpwalk -v1 192.168.1.1 -cpublic .1.3.6.1.4.1.2021.255,显示的结果类似下面的:

       UCD-SNMP-MIB::ucdavis.255.1.1 = INTEGER: 1
       UCD-SNMP-MIB::ucdavis.255.2.1 = STRING: "fah"
       UCD-SNMP-MIB::ucdavis.255.3.1 = STRING: "/bin/sh /usr/bin/snmp_fah.sh"
       UCD-SNMP-MIB::ucdavis.255.100.1 = INTEGER: 0
       UCD-SNMP-MIB::ucdavis.255.101.1 = STRING: "64%"
       UCD-SNMP-MIB::ucdavis.255.101.2 = STRING: "45%"
       UCD-SNMP-MIB::ucdavis.255.101.3 = STRING: "44%"
       UCD-SNMP-MIB::ucdavis.255.101.4 = STRING: "44%"
       UCD-SNMP-MIB::ucdavis.255.102.1 = INTEGER: 0
       UCD-SNMP-MIB::ucdavis.255.103.1 = ""
       再执行 snmpwalk -v1 192.168.1.1 -cpublic .1.3.6.1.4.1.2021.255.101,应该就是下面的结果了:

       UCD-SNMP-MIB::ucdavis.255.101.1 = STRING: "64%"
       UCD-SNMP-MIB::ucdavis.255.101.2 = STRING: "45%"
       UCD-SNMP-MIB::ucdavis.255.101.3 = STRING: "44%"
       UCD-SNMP-MIB::ucdavis.255.101.4 = STRING: "44%"
       后面的 Cacti 就会用到 .1.3.6.1.4.1.2021.255.101 的了;

    4·在 Cacti 的 console - Templates - Data Templates 增加数据源,譬如名称定义为 FAH1,Data Input Method 选择 Get SNMP Data,Maximum Value 就是 100 了,重要的 OID 就是 .1.3.6.1.4.1.2021.255.101.1,这个就是取得 snmp_fah.sh 返回的第一行结果了。其余的三个类似,只是 OID 的最后一位分别是 2、3、4 而已;

    5·在 Templates - Graph Templates 增加图像,譬如名称定义为 FAH,把上面的 FAH1 ~ FAH4 都画到一张图里面,具体要怎么画,看个人喜欢而已,没有统一标准,这就是 Cacti 的灵活性了;

    6·在 Management - Devices 修改或增加相应的设备,Associated Graph Templates - Add Graph Template: 增加 FAH 模板,Create Graphs for this Host 建 FAH 的监测图。

    这样稍后就可以在设备监测图中看到 FAH 的四个进度了。

    了解了原理,做起来其实就是很简单的事情了,对吧?