Zabbixでsnmptrapdを使い、VMwareのホストから受信(snmptrapd編 その2)

これの続きです。Zabbixでsnmptrapdを使い、VMwareのホストから受信(snmptrapd編 その1)

■ホストを無効状態にしてのテスト出力

zabbix_sender [28695]: DEBUG: answer [{
        "response":"success",
        "info":"Processed 0 Failed 1 Total 1 Seconds spent 0.000037"}]
Info from server: "Processed 0 Failed 1 Total 1 Seconds spent 0.000037"
sent: 1; skipped: 0; total: 1

■成功例

zabbix_sender [28770]: DEBUG: answer [{
        "response":"success",
        "info":"Processed 1 Failed 0 Total 1 Seconds spent 0.000162"}]
Info from server: "Processed 1 Failed 0 Total 1 Seconds spent 0.000162"
sent: 1; skipped: 0; total: 1

■snmptrap を投げてみてのテスト

# 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"

■ポートが開いているかどうか

udp 0 0 0.0.0.0:162 0.0.0.0:*

全て問題なし。

■vCenterの「SNMP」の設定

受信者URL: 192.168.11.11 162
コミュニティストリング snmptest

■iptablesも忘れずに

/etc/sysconfig/iptables変更
----
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 162 -j ACCEPT
----

■VMwareから受信してみる。

それで、ようやく本題のVMwareサーバ(vSphire4)からアラームの編集をして受信してみた。

このページを参考にしました。
VMware ESXi 4で機器障害を通知する方法

これを参考に、snmptrapd.confを見直してみる。

Host: (UDP: [ESXi-IP]:61457)
DISMAN-EVENT-MIB::sysUpTimeInstance 0:0:59:21.56
SNMPv2-MIB::snmpTrapOID.0 SNMPv2-MIB::warmStart
SNMP-COMMUNITY-MIB::snmpTrapAddress.0 [ESXi-IP]
SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 “public”
SNMPv2-MIB::snmpTrapEnterprise.0 SNMPv2-SMI::enterprises.6876.4.1

※引用もとは上記のサイト
これがsnmptrapdあてに投げられるのだとすると、

/usr/local/bin/zabbix_snmptrap.sh
----
read hostname
read ip
read uptime
read oid
read address
read community
read enterprise
 
oid=`echo $oid|cut -f2 -d' '`
address=`echo $address|cut -f2 -d' '`
community=`echo $community|cut -f2 -d' '`
enterprise=`echo $enterprise|cut -f2 -d' '`
 
oid=`echo $oid|cut -f11 -d'.'`
community=`echo $community|cut -f2 -d'"'`
----

このあたりを変更しないといけないだろう。

/var/logmessagesに出ていた

