2016年5月3日火曜日

ZabbixでESXiのSNMP Trapを監視する設定

自宅環境にZabbixを構築しており、ESXiからのSNMP Trapを監視できるように設定してみた。思いの外、手順が多かったので、忘れないようにまとめておく。

<環境>
・Zabbixバージョン:2.2.11
・Zabbixサーバ IPアドレス:192.168.33.22
・ESXiバージョン:VMware ESXi 6.0.0 Update 2
・ESXi IPアドレス:192.168.33.11
・SNMPコミュニティ名:public

1. snmptrapdの設定

まず、net-snmpをインストールする。net-snmpはZabbixインストール時の前提パッケージとなっているので、通常はインストールされており問題はないが、net-snmp-perlが入っていない場合は必要となるため追加でインストールする。

# yum install net-snmp
# yum install net-snmp-perl

次にsnmptrapdの設定として、/etc/snmp/snmptrapd.confに以下を追加する。
--------------------
authCommunity   log,execute,net public
perl do "/etc/zabbix/alertscripts/zabbix_trap_receiver.pl";
--------------------

次に、/etc/sysconfig/snmptrapdに以下を追加する。
--------------------
OPTIONS="-Lsd -p /var/run/snmptrapd.pid -M /usr/share/snmp/mibs:/usr/share/snmp/venders -m all"
--------------------

上記は、MIBの保存ディレクトリとして/usr/share/snmp/vendersも追加する設定を加える設定となる。指定したディレクトリへ、ESXiのMIBを配置することをお忘れなく。

※MIBは以下からダウンロードできる
SNMP MIB module file download (1013445)
https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1013445

最後にサービス起動&起動時に自動起動するようにする。

# service snmptrapd start
# chkconfig snmptrapd on

2. Zabbixの設定① (CLIでの設定)

ZabbixでSNMPTrapを受信する方法として、SNMPTTを使うか、Zabbix付属のPerlスクリプトを使うかの2パターンがある。今回は後者のPerlスクリプトでの実装を行う。

まず、該当のPerlスクリプトを規定のディレクトリに配置する(デフォルトで置かれている可能性もあり)。

# cp /var/lib/zabbix/zabbix_trap_receiver.pl /etc/zabbixx/alertscripts/
# chmod 755 /etc/zabbixx/alertscripts/zabbix_trap_receiver.pl

次にZabbixの設定ファイルを編集する。

/etc/zabbix/zabbix_server.confの以下箇所を編集する。
--------------------
SNMPTrapperFile=/var/log/zabbix/zabbix_traps.tmp
StartSNMPTrapper=1
--------------------

最後にzabbix-serverをリスタートする。

# service zabbix-server restart

この状態でSNMP Trapを正常に受信し、スクリプトが実行されることを確認してみる。以下コマンドでテストTrapを送信する。

# snmptrap -v 1 -c public 127.0.0.1 '.1.3.6.1.6.3.1.1.5.3' '0.0.0.0' 6 33 '55' .1.3.6.1.6.3.1.1.5.3 s "teststring000"

/var/log/messagesにTrapの内容が表示されていればsnmptrapdの動作はOK。

# tail /var/log/messages
--------------------
May  3 21:49:04 t3022ce67 snmptrapd[15789]: 2016-05-03 21:49:04 0.0.0.0(via UDP: [127.0.0.1]:58671->[127.0.0.1]) TRAP, SNMP v1, community public#012#011IF-MIB::linkDown Enterprise Specific Trap (33) Uptime: 0:00:00.55#012#011IF-MIB::linkDown = Hex-STRING: E2 80 9C 74 65 73 74 73 74 72 69 6E 67 30 30 30 #012E2 80 9D
--------------------

さらに、/var/log/zabbix/zabbix_traps.tmpにTrapの内容が表示されていれば、Perlスクリプトもきちんと動作していることが確認できる。

# tail -20 /var/log/zabbix/zabbix_traps.tmp
--------------------
23:42:00 2016/05/03 ZBXTRAP 127.0.0.1
PDU INFO:
  notificationtype               TRAP
  version                        0
  receivedfrom                   UDP: [127.0.0.1]:38270->[127.0.0.1]
  errorstatus                    0
  messageid                      0
  community                      public
  transactionid                  48
  errorindex                     0
  requestid                      0
VARBINDS:
  DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (55) 0:00:00.55
  SNMPv2-MIB::snmpTrapOID.0      type=6  value=OID: IF-MIB::linkDown.0.33
  IF-MIB::linkDown               type=4  value=STRING: "teststring000"
  SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 type=4  value=STRING: "public"
  SNMPv2-MIB::snmpTrapEnterprise.0 type=6  value=OID: IF-MIB::linkDown
