BLOGTIMES
2011/01/22

ESXi の状態変化をメールで受け取る

  esxi  systemmanagemant 
このエントリーをはてなブックマークに追加

以前、ESXi で snmp を有効にする方法を調べて設定したものの、ハードウェアイベントに関しては snmp から状態を監視することができなかったので、今日は snmptrapd を使ったメール通知に挑戦してみました。ESXi から直接イベント通知メールを送ることはできないので、別途 net-snmp がインストールされた CentOS の snmptrapd を使うことになります。

以下、設定メモ。

snmptrapdの設定をする

ESXi側の設定を変える前に通知サーバーの準備をします。
これはESXi側の設定を変更すると、作業の都合上 snmptrap が発生するため、それで動作テストを済ますことができるためです。
必要となるnet-snmpのインストールについては割愛しますが、yumを使えば一撃かと思います。

外部からの snmptrap を受信できるように下記のように設定を変更しておきます。

# diff -u snmptrapd.options.org snmptrapd.options --- snmptrapd.options.org 2011-01-22 22:00:00.000000000 +0900 +++ snmptrapd.options 2011-01-22 22:00:00.000000000 +0900 @@ -1,2 +1,2 @@ # snmptrapd command line options -# OPTIONS="-Lsd -p /var/run/snmptrapd.pid" +OPTIONS="-Lsd -p /var/run/snmptrapd.pid"

メールの送信先を指定するために、設定ファイルに設定を記入します。
なお、デフォルトのインストールだと下記のファイルは存在しないので、新規にファイルを作って中身を書き込みます。

下記の設定は、全ての通知を hsur@example.jp に送信します。また、使うメールサーバを -s で、fromアドレスを -f で設定します。

/etc/snmp/snmptrapd.conf

authCommunity log,execute,net public traphandle .1 /usr/bin/traptoemail -f snmptrapd@example.jp -s mail.example.jp hsur@example.jp

これでひとまず設定は完了なので、デーモンを起動します。

# /etc/init.d/snmptrapd start

ESXi側の設定をする

次にESXi側のsnmpの設定を変更して、先ほど立てたsnmptrapdに通知が送られるようにします。
SSHもしくは、端末から直にログインして下記のファイルの<targets>タグの中に(サーバIP)@(コミュニティ名)を記載します。

/etc/vmware/snmp.xml

<config><snmpSettings><enable>true</enable><communities>public</communities><targets>192.168.0.1@public</targets></snmpSettings></config>

その後、サービスを再起動して変更を反映させます。

# /sbin/services.sh restart

サービス再起動の際に snmptrap が発生するので、メールボックスを確認します。

メールが読めない

通知先のメールボックスにはおそらく下記のようなメールが届いているはずです。

To: hsur@example.jp From: snmptrapd@example.jp Subject: trap received from esxi01: SNMPv2-SMI::enterprises.6876.4.1.0.1 Host: esxi01 (UDP: [192.168.0.100]:60157) DISMAN-EVENT-MIB::sysUpTimeInstance 0:0:00:01.29 SNMPv2-MIB::snmpTrapOID.0 SNMPv2-SMI::enterprises.6876.4.1.0.1 SNMPv2-SMI::enterprises.6876.50.101 80 SNMPv2-SMI::enterprises.6876.50.102 "/vmfs/volumes/########-########-####-############/examplevm/examplevm.vmx" SNMPv2-SMI::enterprises.6876.2.1.1.2.80 "MoId: 80" SNMP-COMMUNITY-MIB::snmpTrapAddress.0 192.168.0.100 SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 "public" SNMPv2-MIB::snmpTrapEnterprise.0 SNMPv2-SMI::enterprises.6876.4.1

この時点ではESXiのMIBがまだインストールされていないので、例えばイベント名が SNMPv2-SMI::enterprises.6876.4.1.0.1 になったりしていて、ホストにどんな変化が起こったのかということがよくわかりません。ということで、今度はこれがメッセージとしてきちんと読めるようにMIBのインストールを行っていきます。

mibをインストールしてメッセージを読めるようにする

