ログ監視での多重検知について

ログ監視を以下で実現しようとしています。

【Zabbixバージョン】
Zabbix 3.0.24.

【環境】
AWSのサービス

【対象】
AWSのデータベースサービスで PostgreSQLのログをダウンロードしたファイル

【背景】
AWSではサーバでのデータベースの利用ではなく、マネージドでのデータベースサービスを利用しています。
これはつまりZabbix_agent を導入することができません。
このため、AWS内にWindowsサーバを1台用意して、そこにデータベースサービスからログを定期的にダウンロードして、
Zabbix_agentを導入してログ監視するようにしています。

ダウンロード前のデータベースサービス上では1時間ごとにファイルはローテーションされます。

【監視内容】
■アイテム
タイプ: Zabbixエージェント(アクティブ)
キー: log[D:\logs\postgresql.log,@ERR2,Shift-JIS,,skip]
データ型::ログ
更新間隔(秒):1

■トリガー
{ope01:log[D:\logs\postgresql.log,@ERR2,Shift-JIS,,skip].count(300)}<11
and
{ope01:log[D:\logs\postgresql.log,@ERR2,Shift-JIS,,skip].nodata(300)}=0

【問題】
Zabbix_agentを入れたサーバに、データベースのサービスからファイルのダウンロードが5分に一度実施され、都度上書きされます。
・1回目のエラーログ出力で「A」というエラーがあり、ダウンロード後Zabbixの監視で検知されます。
・その5分後のエラーログ出力で「B」というエラーが追加されていた場合、ダウンロード後Zabbixの監視で「A」、「B」が検知されます。
・さらにその5分後エラーログ出力で「C」というエラーが追加されていた場合、ダウンロード後zabbixの監視で「A」、「B」、「C」が検知されます。

ダウンロード元のファイルは1時間ごとのローテーションなので、1時間は常に同じファイルがダウンロードされます。
つまり、5分ごとにダウンロードされるので、5分ごとに最初からすべてのエラーを監視して通知してまう、多重検知が起きています。

この多重検知を回避する方法はないでしょうか?

コメント表示オプション

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

異なるログと判定されているようなので、logrtを使用してみてはどうでしょうか。
※その際は、postgresql.logを「^postgresql.log$」と表記

また、障害イベント生成モードを「複数」にしていると、nodataを使っていても件数分トリガーが動きますが
設定はどうなっていますでしょうか。

ユーザー 四羽 の写真

Yasumi 様
ご回答ありがとうございます。

logrtも以下のアイテムキー設定で使用してみましたが、多重検知は発生してしまいました。

logrt["D:\logs\postgresql.log$",@AURORA_LOG_ERR2,Shift-JIS]

障害イベント生成モードは現在のバージョンだと、「障害イベントを継続して生成」にチェックをつけるか否かの設定しかありません。

ダウンロードされて、上書きされていくファイルの監視だと、多重検知は避けられないのでしょうか?

ユーザー Yasumi の写真

なるほど。
多重検知というのは、アイテムに取得される情報も
ダウンロードごとに重複しているということですか?

ユーザー 四羽 の写真

Yasumi様

アイテムで取得する情報は以下です。
D:\logs\postgresql.log,@ERR2,Shift-JIS,,skip

もっとシンプルにお伝えすると、
このpostgresql.logがデータベースサービス上にあり、Zabbix_agentを入れたサーバで5分に1回同じ名前でダウンロードします。つまり上書きされてダウンロードになります。

例えば、

1.データベースサービス上で、エラーが発生し、postgresql.logに「error1」が出力される。
2.zabbix_agentがあるサーバで5分後にダウンロードされ、「error1」を検知
3.さらに5分後にもダウンロードされ、「error1」を検知
4.さらに5分後にもダウンロードされ、「error1」を検知
         ・
         ・
         ・

このようにpostgresql.logがデータベースサービス上で別のファイルに1時間に1回書き換わるまで、zabbix_agentを入れたサーバでは同じファイルを上書きでダウンロードし続けるので、
この動作が続いてしまします。

つまり同じアラートを5分ごとに検知している状態です。

ユーザー Yasumi の写真

アイテムのlog[D:\logs\postgresql.log,@ERR2,Shift-JIS,,skip]に
同じログを重複して取得しているか、という意味です。
Zabbixからヒストリの内容を見てみてください。

