MackerelでWindowsのイベントログ監視を行う

みなさん、こんにちは!
AWS事業本部の青柳@福岡オフィスです。

今回は、監視サービス Mackerel でWindowsサーバーを監視する際のトピックをお送りします。

Windowsのイベントログを監視したい!

最近「Mackerelを使ってWindowsのイベントログを監視したい」という要件があり、方法を調べるためにMackerel公式サイトを検索したところ、ヘルプサイトには情報がありませんでしたが、ブログサイトに情報がありました。

Windows 版 mackerel-agent をアップデートしました ほか - Mackerel ブログ #mackerelio

ブログ記事によると、イベントログ監視の機能は Mackerel公式プラグイン として提供されており、なおかつ、最新のWindows版mackerel-agentには Windowsイベントログ監視 のプラグインが同梱されているとのことでした。

イベントログ監視プラグインの利用方法については、専用のヘルプページは用意されていないようですが、MackerelのGitHubリポジトリで公開されています。
https://github.com/mackerelio/go-check-plugins/tree/master/check-windows-eventlog

今回はこちらのリポジトリを参照しながら、イベントログ監視プラグインを使った監視を試してみました。

準備:mackerel-agentのインストール

前述の通り、イベントログ監視とサービス監視のプラグインはmackerel-agentに同梱されているため、必要なのはmackerel-agentのインストールのみです。

Mackerel公式ヘルプを参照して、サクっとインストールしてしまいましょう。

Windowsにmackerel-agentをインストールする - Mackerel ヘルプ

インストールした後、mackerel-agentのインストール先フォルダを確認してみます。

確かに、イベントログ監視プラグイン(check-windows-eventlog.exe)のファイルがインストールされていることが確認できます。

(他にも気になるプラグインのファイルが見受けられますが・・・そこは最後に紹介します)

イベントログ監視の設定方法

イベントログ監視プラグインは、1分毎にイベントログをチェックして、指定した条件に合致したイベントが発生した場合にアラートを通知します。

イベントログ監視プラグインの設定は、mackerel-agentの設定ファイルmackerel-agent.confで設定します。

[plugin.checks.<監視ルール名>]
command = ["check-windows-eventlog", "--log", "<イベントログの名前(種類)>", "--type", "<イベントレベル>", "--source-pattern", "<イベントソース>", "--event-id-pattern", "<イベントID>", "--message-pattern", "<メッセージ内容>"]
prevent_alert_auto_close = true

1行目の [plugin.checks.~] でチェックプラグインの設定であることを示し、ピリオドで区切られた3番目の項目には監視ルール名(アラート通知の際に表示される)を記述します。

2行目にチェックコマンドのパラメータを指定します。各パラメータの説明は以下の通りです。

パラメータ 意味 説明
--log イベントログの名前(種類) 以下のいずれかを指定する:
・Application (アプリケーションログ)
・Security (セキュリティログ)
・System (システムログ)
--type イベントレベル 以下のいずれかを指定する:
・Error (エラー)
・Warning (警告)
・AuditFailure (失敗の監査)
--source-pattern イベントソース 部分一致条件の文字列を指定
(正規表現での指定も可能)
--event-id-pattern イベントID 単一IDの指定、
または,で区切った複数指定、
または-で区切った範囲指定が可能
--message-pattern メッセージ内容 部分一致条件の文字列を指定
(正規表現での指定も可能)

3行目は「アラートの自動クローズの抑止」の設定です。
この行が無い場合、イベント監視でエラー・警告を検知してアラート状態になっても、次のチェックのタイミング(=1分後)にはアラート状態が解除されてしまいます。
(これは、チェックプラグインのデフォルト動作では、1分毎にチェックを行った最新の結果を常にアラート状態へ反映しようとするためです)

"Error"、"AuditFailure" のイベントはMackerel上では「Critical」レベルのアラートとして、"Warning" のイベントはMackerel上では「Warning」レベルのアラートとして通知されます。 ※ "Information (情報)"、"Success (成功)"、"AuditSuccess (成功の監査)" のイベントを監視対象にすることはできません。

設定例