ESXi4用のMIBはVMware ESX 4.0 SNMP MIB Modulesからダウンロードでき(ESXi5の場合は下記を参照)るので、あらかじめダウンロードして通知サーバー上に置いておきます。今回は標準でインストールされているMIBとごっちゃにするのが嫌だったので、 /usr/local/share/snmp/mibs にインストールして、デーモンがそこを参照するように設定することにします。

ディレクトリを作って、アーカイブを展開し、不要なファイルを削除します。

# mkdir -p /usr/local/share/snmp/mibs # cd /usr/local/share/snmp/mibs # cp /path/to/VMware-esx-mibs-1.0.1-237711.zip . # unzip VMware-esx-mibs-1.0.1-237711.zip # mv esx/* . # rm -rf esx VMware-esx-mibs-1.0.1-237711.zip notifications.txt README

この時点で、/usr/local/share/snmp/mibs以下には .mib ファイルだけが入っている状態です。

このMIBがsnmptrapdから参照されるように設定を変更します。

# diff -u snmptrapd.options.org snmptrapd.options --- snmptrapd.options.org 2011-01-22 22:00:00.000000000 +0900 +++ snmptrapd.options 2011-01-22 22:00:00.000000000 +0900 @@ -1,2 +1,2 @@ # snmptrapd command line options -# OPTIONS="-Lsd -p /var/run/snmptrapd.pid" +OPTIONS="-Lsd -p /var/run/snmptrapd.pid -m ALL -M +/usr/local/share/snmp/mibs"

設定後、デーモンを再起動しておきます。

# /etc/init.d/snmptrapd restart

もう一度メールを確認する

テストするためにはもう一度snmptrapを発生させる必要があるので、ESXiに戻ってサービスの再起動を行ってみます。

# /sbin/services.sh restart

そうすると、さっきのメールのコード部分が文字になり意味が分かるようになります。
前述のメールと比べると、例えば SNMPv2-SMI::enterprises.6876.4.1.0.1 → VMWARE-VMINFO-MIB::vmwVmPoweredOn となっているのが分かると思います。

To: hsur@example.jp From: snmptrapd@example.jp Subject: trap received from esxi01: VMWARE-VMINFO-MIB::vmwVmPoweredOn Host: esxi01 (UDP: [192.168.0.100]:60157) DISMAN-EVENT-MIB::sysUpTimeInstance 0:0:00:01.29 SNMPv2-MIB::snmpTrapOID.0 VMWARE-VMINFO-MIB::vmwVmPoweredOn VMWARE-VMINFO-MIB::vmwVmID 80 VMWARE-VMINFO-MIB::vmwVmConfigFilePath /vmfs/volumes/########-########-####-############/examplevm/examplevm.vmx VMWARE-VMINFO-MIB::vmwVmDisplayName.80 MoId: 80 SNMP-COMMUNITY-MIB::snmpTrapAddress.0 192.168.0.100 SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 "public" SNMPv2-MIB::snmpTrapEnterprise.0 VMWARE-PRODUCTS-MIB::vmwESX

これで設定は完了です。あとは障害があればメールで通知が飛んでくるはずです。

(おまけ)Windows側からテスト用のTrapを発生させたり、設定を確認する

また、VMware vSphere CLIをインストールしたPCがあれば vicfg-snmp.pl を使ってテスト用のtrap飛ばしたり、設定を確認することもできます。

C:\Program Files\VMware\VMware vSphere CLI\bin>vicfg-snmp.pl -server 192.168.0.100 -username root -T Enter password: Sending test nofication(trap) to all configured targets... Complete. Check with each target to see if trap was received.
C:\Program Files\VMware\VMware vSphere CLI\bin>vicfg-snmp.pl -server 192.168.0.100 -username root -s Enter password: Current SNMP agent settings: Enabled : 1 UDP port : 161 Communities : public Notification targets : 192.168.0.1@162/public

2011/02/05 追記

上記の設定のままだと死ぬほどメールが送られてきたりするので、必要ないイベントをフィルタするためのスクリプトを書きました

2011/11/01追記

ESXi5のMIBは下記からダウンロードできます。
 →VMware vSphere 5.0 SNMP MIBs


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/4028
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン