■winevntでsnmpトラップをdebianに送信する。 テストしたOS:WinXPHome Squidサービスが起動しているかを定期的にチェックする。 Windows版squid http://d.hatena.ne.jp/labunix/20111022 ■以下でSNMPサービスを導入。 プログラムの追加と削除->Windows コンポーネントの追加と削除 -> 管理とモニタツール WMI SNMP プロバイダ 簡易ネットワーク管理プロトコル(SNMP) ■初期導入だけで、「PID」がある。 つまり、サービスSTATEは開始「4 RUNNING」している。 > sc getKeyName "SNMP Service" [SC] GetServiceKeyName SUCCESS Name = SNMP > sc getKeyName "SNMP Trap Service" [SC] GetServiceKeyName SUCCESS Name = SNMPTRAP > sc queryex SNMP SERVICE_NAME: SNMP TYPE : 10 WIN32_OWN_PROCESS STATE : 4 RUNNING (STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 PID : 3492 FLAGS : > sc queryex SNMPTRAP SERVICE_NAME: SNMPTRAP TYPE : 10 WIN32_OWN_PROCESS STATE : 4 RUNNING (STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 PID : 504 FLAGS : ■サービスの設定でSNMPトラップの送信先を指定。 SNMPサービス->プロパティ->トラップタブ コミュニティ :public トラップ送信先:debianのIP ■サービスの再起動 > net stop "SNMP Trap Service" > net stop "SNMP Service" > net start "SNMP Service" > net start "SNMP Trap Service" C:\myapp\wol193>net start | find "SNMP" SNMP Service SNMP Trap Service ■イベントログで確認する。 システムのイベントログ、7035,7036等を確認する。 また、アプリケーションのWSH、0,1.2.4.8.16を確認する。 > eventvwr ■「eventwin」で「カスタム->追加」からSNMPトラップ送信をするイベントを設定する。 > evntwin イベントソースから以下を選択 system -> eventlog Application -> WSH イベントIDを追加 eventlog 7901,7035,7036 WSH 1,2,4,8,16 ■サービスの停止、起動でイベントログからSNMPトラップの送信。 > net stop "SNMP Service" > net start "SNMP Service" ■debian側のSNMPトラップの受信設定の確認。 $ sudo tail -2 /etc/snmp/snmptrapd.conf authCommunity log,execute,net public ■syslogでSNMPトラップ受信を確認。 $ sudo grep snmptrapd /var/log/syslog | sed s/".*iso.3.6.1.4.1.311.1.1.3.1.1 \([LC]\)"/"\1"/g 2012-10-27 20:18:06 NET-SNMP version 5.4.3 Stopped. Stopping snmptrapd NET-SNMP version 5.4.3 AgentX subagent connected NET-SNMP version 5.4.3 Cold Start Trap (0) Uptime: 0:00:00.00#012 Link Up Trap (0) Uptime: 0:00:15.04#012#011iso.3.6.1.2.1.2.2.1.1.1 = INTEGER: 1 Link Up Trap (0) Uptime: 0:00:15.04#012#011iso.3.6.1.2.1.2.2.1.1.131074 = INTEGER: 131074 Cold Start Trap (0) Uptime: 0:00:00.00#012 Link Up Trap (0) Uptime: 0:00:15.06#012#011iso.3.6.1.2.1.2.2.1.1.1 = INTEGER: 1 Link Up Trap (0) Uptime: 0:00:15.06#012#011iso.3.6.1.2.1.2.2.1.1.131074 = INTEGER: 131074 ■「myevent.vbs」 参考:LogEvent メソッド http://msdn.microsoft.com/ja-jp/library/cc364408.aspx > type myevent.vbs C:\>type myevent.vbs '------------------------------------------------------------------------------- '0 :SUCCESS(成功) '1 :ERROR '2 :WARNING '4 :INFO '8 :AUDIT_SUCCESS '16:AUDIT_FAILURE '------------------------------------------------------------------------------- '[Call Section] ' WScript.Shell ' WScript.Arguments ' Set objShell = Wscript.CreateObject("Wscript.Shell") Set objArgs = WScript.Arguments '[Default Arguments Section] ' MYEVENT_ID = 0 MYEVENT_MSG = "Default Message" '[Get Augument Section] ' If objArgs.Count >= 1 Then MYEVENT_ID = objArgs(0) End If If objArgs.Count >= 2 Then MYEVENT_MSG = objArgs(1) End If 'Eventlog Source is "WSH" objShell.LogEvent MYEVENT_ID, MYEVENT_MSG ■「myevent.vbs」の実行例 > myevent.vbs > myevent.vbs 1 Squid ■引数を渡すバッチの作成 > type mysvcchk.bat @echo off cd %~dp0 net start | findstr "Squid" > nill if %ERRORLEVEL%==0 ( myevent.vbs 4 "%MYSERVICE_NAME% Running" ) ELSE ( myevent.vbs 2 "%MYSERVICE_NAME% Stopped" ) ■実行テスト > mysvcchk.bat ■実行した結果 $ sudo grep "snmptrapd.*\iso" /var/log/syslog | \ tail -1 | \ sed s/"= STRING\:\|\.*Uptime\: "/"\n"/g | \ sed s/"#.*"//g | \ sed s/"^ *\|\""//g | \ sed s/".*snmptrapd.*TRAP, "//g | \ awk '(NR==1||NR==3||NR==5||NR==6) {print $0}' xargs echo -n | \ sed s/"^\|,"/"\"&"/g | \ sed s/","/"&\""/g | \ sed s/"\,\"\$"/"\n"/ "SNMP v1"," community public"," Squid Running"," DUMMY-WINXP"," 4" ■ウインドウを隠すVBS 「Wscript.Echo objShell.CurrentDirectory」はどのディレクトリで実行されているかの確認用。 > type run.vbs Set objShell = WScript.CreateObject("WScript.Shell") 'Wscript.Echo objShell.CurrentDirectory objShell.Run "mysvcchk.bat",0 ■タスクで1分間隔でテスト、問題が無ければ15分間隔に変更する。