check-plugin を使ってログ監視の色々を確認してみました。
初回登録時
対象ログファイルの先頭から読まれます。
大量通知を避けるため、一度コマンド実行でステートファイル作成後に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 で回避可能と思います。