--------------------

3. ESXiの設定

Zabbixに監視設定を実施する前に、ESXiからSNMP Trapを飛ばす設定を実施しておく。ESXi6.0ではSNMPを有効にするためには、ESXi Shellから実施する必要があるため、SSHでESXiにログインした後、以下ファイルを編集&サービスリスタートにて有効化する。

/etc/vmware/snmp.xmlの下線の箇所を編集。
 ※<enable>:デフォルトfalseなのでtrueに変更
 ※<communities>:デフォルト空白なのでpublicに変更
 ※<targets>:デフォルト空白なので、Trap送信先を以下形式で指定
       <IPアドレス>@162 <コミュニティ名>
--------------------
<config><snmpSettings><enable>true</enable><port>161</port><syscontact></syscontact><syslocation></syslocation><EnvEventSource>indications</EnvEventSource><communities>public</communities><targets>192.168.33.22@162 public</targets><EventFilter>1.3.6.1.4.1.6876.4.90.0.401</EventFilter><engineid>00000063000000a100000000</engineid><loglevel>info</loglevel><authProtocol></authProtocol><privProtocol></privProtocol><largestorage>true</largestorage></snmpSettings></config>
--------------------

設定後、サービスをリスタートする。

[root@esx01:~] /usr/bin/services.sh restart

SNMPの設定確認を実施。

[root@esx01:~] esxcli system snmp get
--------------------
   Authentication:
   Communities: public
   Enable: true
   Engineid: 00000063000000a100000000
   Hwsrc: indications
   Largestorage: true
   Loglevel: info
   Notraps:
   Port: 161
   Privacy:
   Remoteusers:
   Syscontact:
   Syslocation:
   Targets: 192.168.33.22@162 public
   Users:
   V3targets:
--------------------

さらに、5分起きに出力されるTrapの抑制を実施する。

[root@esx01:~] esxcli system snmp set --notraps 1.3.6.1.4.1.6876.4.90.0.401

再度設定を確認。Notrapsに設定が反映されていることを確認する。

[root@esx01:~] esxcli system snmp get
--------------------
   Authentication:
   Communities: public
   Enable: true
   Engineid: 00000063000000a100000000
   Hwsrc: indications
   Largestorage: true
   Loglevel: info
   Notraps: 1.3.6.1.4.1.6876.4.90.0.401
   Port: 161
   Privacy:
   Remoteusers:
   Syscontact:
   Syslocation:
   Targets: 192.168.33.22@162 public
   Users:
   V3targets:
--------------------

4. Zabbixの設定② (Web GUIでの設定)

SNMP Trapを監視できるようにするため、ZabbixのWeb GUIにて、以下の順に設定していく。

4.1 テンプレートの作成

・テンプレート名:Template SNMP Trap
・所属グループ:Templates



4.2 アイテムの作成

・名前:SNMP Trap log
・タイプ:SNMP トラップ
・キー:snmptrap[]
・データ型:ログ
・ヒストリの保存期間(日):90
・ログの時間の形式:hh:mm:ss yyyy/MM/dd
・アプリケーションの作成:SNMP Trap
・アプリケーション:-なし-



4.3 トリガーの作成

・名前:SNMP Trap
・条件式:{Template SNMP Trap:snmptrap[].regexp(.*VMWARE-VMINFO-MIB.*)}=0
 ※VMWARE-VMINFO-MIBは情報レベルのTrapのため、トリガーの動作対象外とした
・障害イベントを継続して生成:チェック
・深刻度:重度の障害


4.4 ホストへテンプレート適用

作成したテンプレートをESXiのホストへリンクする。同時にSNMPインタフェースの設定も実施しておくこと。詳細な手順は割愛。

4.5 動作確認

「監視データ」→「概要」画面にてアプリケーションを「SNMP Trap」でフィルタするとSNMP Trapの受信状況がわかる。


テストTrapを飛ばして動作試験をする場合は、ESXiにてサービスをリスタートする(もっと簡単にTrapを飛ばす方法はあると思うが)。

[root@esx01:~] /usr/bin/services.sh restart

正常であれば、情報が更新される。SNMPv2-MIB::warmStartやVMWARE-VMINFO-MIB::vmwVmHBDetectedが出力されればOK。


参考

Zabbix Documentation 2.2 3 SNMPトラップ
https://www.zabbix.com/documentation/2.2/jp/manual/config/items/itemtypes/snmptrap

ESXi 5.1 ホスト上で、SNMP の有効化及びテストができない (2070242)
https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2070242

SNMP Trap is repeated every 5 minutes (2020271)
https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2020271