例1:システムログに出力された、ソースが「Service Control Manaeger」の全ての警告イベントをアラート通知する

[plugin.checks.check-eventlog-service-control-manager-warning]
command = ["check-windows-eventlog", "--log", "System", "--type", "Warning", "--source-pattern", "Service Control Manager"]
prevent_alert_auto_close = true

例2:アプリケーションログに出力された、ソースが「Application Error」、イベントIDが「1000」のエラーイベントのうち、メッセージ内容に「foo.exe」が含まれるものをアラート通知する

[plugin.checks.check-eventlog-application-error-foo]
command = ["check-windows-eventlog", "--log", "Application", "--type", "Error", "--source-pattern", "Application Error", "--event-id-pattern", "1000", "--message-pattern", "foo.exe"]
prevent_alert_auto_close = true

イベントログ監視の動作を確認してみる

実際の動作を確認してみましょう。

イベントログでエラーや警告を意図的に発生させるのは大変なので、テストイベント発行のコマンドを使うことにします。

準備として、イベントログ監視の設定を行います。
mackerel-agent.confの最後に以下の記述を追記します。

[plugin.checks.check-eventlog-testevent]
command = ["check-windows-eventlog", "--log", "LOGTYPE", "--type", "Warning", "--source-pattern", "Test Event"]
prevent_alert_auto_close = true

設定ファイルを更新したら、mackerel-agentサービスを再起動して設定を反映します。
これで準備はOKです。

それでは、テストイベントを発行してみましょう。

まず、PowerShell上で、テスト用のイベントソースを登録するコマンドを実行します。(これは最初の1回のみ行えばOKです)

PS> New-EventLog -LogName Application -Source "Test Event"

次に、おもむろにテストイベントを発行します。

PS> Write-EventLog -LogName Application -Source "Test Event" -EntryType Warning -EventID 100 -Message "This is a test event."

しばらくすると、Mackerel管理コンソールにアラートが通知されるはずです。

イベントログ監視のアラートは自動でクローズされることはないため、アラートを確認した後、手動でクローズする必要があります、

アラート画面の「アラートを閉じる」をクリックします。

必要に応じて「メモ」欄を記入して、「アラートを閉じる」をクリックします。

アラートがクローズされました。

おわりに

単純な条件指定ではありますが、Mackerelを使ってWindowsイベントログの監視を行うことができました。

MackerelのGitHubリポジトリでは、今回紹介したパラメータ以外にも多くのパラメータが説明されています。(例:除外条件指定のパラメータなど)
https://github.com/mackerelio/go-check-plugins/tree/master/check-windows-eventlog

より複雑な監視をしたい場合は、上記リンクを参考にいろいろパラメータを設定してみるとよいかもしれません。

おまけ:その他の監視プラグインについて

Windows版のmackerel-agentをインストールすると、以下のプラグインが一緒にインストールされます。

プラグイン名 説明
check-disk ディスク空き容量の監視
check-log ログファイル(テキスト形式ログ)の監視
check-ntservice Windowsサービスを監視する
check-procs プロセスを監視する
check-tcp TCP接続を監視する
check-uptime アップタイム(稼働時間)を監視する
check-windows-eventlog Windowsイベントログを監視する
mackerel-plugin-mssql Microsoft SQL Serverのメトリックを収集する
mackerel-plugin-windows-server-sessions Windowsサーバーセッションのメトリックを収集する

これらのうち、check-log (ログファイル監視)、check-procs (プロセス監視) などは、Linux版mackerel-agentと機能が共通となっています。

ログファイル監視やプロセス監視については、Linux版の設定方法に関する記事を弊社もきゅりんが執筆していますので、参考になると思います。

Mackerel 公式チェックプラグインを使ってping監視/sshログイン監視/その他をしてみる | DevelopersIO

Mackerel 公式チェックプラグインを使ってapacheプロセス監視およびレスポンスタイム監視をしてみる | DevelopersIO

その他にも、Windows版mackerel-agent特有のプラグインとして check-ntservice (Windowsサービス監視) などもあります。

サービス監視については、機会をみて試してみたいと思います。