ログ初回出力時の正常検知回避方法について

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

ログファイルの監視にておいて以下事象が発生しております。
本事象の解決方法ありましたら、ご教示のほどよろしくお願いいたします。

【バージョン】
◆zabbix_server:2.2.2
◆zabbix_agent :2.2.2

【設定(アイテム・トリガー)】
◆タイプ:Zabbixエージェント(アクティブ)
◆データ型:ログ
◆更新間隔:300秒
◆障害イベントを継続して発生:チェックなし
◆トリガー:{ホスト名:system.run[(tail -1 /var/log/xxx/xxx.log.`date +'%Y%m%d%H' -d1hour+ago` 2>/dev/null ; tail -1 /var/log/xxx/xxx.log.`date +'%Y%m%d%H'` 2>/dev/null) | tail -1].change()}=1

【環境】
◆監視対象ファイルは、ログ出力時に末尾に`date +'%Y%m%d%H'が付いた形で新規作成されます。(例:xxx.log.2017061615)
※ログ出力がない限り、ログファイルは作成されません。
 (ログ出力の頻度は高くないため、ログファイルは毎時作成されるわけではありません。)
◆過去ログファイルは、新規作成から約2時間後に圧縮されます。
◆対象ログファイルは出力時、同時に数十件のログが出力されるため、
 アラート抑止のため「log」や「logrt」ではなく、上記条件式にて監視を行っています。

【事象】
◆ログ初回出力時、ステータス[正常]で検知されてしまいます。
◆初回以降の出力では、想定どおりステータス[障害]で検知できています。

【ご相談事項】
◆初回出力時からステータス[障害]で検知できる方法はありますでしょうか。
※構築時にテストログを出力させることで本事象は回避可能なのですが、
対象ログファイルが膨大なためテストログ出力以外の解決方法をご教示いただけますと幸いです。

以上、よろしくお願いいたします。

コメント表示オプション

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

ログファイルの行数もアイテムで取得するようにして、ログファイ
ルの行数の変化も条件式に加えてみてはいかがでしょうか?

ファイル名に年月日時が入るようなので、tailコマンドを実行され
ているのと同様に、コマンドをsystem.run[]で実行するか、
UserParameterで取得することになると思います。

そこで、例えば、ファイルが存在しない時には、0を取得できるよ
うにしておけば、

 1つ前が0で最新の値が正であった場合

という条件を追加することで、最初のログ出力であることを検知で
きるのではないでしょうか。

ユーザー logtarou の写真

TNK様
お世話になっております。

ご回答いただきありがとうございます。
設定内容は以下ということで認識あっておりますでしょうか。

■新アイテム
system.run[cat /var/log/xxx/xxx.log.`date +'%Y%m%d%H'` 2>/dev/null | wc -l]

■修正後トリガー
{ホスト名:system.run[cat /var/log/xxx/xxx.log.`date +'%Y%m%d%H'` 2>/dev/null | wc -l].last()}#0 =1

ユーザー TNK の写真

条件式を記載頂いたようですが、一部の文字列がHTMLの一部として
解釈されてしまっているのか正しく表示されていません。

また、実際にどのようなタイミングでどうログに出力されるのかが
よく理解できていないので、検証環境を用意して頂いて、検知した
いことが実現できるか、ご自身で実際に試して頂くのがよいのでは
ないでしょうか。

ユーザー logtarou の写真

上記条件式で初回検知時からステータス障害で検知できました。
ご教示いただきありがとうございました。