重複して取得していると下記のようになっています。
=====================================
タイムスタンプ      ローカル時間       値
2019/05/24 14:12:30  2019/05/24 14:02:30  2019/05/24 14:02:30 error1
2019/05/24 14:07:30  2019/05/24 14:02:30  2019/05/24 14:02:30 error1
2019/05/24 14:02:30  2019/05/24 14:02:30  2019/05/24 14:02:30 error1
=====================================

重複している場合は、skipを使っていても回避できていないので、
上書きされると回避が難しいのかもしれません。
重複していない場合は、トリガーに問題があると思われます。

ユーザー 四羽 の写真

Yasumi様

こちらの伝え方が悪くて申し訳ありません、質問に理解ができました。

ログ上では重複していないようです。
そうなるとトリガーに問題あるかもしれないということですね。

以下を試してみました

■トリガーパターン1
{ope01:log[D:\logs\postgresql.log,@ERR2,Shift-JIS,,skip].count(300)}<11
and
{ope01:log[D:\logs\postgresql.log,@ERR2,Shift-JIS,,skip].nodata(300)}=0

 障害イベントを継続して生成:チェックあり

■トリガーパターン2
{ope01:log[D:\logs\postgresql.log,@ERR2,Shift-JIS,,skip].count(300)}<11
and
{ope01:log[D:\logs\postgresql.log,@ERR2,Shift-JIS,,skip].nodata(30)}=0

 障害イベントを継続して生成:チェックあり

■トリガーパターン3
{ope01:log[D:\logs\postgresql.log,@ERR2,Shift-JIS,,skip].count(300)}<11
and
{ope01:log[D:\logs\postgresql.log,@ERR2,Shift-JIS,,skip].nodata(300)}=0

 障害イベントを継続して生成:チェックなし

■トリガーパターン4
{ope01:log[D:\logs\postgresql.log,@ERR2,Shift-JIS,,skip].count(300)}<11
and
{ope01:log[D:\logs\postgresql.log,@ERR2,Shift-JIS,,skip].nodata(30)}=0

 障害イベントを継続して生成:チェックなし

しかしいずれも多重検知してしまう状況です。
監視対象のファイルにログが追記されるのであれば、上記のようなトリガーで多重検知を防げますが、
ダウンロードしたり、ファイルが新規で同じ名前で入れ替わったりした場合、実装ができない仕様でしょうか?

ユーザー 四羽 の写真

すみません、どなたかわかれば教えてください。

監視対象のファイルにログが追記されるのであればトリガーでコントロールして、追記されたログが検知させることができますが、
監視対象のファイルがダウンロードされて上書きされると、トリガーでコントロールできない仕様なのでしょうか?

上書きされるとファイルのメタデータも変わってしまい、途中からログを検知させる感じにならない仕様でしょうか?

ユーザー TNK の写真

これまで書かれていた内容から推測すると、ログを新たにダウンロ
ードして上書きした際に、別の新しいログファイルと認識されてい
るようです。

これは、トリガーでコントロールはできません。
トリガー以前のアイテムの値を取得する時点で重複して取得してし
まっているので、トリガーはその取得したものを判断しているだけ
だと思われます。

追記されたログファイルをZabbixで監視しているログファイルにそ
のまま上書きするのではなく、差分で追加されたログのみをZabbix
で監視しているログに追記するような処理を行う必要があるでしょ
う。

もしくは、AWSのデータベースサービスとのことですので、RDSを利
用されているのでしょうか?
そうであるならば、CloudWatchなどを活用しての監視を検討されて
はいかがでしょうか?

ご参考:
Amazon RDS が Amazon CloudWatch Logs への PostgreSQL ログファイルの発行をサポート
https://aws.amazon.com/jp/about-aws/whats-new/2018/12/amazon-rds-support...
CloudWatch Logs への PostgreSQL ログの発行
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_LogAcc...

ユーザー 四羽 の写真

TNK様

ご回答ありがとうございます。
ダウンロードで上書きしたファイルはログ監視の対象として、トリガーでコントロールできないことが仕様であることが理解できました。
有難うございました。

AWSの参考URLも拝見しましたが、今回RDS PostgreSQL ではなく、RDS Aurora PostgreSQL になります。
このため現在AWS側ではいただいたURLがRDS Aurora PostgreSQLには対応していないようです。

しばらくは多重検知でしのぐかどうか別途検討します。
いったん仕様であることが分かったので、本件で質問したかったことはクリアになりました。

有難うございました。