check-plugin を使ってログ監視の色々を確認してみました。

20160424150544

初回登録時

対象ログファイルの先頭から読まれます。
大量通知を避けるため、一度コマンド実行でステートファイル作成後にconfファイル有効化を行った方が安全だと思います。

ログファイルのパーミッション

mackerel-agent は root で動作しているため、syslogなどroot権限でのみ参照可能なログファイルについても、パーミッション変更は不要です。

$ ps -ef | grep [m]ackerel
root     17493     1  0 07:30 pts/0    00:00:04 /usr/local/bin/mackerel-agent --pidfile=/var/run/mackerel-agent.pid --root=/var/lib/mackerel-agent

大括弧”[]”検索

エラーレベルが大括弧で囲われているパターンを指定したい場合は、 大括弧前にバックスラッシュ””を付与します。 付与しないと囲われていない文字列も一致してしまいます。

  • “[error]”を検索したい場合
正:
--pattern '[error]'
誤:
--pattern '[error]'

agentエラーメッセージ

  • 必須オプション不足
# pattern無し
the required flag `-p, --pattern' was not specified
# file無し
LOG UNKNOWN: No log file specified
  • ログファイルが存在しない
LOG UNKNOWN: open /var/log/test.log: no such file or directory
  • 権限不足(手動実行での確認時)
writeByteToSkip failed: mkdir /var/mackerel-cache: permission denied
  • confのKey重複
    — plugin.checks.〜 部分を変えなかった場合にagentが起動失敗となる
failed to load config: Failed to load the config file: while loading included config file /etc/mackerel-agent/conf.d/check-log.conf: Near line 13 (last key parsed 'plugin.checks'): Key 'plugin.checks.test-log' has already been defined.
  • 設定ファイル誤り(parseは通っている)
    — 通知メッセージのステータスが UNKNOWN となる

単一ファイル指定(fileオプション)時のログローテーション時の動作

ログローテーション等でログファイルが上書き・新規作成された場合の挙動を確認します。
エラーログ等で普段はログ出力されず、出力された時に同時にファイル作成・ローテーションが行われるような処理の場合等を想定しています。

出力前サイズ > 出力後サイズ

  • ログローテーション等でファイルが初期化された場合等を想定
    — 正常に動作(通知される)

出力前サイズ = 出力後サイズ

  • ログローテーション等でファイルが初期化された場合等を想定
  • 且つ前後でサイズが同じ場合に誤動作しないか
    通知されない

通知されませんでした。 単一ファイル指定の場合サイズのみで判断となります。 発生する状況はあまり無いと思いますが、出力数が少ないログなどは注意が必要です。

出力前サイズ < 出力後サイズ

  • stacktrace が出力されるログファイル等でローテーション後の出力がローテーション前のサイズより大きくなる場合を想定
    — 出力前サイズ以前の出力部分に関しては通知されない
    — 出力前サイズ以降の出力部分に関しては正常に動作

追記と見做されます。 想定通りの動作ですが、ログ出力とローテーションの方式によって発生する可能性はあります。

オプションで回避

常に追記ではなく上書きされるようなログには no-state 、 ログ出力時にファイル作成されるようなログには file-pattern で回避可能と思います。

元記事はこちら

Mackerel事始め check-plugin ログ監視(動作確認)