障害通知メールを1度にまとめて送付する方法について

いつもお世話になっております。

標題につきましてログ監視を例に実現可能かお問い合わせさせていただければと思います。

現在、centOS 6.6、5.9でzabbix server 2.4.8 (agent 2.4.8)を動かしており、
別監視システムと並行稼動の検証を行っております。

こちら側のログ監視の設定例は下記となります。

ログアイテム
監視名称:messages監視
キー logrt["/var/log/messages"]

トリガー
トリガー名 messages監視アラート
{host.a:logrt["/var/log/messages"].regexp("@messages_検知キーワード(host.a)")}<>1
※イベントを継続して生成にチェック

正規表現で
messages_検知キーワード(host.a)を作成し
文字列に
ERROR  結果が偽
ALERT   結果が偽
WARNING 結果が偽
※大文字小文字を区別するに全てチェックマーク
を設定しており、上記キーワードがマッチした場合にパトランプ鳴動とメールでエラーを通知するようにアクションを
設定しています。

host.aのmessagesにERRORという文字列が出力されるたびにパトランプが鳴動およびメールも通知されるため運用側から障害を検知する度にメールを送信するのではなく、まとめて送信する方法はないかとの
要望があがっております。

解決策として当フォーラムを参考させていただき、nodata関数を使って1通メールを通知すればセットした
時間内はメールを通知しないという方法も考えましたが、1つの文字列(ERRORというキーワードのみ)であればこの方法は有効かと思いますが、上記の通り検知したいキーワードが複数あるため、メールが通知されていない間は運用側で
その他のエラーがないかサーバのログを確認しなければならないのではという指摘を受けました(運用の制約上サーバにログインしてログを確認する方法は難しいとのことです)。

上記運用を回避するためにはフォーラムで書かれている通り
http://www.zabbix.jp/node/3649
それぞれ、検知したいキーワードを分けてその数だけトリガーを作成する(今回の場合ですと、それぞれERROR、ALERT、WARNINGだけ検知したいトリガーを3つ作成)方法がやはり要求を満たす方法となりますでしょうか?
あるサーバでは20個程の検知したいキーワードがある場合は20個のトリガーを作成する必要があるということに
なりますでしょうか。

別監視システムが検知内容をまとめて1通のメールで通知してくれるという仕様になっており、そもそも同じことをzabbixで
実現しようというのは難しいのは重々理解しておりますが、
上で書かせていただいた方法以外に別の方法があるのかどうか、有識者の方々のお知恵を拝借させていただきたく、
問い合わせさせていただきました。

よろしくお願い致します。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー heya の写真

他の方法もあるのかもしれませんが、そういうちょっと特殊なことをしたいなら、私ならアクションで自作スクリプトを使います。

例えばこんな感じ。
・スクリプト以外に、二つのファイルを使います。
  一時的にログを貯めるファイル templog
  最後にメールを送信した時刻を記録するファイル timefile
・前もって timefile を作っておきます(空ファイルでいい)。
・スクリプトの内容。
  (1) ログの内容を引数で受け取り、それを templog に追記する。
  (2) 最後にメール送信してから60秒以上経過している(※1)、
    または、templog の行数が10行になった、であれば
    templog の中身をメールで送信し、templog を空にし、touch timefile(※2)を実行する。

※1 timefile の mtime と現在時刻との差を調べます。
※2 touch は、ファイルの時刻を更新する(ファイルが無ければ空ファイルを作る)コマンドです。

「touch timefile & timefile の mtime を読む」ではなく「最後にメールを送信した時刻を timefile に書く & timefile を読む」でもいいと思います。