MackerelでWindowsイベントログ監視とプロセス監視をする
ちょっと触ってちょっと検証したため、メモしておきます。
MackerelはWindowsでも利用可能ですが、公式のcheckプラグインがWindowsに対応していないため、個別に用意する必要があります。
※プロセス監視のcheck-procsは公式に用意してあるのですが、自分でビルドする必要があります。
環境
Mac OSXを利用しています、gitやhomebrewなどは予め環境が出来ているという状況です。
Go環境の整備
Goの環境整備にあたっては、弊社のSongmuさんの記事を利用させてもらいました。
check-procsのビルド
予め"$HOME/repos"というディレクトリを作っておきました。
git clone https://github.com/mackerelio/go-check-plugins.git
git cloneしてローカル環境にデータを持ってきます。
GOOS=windows GOARCH=386 go build -o check_procs_windows.exe
でビルドすると、こんなエラーが出ました。
check_procs.go:9:2: cannot find package "github.com/jessevdk/go-flags" in any of: /usr/local/Cellar/go/1.6/libexec/src/github.com/jessevdk/go-flags (from $GOROOT) /Users/sharatani/dev/src/github.com/jessevdk/go-flags (from $GOPATH) check_procs.go:10:2: cannot find package "github.com/mackerelio/checkers" in any of: /usr/local/Cellar/go/1.6/libexec/src/github.com/mackerelio/checkers (from $GOROOT) /Users/sharatani/dev/src/github.com/mackerelio/checkers (from $GOPATH)
パッケージが見つからないと出ているので、以下のコマンドを実行します。
go get github.com/jessevdk/go-flags go get github.com/mackerelio/checkers
その後で改めて以下のコマンドでビルドをします。
GOOS=windows GOARCH=386 go build -o check_procs_windows.exe
すると、check_procs_windows.exeが出来ています。
検証
AWSのWindowsServer2012R2で試してみました。
- タスクマネージャー起動させる
- コマンドプロンプトで"check_procs_windows.exe --pattern Task"実行
- "Procs OK: Found 1 matching processes; cmd /Task/"が表示されたのでOK
- タスクマネージャーを終了させて、再度コマンド実行して確認
- "Procs CRITICAL: Found 0 matching processes; cmd /Task/"が表示されたのでOK
mackerel-agent.confへ記述するには、こんな感じです。
[plugin.checks.taskmanager-procs] command = "C:\\Users\\Administrator\\Downloads\\check_procs_windows.exe --pattern Task"
confを変更して有効化するには、サービスからmackerel-agentを再起動させる必要があります。
Windowsのイベントログ監視
イベントログを監視するにはいくつか方法があるのですが、試した結果、パワーシェルを使うよりもexeを使った方が楽でした。
一旦こちらからexeプログラムをダウンロードします。
check_winevent - NRPE check plugin for Windows eventlogs | itefix.net
単体でコマンドプロンプトから実行したら、こんな感じでした。
C:\> check_winevent.exe --log application --type error EVENT OK - 2 events|events=2;;;
これはアプリケーションログに対して、タイプがエラーになっているものが2件見つかったため、2と表示されています。 2と言ってもログの確認範囲(いつからいつまでなのか)が分からなかったので、いくつか試したところ・・・・
試しにコマンドをちょっと変えて実行してみました。
C:\> check_winevent\\check_winevent.exe --log application --type error --critical 0 EVENT CRITICAL - 2 events|events=2;;0;
0以上の場合はCRITICALにするオプションを付与したところ、CRITICALが返ってきています。
--verbose
オプションを付与して、出力を詳細に出してみました。
C:> check_winevent.exe --log application --type error --verbose Event log(s): application Event code(s): all Event type(s): error Event sources: all Time window: 3600 seconds, timestamp: 20160517043648.000000+000 Eventlog application - 2 selected events Total number of events selected: 2 EVENT OK - 2 events|events=2;;;
これを見ると、Time windowという項目が有り、3600秒=60分が検出の対象になっているようです。
--window
オプションで秒数を変更出来るようなので、60秒にして実行した見たところ、今度はCRITICALではなくOK表示でした。
C:> check_winevent.exe --log application --type error --critical 0 --window 60 EVENT OK - 0 events|events=0;;0;
他にもいくつかオプションはあるようなのですが、ちゃんと動いていそうなので、細かい所はまた後で。
mackerel-agent.confにはこのように記述します、記述後はサービスからmackerel-agentを再起動させて反映します。
[plugin.checks.windowsApp-exe] command = "C:\\Users\\Administrator\\Downloads\\check_winevent\\check_winevent.exe --log application --type error --critical 0"