ログ監視で過去のログを検知してしまう
お世話になっております。
サーバ:v4.0
エージェント:v4.0.44
OS:RHEL8.6
上記、構成で logrt にてログ監視を行っております。
以下のような条件式を使用しております。
条件式:logrt[/work/log/Error.*.log,@REGEXP01,,,skip].regexp(..*)}<>0
対象ログのローテーションは「Error.logYYYYMMDD.bak」の形式に cp -p コマンドでコピーする方式です。
なおコピー後 null クリアはせず、同内容のログを保持したまま追記されることになります。
ローテーション後のファイル名は条件式に当てはまらないため、監視対象とならない認識なのですが、
ローテーションしたタイミングでファイルを頭から読み直しているようで、過去のログが検知されております。
copytruncate を使用することも検討しておりますが、まず検知されているロジックを究明したく
皆様のお知恵を拝借できれば幸いです。
以上、よろしくお願いいたします。
TNK - 投稿数: 4737
logrt[]の引数で指定している「/work/log/Error.*.log」というの
が、「Error.logYYYYMMDD.bak」に合致してしまっているのだと思
います。
正規表現(PCRE)では、「.」は任意の1文字であってピリオドではあ
りませんし、「*」は0回以上の繰り返しです。
例えば、「Error.YYYYMMDD.bak」であれば、一致しないのでbakフ
ァイルを読み込んでしまうことは防げると思います。
可能なのであれば、別のディレクトリにbakファイルを作成するよ
うにした方が確実だと思います。
あと、Zabbixサーバーもバージョンによってはより改善されている
場合があるので、4.0ではなくより詳細なバージョンを確認してお
いた方が良いかもしれません。
shr_07456 - 投稿数: 3
お返事ありがとうございます。
検証したところ、xxx.log も xxx.log.bak も検知する動きとなったためご指摘の通り合致しているものと考えられます。
しかし、末尾「log」のため正規表現上は合致しない認識なのですが、logrt でのファイル名指定は部分一致なのでしょうか。
TNK - 投稿数: 4737
明示的に指定しない限り前方一致なので、.log以降の文字列は無視
して比較され、合致するかが判断されます。
明示的に.logで終わるファイル名にしたいのであれば、正規表現の
最後に正規表現の最後であることを示す「$」をつければ.logで終
わるファイル名のものだけに制限できたと思います。
shr_07456 - 投稿数: 3
返信ありがとうございます。
※概ねご説明いただいた通りの動作でしたが、「fooError.A.log」等でも検知したため v4.0 では部分一致になるようです。
おかげ様で問題が解決いたしました。ご助言ありがとうございました。