Zabbixでsnmptrapdを使い、VMwareのホストから受信(snmptrapd編 その1)これと
Zabbixでsnmptrapdを使い、VMwareのホストから受信(snmptrapd編 その2)これの続き。
[root@mngsv ~]# cat /tmp/zabbix_snmptrap.log /usr/local/bin/zabbix_snmptrap.sh: line 41: read: `disman-event-mib': not a valid identifier /usr/local/bin/zabbix_snmptrap.sh: line 51: unexpected EOF while looking for matching ``' /usr/local/bin/zabbix_snmptrap.sh: line 57: syntax error: unexpected end of file エラー |
前回はこんなエラーが出ていたというところで終わっていた。既存スクリプトが間違っているかと思ったところ。
■zabbix_snmptrap.shの解析
ログをチェックするとエラーが出ていた。
zabbixに登録された値を見ると
SNMPv2-SMI::enterprises.6876.4.3.301 = STRING: "host" SNMPv2-SMI::enterprises.6876.4.3.302 = STRING: "192.168.11.111" |
この2つだけ取得できているといえる・・・
つまり、read文で標準入力から取得したうちの一部ということ。
/usr/local/bin/zabbix_snmptrap.sh これをブロック単位で動作検証してみる。
---- 33 read hostname 34 read ip 35 read uptime 36 read oid 37 read address 38 read community 39 read enterprise 40 #read DISMAN-EVENT-MIB 41 read disman-event-mib ---- |
スクリプトの上記の部分を目視で確認できるように書き加える。
echo $hostname,$ip,$uptime,$oid,$address,$community,$enterprise,$disman |
上記のような部分を書いて、どんな入力があるのかlogに出してみることにした。
snmptrapd.confはこのようにしていたので。(再掲)
traphandle default /bin/bash /usr/local/bin/zabbix_snmptrap.sh >> /tmp/zabbix_snmptrap.log 2>&1
zabbix.redalarm.jp, UDP: [192.168.11.11]:37864, DISMAN-EVENT-MIB::sysUpTimeInstance 0:0:00:00.00, SNMPv2-MIB::snmpTrapOID.0 SNMPv2-MIB::coldStart, SNMP-COMMUNITY-MIB::snmpTrapAddress.0 127.0.0.1, SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 "snmptest", SNMPv2-MIB::snmpTrapEnterprise.0 NET-SNMP-MIB::netSnmp.99999, |
入力が上記のような書き方だから、`echo $oid|cut -f2 -d’ ‘`こんな感じで全ての入力に施して抽出するらしい。
となると、VMwareから来るsnmptrapdパケットが問題と思われる。
/var/log/messagesに残っているVMwareからのパケットをもう一度見てみる。
SNMPv2-SMI::enterprises.6876.4.3 Enterprise Specific Trap (201) Uptime: 37 days, 22:20:57.99 SNMPv2-SMI::enterprises.6876.4.3.301 = STRING: "host" SNMPv2-SMI::enterprises.6876.4.3.302 = STRING: "192.168.11.111" SNMPv2-SMI::enterprises.6876.4.3.303 = "" |
この部分はずれているけれど、取れているようだ。
SNMPv2-SMI::enterprises.6876.4.3.304 = Hex-STRING: E7 B7 92 SNMPv2-SMI::enterprises.6876.4.3.305 = Hex-STRING: E9 BB 84 ff ff B2 SNMPv2-SMI::enterprises.6876.4.3.306 = Hex-STRING: 73 6E 6D 70 74 72 20 2D 20 E3 83 A1 E3 83 88 E3 83 AA E3 83 83 E3 82 AF 20 E4 BD BF E7 94 A8 E9 87 8F 20 3D 20 35 25 20 E3 E3 81 AF 20 E3 83 A1 E3 83 88 E3 83 AA E3 E4 BD BF E7 94 A8 E9 87 8F 20 3D 20 38 38 25 20 E3 81 BE E3 81 9F E3 81 AF 20 E3 83 A1 E3 83 88 E3 83 AA E3 83 83 E3 82 AF 20 E4 BD BF E7 20 31 25 20 E3 81 BE E3 81 9F E3 A1 E3 83 88 E3 |
でも、特にこの3点がHex-STRINGとなっていて、読めない=値として取得できない。
■日本語Hexをzabbixで取得している話はないだろうかと探した。
Hexはどうやら日本語ではないだろうかという指摘。
http://www.zabbix.jp/modules/newbb/viewtopic.php?topic_id=603&forum=6
http://www.casupport.jp/resources/bab9l/tec/021011514.htm
出力元で英語出力にしたら良いというものが。
■VMwareのSNMPを内部でどのように処理しているかをteeで取得することにした。
traphandle default /usr/bin/tee -a /tmp/zabbix_vmware.snmpoutput | /bin/bash /usr/local/bin/zabbix_snmptrap.sh >> /tmp/zabbix_snmptrap.log 2>&1 |
■テストコマンド
# snmptrap -v 1 -c snmptest 192.168.11.11 .1.3.6.1.4.1.8072.99999 localhost .1.3.6.1.4.1.8072.99999.1 s "Test Message" |
■結果
# cat /tmp/zabbix_vmware.snmpoutput ---- zabbix.redalarm.jp UDP: [192.168.11.11]:51530 DISMAN-EVENT-MIB::sysUpTimeInstance 0:0:00:00.00 SNMPv2-MIB::snmpTrapOID.0 SNMPv2-MIB::coldStart SNMP-COMMUNITY-MIB::snmpTrapAddress.0 127.0.0.1 SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 "snmptest" SNMPv2-MIB::snmpTrapEnterprise.0 NET-SNMP-MIB::netSnmp.99999 2回目 ---- zabbix.redalarm.jp UDP: [192.168.11.11]:36036 DISMAN-EVENT-MIB::sysUpTimeInstance 0:0:00:00.00 SNMPv2-MIB::snmpTrapOID.0 SNMPv2-MIB::coldStart SNMP-COMMUNITY-MIB::snmpTrapAddress.0 127.0.0.1 SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 "snmptest" SNMPv2-MIB::snmpTrapEnterprise.0 NET-SNMP-MIB::netSnmp.99999 |
次は前置きが長くなったけれど、日本語HEX変換について