Nov 2 17:22:01 sv snmptrapd[28585]: 2011-11-02 17:22:01 192.168.11.110(via UDP: [192.168.11.110]:3323) TRAP, SNMP v1, community snmptest SNMPv2-SMI::enterprises.6876.4.3 Enterprise Specific Trap (201) Uptime: 37 days, 22:07:05.57 SNMPv2-SMI::enterprises.6876.4.3.301 = STRING: "host" SNMPv2-SMI::enterprises.6876.4.3.302 = STRING: "192.168.11.112" SNMPv2-SMI::enterprises.6876.4.3.303 = "" SNMPv2-SMI::enterprises.6876.4.3.304 = Hex-STRING: E7 81 B0 E8 89 B2 SNMPv2-SMI::enterprises.6876.4.3.305 = Hex-STRING: E8 89 B2 SNMPv2-SMI::enterprises.6876.4.3.306 = Hex-STRING: 73 6E 61 70 64 E3 83 86 E3 82 B9 E3 AE E3 82 A2 E3 83 A9 E3 83 BC E3 83 A0 20B6 E6 85 8B 20 3D 20 E3 83 91 E3 83 AF E3 83 BC E3 82 AA E3 83 B3 20 E3 81 BE E3 81 9F E3 81 AF 20 E7 8A B6 E6 85 8B 20 3D 20 E6 8E A5 E7 B6 9A E4 B8 AD
Nov 2 17:26:33 sv snmptrapd[28585]: 2011-11-02 17:26:33 192.168.11.110(via UDP: [192.168.11.110]:3400) TRAP, SNMP v1, community snmptest SNMPv2-SMI::enterprises.6876.4.3 Enterprise Specific Trap (201) Uptime: 37 days, 22:11:37.68 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 91 SNMPv2-SMI::enterprises.6876.4.3.305 = Hex-STRING: E9 BB B2 SNMPv2-SMI::enterprises.6876.4.3.306 = Hex-STRING: 73  70 64 E3 81 AE E3 83 86 E3 82 B9 E3 83 88 E7 94 A8 E3 82 A2 E3 83 A9 E3 83 BC E3 83 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 36 25 20 E3 81 BE E3 81 9F E3 E3 83 88 E3 83 AA E3 83 83 E3 E7 94 A8 E9 87 8F 20 3D 20 38 39 25 20 E3 81 BE E3 81 9F E3 81 E3 83 88 E3 83 AA E3 83 83 E3 82 AF 20 E4 BD BF E7 94 A8 E9 87 8F
Nov 2 17:30:21 sv snmptrapd[28585]: 2011-11-02 17:30:21 192.168.11.110(via UDP: [192.168.11.110]:3466) TRAP, SNMP v1, community snmptest SNMPv2-SMI::enterprises.6876.4.3 Enterprise Specific Trap (201) Uptime: 37 days, 22:15:25.73 SNMPv2-SMI::enterprises.6876.4.3.301 = STRING: "host" SNMPv2-SMI::enterprises.6876.4.3.302 = STRING: "192.168.11.112" SNMPv2-SMI::enterprises.6876.4.3.303 = "" SNMPv2-SMI::enterprises.6876.4.3.304 = Hex-STRING: E7 81 B0 E8 89 B2 SNMPv2-SMI::enterprises.6876.4.3.305 = Hex-STRING: E9 BB B2 SNMPv2-SMI::enterprises.6876.4.3.306 = Hex-STRING: 73 61 70 64 20 2D 20 E7 8A B6 E6 85 8B 20 3D 20 E3 83 91 E3 83 AF E3 83 BC 83 B3 20 E3 81 BE E3 81 9F E3 81 AF 20 E7 8A B6 E6 85 8B 20 3D 20 E6 8E A5 E7 B6 9A E4 B8 AD
Nov 2 17:31:08 sv snmptrapd[28585]: 2011-11-02 17:31:08 192.168.11.110(via UDP: [192.168.11.110]:3487) TRAP, SNMP v1, community snmptest SNMPv2-SMI::enterprises.6876.4.3 Enterprise Specific Trap (201) Uptime: 37 days, 22:16:11.82 SNMPv2-SMI::enterprises.6876.4.3.301 = STRING: "host" SNMPv2-SMI::enterprises.6876.4.3.302 = STRING: "192.168.11.112" SNMPv2-SMI::enterprises.6876.4.3.303 = "" SNMPv2-SMI::enterprises.6876.4.3.304 = Hex-STRING: E7 81 B0 E8 89 B2 SNMPv2-SMI::enterprises.6876.4.3.305 = Hex-STRING: E9 BB 84 E8 89 B2 SNMPv2-SMI::enterprises.6876.4.3.306 = Hex-STRING: 73 6E 6D 70 74 72 61 70 64 2D 31 31 32 20 2D 20 E7 8A B6 E6 85 8B 20 3D 20 E3 83 91 E3 83 AF E3 83 BC E3 82 AA E3 83 B3 20 E3 81 BE E3 81 9F E3 81 AF 20 E7 8A B6 E6 85 8B 20 3D 20 E6 8E A5 E7 B6 9A E4 B8 AD
Nov 2 17:35:54 sv snmptrapd[28585]: 2011-11-02 17:35:54 192.168.11.110(via UDP: [192.168.11.110]:3570) TRAP, SNMP v1, community snmptest 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 91 SNMPv2-SMI::enterprises.6876.4.3.305 = Hex-STRING: E9 BB  B2 SNMPv2-SMI::enterprises.6876.4.3.306 = Hex-STRING: 73 6E  70 64 2D 31 31 31 20 2D 20 E3 83 A1  83 AA E3 83 83 E3 82 AF 20 E4 BD 87 8F 20 3D 20 35 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 94 A8 E9 87 38 38 25 20 E3 81 BE E3 81 83 A1 E3 83 88 E3 83 AA AF 20 E4 BD BF E7 94 A8 31 25 20 E3 81 BE E3 81 9F  A1 E3 83 88 E3

パケットは届いていたんだけれど、参考にしたサイトとはかなり違うというか、量が違う。
「Hex-STRING:」という見慣れない文字と、16進数だろうなという文字の羅列が軽く絶望させてくれたような。
ともあれ、通常のスクリプトでは取得できなかった。その経緯は下記の通り。

# cat /etc/snmp/snmptrapd.conf
----
authCommunity log,execute,net snmptest
traphandle default /bin/bash /usr/local/bin/zabbix_snmptrap.sh
#traphandle .1 /bin/bash /usr/local/bin/zabbix_snmptrap.sh
----

恐らく、OIDが取れないというものも関係していると思われる。
.1 はやめてみる。default にもどした。

追加したスクリプトの変更がうまく動いていないことが判明。

snmpdtrapd.conf の起動にエラーログ記録を追加。

# cat /etc/snmp/snmptrapd.conf
----
traphandle default /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"

結果

[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
エラー

原因は次回。