Beyond The Limit

はじまりは2001年

MackerelでWindowsイベントログ監視とプロセス監視をする

ちょっと触ってちょっと検証したため、メモしておきます。

MackerelはWindowsでも利用可能ですが、公式のcheckプラグインWindowsに対応していないため、個別に用意する必要があります。

※プロセス監視のcheck-procsは公式に用意してあるのですが、自分でビルドする必要があります。

環境

Mac OSXを利用しています、gitやhomebrewなどは予め環境が出来ているという状況です。

Go環境の整備

Goの環境整備にあたっては、弊社のSongmuさんの記事を利用させてもらいました。

www.songmu.jp

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"