経緯

Mackerel のチェック監視に prevent_alert_auto_close オプションが追加されました。

自動復旧しないアラート ということで、ログ監視に利用できるかと考えたのですが、思っていた内容とは少し異なる動きでした。

やりたかったこと

  • check-log でのアラート発生時の後に通知される 復旧通知(OK)を無くしたい

ログの監視なのでアラート通知されればよく、復旧通知は不要と思っています。

実際

test_1.log を prevent_alert_auto_close = true として、2つのログファイルに同一タイミングで同一メッセージを出力して確認します。

[plugin.checks.test_1_log]
command = '''
  check-log \
    --file /var/log/test_1.log \
    --pattern 'ERROR' \
    --warning-over 0 \
    --critical-over 0 \
    --return
'''
prevent_alert_auto_close = true

[plugin.checks.test_2_log]
command = '''
  check-log \
    --file /var/log/test_2.log \
    --pattern 'ERROR' \
    --warning-over 0 \
    --critical-over 0 \
    --return
'''

アラート1回目

test_1 は復旧通知が無いため、要望を満たせたように見えます。

  • test_1 (Auto Close 無し)

  • test_2 (Auto Close)

  • 通知結果

アラート2回目

test_1 はアラートが発生しません。

  • 通知結果

アラート3回目

test_1 を手動で復旧してから、再度ログ出力を行います。

  • 通知結果

結論

アラートの復旧を行った状態でないと、次回以降のチェック時にアラート状態であっても通知は行われません。

チェック監視のアラート通知
アラートが発生した場合と、アラート発生後にアラートの状態が変更した場合にアラートの通知が行われます。「アラートの状態が変更した場合」には以下の2つの場合があります。

ステータスが変更になった場合

ex. CRITICAL -> WARNING, WARNING -> CRITICAL, CRITICAL -> OK

ステータスがOKになった場合も含みます

チェックプラグインが送信してくるメッセージの内容が変わった場合

ということで、 prevent_alert_auto_closeオプション はログ監視(特にエラー時にのみ出力されるログ)には向かないようです。
復旧通知の無効化や、某abbixの 障害イベントを継続して生成 のような機能の実装を待ちます。

元記事はこちら

Mackerel 自動復旧させないアラートは手動復旧しないとその後のアラートが通知されないことがあるので気を付ける