やること
Windows2016評価版を使って、SNMPTRAPを発報してみる。
(余談)Zabbixでイベントログを収集・アラーム可能だが、イベントログは雑多の情報が入り混じるため、昔ながらのSNMPTRAPが一番落ち着くのだ。
登場人物
- windows2016サーバ (kvmのguestOSとして稼働)
- centos7(snmptrapd)サーバ(kvmのguestOSとして稼働)
設定情報
設定項目 | 値 | 新規or既存 |
---|---|---|
snmptrap宛先IP | 192.168.10.189 | 新規 |
(イベント)ログ名 | Application | 既存 |
(イベント)ソース | Testbatch | 新規 |
(イベント)ID | 1 | 既存(未設定) |
※個人環境なので適宜読み替えてください。
手順
- SNMPサービスの追加と設定
- イベントログのソースを事前に追加
- evntwin(イベント⇒snmptrap)の設定
- イベントを書き込んで検証
SNMPサービスの追加と設定
SNMPサービスの追加
「サーバーマネージャー」⇒「役割と機能の追加ウィザード」⇒「機能」から、「SNMPサービス」を追加
SNMPサービスを追加インストールしておかないと、SNMPTRAP飛ばせないし、evntwinコマンドもインストールされないので必須です。
SNMPサービス設定
「サーバーマネージャー」⇒「サービス」⇒「トラップ」画面で以下を設定。
コミュニティ名を追加し、次にトラップ送信先を追加。
イベントログのソースを事前に追加
new-eventlog -logname application -source Testbatch
- Windows2016では、上記設定が必要のようです。
- new-eventlogせずに、write-eventlogすると、以下のメッセージが出てしいました。
write-eventlog:ソース名"Testbatch"はコンピューター"localhost"に存在しません。
2012/2008の時は、いきなりwrite-eventlogでもOKだったような気がするけどなぁ。
試しに、write-eventlogが正常終了することを確認する。
write-eventlog -logname application -source Testbatch -entrytype error -eventid 1 -message "test#1 event"
evntwin(イベント⇒snmptrap)の設定
evntwinの実行
eventwinを立ち上げた直後に、画面右下の「編集(E)>>」をクリックすると、上記のような画面になります。
あとは、Application中のTestbatchを選択して、トラップにしたいイベントID=1を選択する。
何も触らずに、「OK」を押すのみです。
これで設定終了。
イベントを書き込んで検証
windowsにて、write-eventlogを実行してみる。
write-eventlog -logname application -source Testbatch -entrytype error -eventid 1 -message "test#1 event"
イベントログに書き込まれていることを確認したら、次を確認。
snmptrap受信側で確認
May 18 07:54:34 localhost snmptrapd[2298]: 2017-05-18 07:54:34 192.168.10.83(via UDP: [192.168.10.83]:57165->[192.168.10.189]:162) TRAP, SNMP v1, community public#012#011.1.3.6.1.4.1.311.1.13.1.9.84.101.115.116.98.97.116.99.104 Enterprise Specific Trap (1) Uptime: 0:13:42.78#012#011.1.3.6.1.4.1.311.1.13.1.9999.1.0 = STRING: "test#1 event#015#012"#011.1.3.6.1.4.1.311.1.13.1.9999.2.0 = STRING: "Unknown"#011.1.3.6.1.4.1.311.1.13.1.9999.3.0 = STRING: "win2016"#011.1.3.6.1.4.1.311.1.13.1.9999.4.0 = STRING: "1"#011.1.3.6.1.4.1.311.1.13.1.9999.5.0 = STRING: "1"#011.1.3.6.1.4.1.311.1.13.1.9999.6.0 = STRING: "test#1 event"
上記snmptrapd.logを見てわかるように、OIDの中身が
.1.3.6.1.4.1.311.1.13.1.9.84.101.115.116.98.97.116.99.104
.1.3.6.1.4.1.311.1.13.1 = 固定OID
9 = strlen( Testbatch ) = 9文字
84.101.115.116.98.97.116.99.104 = アスキーコードtoキャラクタすると"Testbatch"
[root@sv ~]# echo 84.101.115.116.98.97.116.99.104 | sed 's/\./ /g' | awk '{print "printf \"%x%x%x%x%x%x%x%x%x\n\" "$0;}' | sh
546573746261746368
[root@sv ~]#
tips
- イベントのログ名を誤って作ってしまった場合(消したい場合)
remove-eventlog -logname hogehoge
しかし、この作業後、イベントログの一部が記載されなくなってしまった。
※WindowsOSリブートすると何事もなかったように正常稼働した。
結果
- windows2012/2008と同じようにevntwin使えるが、new-eventlogしとかないとwrite-eventlogがエラーになる。
- トラップのOIDは、固定OIDに"ソースの文字列長"+"ソース名のasciicode"で構成される。
- (重要)同じイベントソースで、eventidのみを変えた場合は、specific-trapの情報のみが変更される。