check-log
プラグインについて
サーバー監視のSaaSであるMackerelは, 公式が提供するプラグインを利用することで, サーバー上にある様々なリソースや情報を監視することができます.
その中の1つが, ログ監視を行うcheck-logです.
このプラグインを使えば, サーバ上に存在する任意のログファイルを監視し, そこに指定した文字列が出現した場合にアラートを発生させることができます.
例えば, mackerel-agent.conf
に次のように書いておけば, /var/log/myapp/app.log
に, [CRITICAL]
というログが書き込まれた時, アラートを発生させることができます.
[plugin.checks.app]
command = "check-log --file /var/log/myapp/app.log --pattern '\\[CRITICAL\\]'"
更にその際, 例えばMackerelからSlackへの通知が設定されていれば, Slack上には次のようなメッセージが送信されます.
check-log
を使えば, アプリケーションのエラーについても, Mackerelで管理をすることができ, 非常に便利です.
エラーの内容も取得したい!
とはいえ, 上の通知内容では, 「[CRITICAL]
という文字列が含まれるログが書き込まれた」ということしかわかりません.
ログの具体的な内容を確認するためには, 実際にサーバーに接続して, ログファイルを確認する必要があります. これは非常に面倒です.
というわけで, こういう場合は--return
オプションを使いましょう.
[plugin.checks.app]
command = "check-log --file /var/log/myapp/app.log --pattern '\\[CRITICAL\\]' --return"
check-log
に--return
オプションを付与すると, 条件に当てはまったログの全文がMackerelに送付されるようになります.
例えば, 上記の設定であれば, /var/log/myapp/app.log
に[CRITICAL] Test for Mackerel check-log plugin
という文字列を書き込んだ場合, Slackへの通知が次のようになります.
[CRITICAL] Test for Mackerel check-log plugin
という文言が含まれていることがわかります.
また, この内容はMackerel上からも確認することができます.
注意点
--return
オプションを有効にすると, 条件を満たしたログの内容が全てMackerelに送信されてしまいます.
意図せず秘匿しないといけない情報が含まれないように, 注意しましょう.
また, 送信するログのサイズが大きい場合, 表示が切り詰められる場合もあるので, こちらも注意しましょう.
補足
...ぶっちゃけ, この記事でご紹介したcheck-log
の--return
オプションについては, Mackerelのマニュアルのログ監視をおこなうに, しっかり書かれています.
が, mackerelio/go-check-pluginsのcheck-logのREADMEには書かれておらず, 先日Mackerelの中の人にお聞きするまで知らなかった, という感じだったので, もしご存じない方がいたら... という気持ちで書きました.