Snmp

Collectd SNMP 外掛無法找到 MIB

  • November 10, 2016

使用 Collectd 通過 snmp 外掛輪詢 Cisco 設備。我將所需的 Cisco mib(CISCO-MEMORY-POOL-MIB 和 CISCO-PROCESS-MIB)載入到 net-snmp 中,並且 snmpwalk 可以很好地看到它們。

但是當我嘗試將它們添加到 collectd 時,我在重新啟動 collectd 服務時收到以下錯誤:

Cannot find module (CISCO-MEMORY-POOL-MIB): At line 0 in (none)
Cannot find module (CISCO-PROCESS-MIB): At line 0 in (none)

日誌文件顯示:

[2016-11-09 14:13:56] Exiting normally.
[2016-11-09 14:13:56] collectd: Stopping 5 read threads.
[2016-11-09 14:13:56] snmp plugin: read_objid (CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolName) failed.
[2016-11-09 14:13:56] snmp plugin: read_objid (CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolName) failed.
[2016-11-09 14:13:56] snmp plugin: snmp_parse_oid (CISCO-PROCESS-MIB::cpmCPUTotal5secRev) failed.
[2016-11-09 14:13:56] snmp plugin: No such data configured: `memory_free'
[2016-11-09 14:13:56] snmp plugin: No such data configured: `memory_used'
[2016-11-09 14:13:56] snmp plugin: No such data configured: `cisco_cpu'
[2016-11-09 14:13:56] snmp plugin: No such data configured: `memory_free'
[2016-11-09 14:13:56] snmp plugin: No such data configured: `memory_used'
[2016-11-09 14:13:56] snmp plugin: No such data configured: `cisco_cpu'
[2016-11-09 14:13:56] snmp plugin: No such data configured: `memory_free'
[2016-11-09 14:13:56] snmp plugin: No such data configured: `memory_used'
[2016-11-09 14:13:56] snmp plugin: No such data configured: `cisco_cpu'
[2016-11-09 14:13:56] Initialization complete, entering read-loop.

這是我的 collectd.conf 的 snmp 部分

<Plugin snmp>
 <Data "SysInfo">
     Type "counter"
     Table false
     Instance "sysName"
     Values  "SNMPv2-MIB::sysName"
 </Data>
 <Data "uptime">
    Type "uptime"
    Table false
    Instance "Uptime"
    scale 0.01
   Values  "DISMAN-EVENT-MIB::sysUpTimeInstance"
 </Data>
 <Data "if_octets">
     Type "if_octets"
     Table true
     Instance "IF-MIB::ifAlias"
     Values "IF-MIB::ifHCInOctets" "IF-MIB::ifHCOutOctets"
 </Data>
 <Data "if_errors">
   Type "if_errors"
   Table true
   Instance "IF-MIB::ifAlias"
   Values "IF-MIB::ifInErrors" "IF-MIB::ifOutErrors"
 </Data>
<Data "memory_free">
   Type "memory_free"
   Table true
   Instance "CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolName"
   Values  "CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolFree"
 </Data>
 <Data "memory_used">
   Type "memory_used"
   Table true
   Instance "CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolName"
   Values "CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolUsed"
 </Data>
 <Data "cisco_cpu">
     Type "cisco_cpu"
     Table true
     Values "CISCO-PROCESS-MIB::cpmCPUTotal5secRev" "CISCO-PROCESS-MIB::cpmCPUTotal1minRev" "CISCO-PROCESS-MIB::cpmCPUTotal5minRev"
 </Data>    

我在這裡想念什麼?我也嘗試過使用 OID 地址而不是名稱,但我也一無所獲。

玩弄一些設置,我取得了一些成功。

如果我將類型更改為“gauge”並將表更改為“false”,則 CISCO-MEMORY-POOL PoolFree/Used 可以工作。說得通。但 CISCO-PROCESS-MIB cpu 以百分比形式返回。還是拿不到那個。

以下是 snmpwalk 返回 OID 的方式:

[root@NMS-srv2 ~]# snmpwalk -v 2c -c rbhome spine1 CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolFree
CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolFree.1 = Gauge32: 564215448 bytes

[root@NMS-srv2 ~]# snmpwalk -v 2c -c rbhome spine1 CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolUsed
CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolUsed.1 = Gauge32: 249119560 bytes

[root@NMS-srv2 ~]# snmpwalk -v 2c -c rbhome spine1 CISCO-PROCESS-MIB::cpmCPUTotal1minRev
CISCO-PROCESS-MIB::cpmCPUTotal1minRev.7 = Gauge32: 1 percent

這是現在的配置。

<Data "memory_used">
   Type "gauge"
   Table false
   Instance "memory_used"
   Values "1.3.6.1.4.1.9.9.48.1.1.1.5.1"
 </Data>
 <Data "cisco_cpu">
     Type "gauge"
     Table false
     Instance "cpu_used_min"
     Values "1.3.6.1.4.1.9.9.109.1.1.1.1.7.7" "1.3.6.1.4.1.9.9.109.1.1.1.1.8.7"
 </Data>  

仍然無法弄清楚 MIB / OID 名稱問題。

引用自:https://serverfault.com/questions/814076