複数テキストログの監視を特定時間で実施し、メール通知する方法
いつも参考にさせて頂いています。
表題の件について、下記を実現したいと思っています。
Zabbixは2.4です。
①夜中に複数バッチが走り、朝までに複数のテキストログが出力される。
②①のログは同時刻に生成される場合もある。
③AM6:00にテキストログをチェックし、Errorの文字列が存在する場合にメール通知する。
Zabbixの設定として、トリガーにはテキストログ2という名前で以下のように設定しています。
({HOST:logrt["C:\temp\.*.log$",Error].logsource(Error)}=0)and({HOST:logrt["C:\temp\.*.log$",Error].nodata(30)}=0)
メール通知は以下のように設定しています。
アクションの実行条件 ⇒ トリガー = HOST: テキストログ監視2
アクションの実行内容 ⇒ ユーザーにメッセージを送信: mail (mail) via Email すぐに 標準
③のように特定時間にそれまで溜まっているテキストログを一気にチェック(同時刻に生成されたログも含む)し、
Errorの文字列が存在する場合にメール通知する、ことは可能でしょうか。
TNK - 投稿数: 4740
logrt[]で値を正しく取得できるのは、1つのログファイルがlogrotate
などでローテーションされている場合のみです。
複数実行されるジョブごとに別のログファイルが出力されるのであれば、
そのファイルごとにlogrt[]などを使用したアイテムを作成してください。
NZ299 - 投稿数: 6
返信有り難う御座います。
まず、logrtを使用している理由は、~.logの名前のログを全検出できるよう正規表現での記載が必要であるためです。
そして、記載した下記のトリガーでは、
{HOST:logrt["C:\temp\.*.log$",Error].logsource(Error)}=0
tempフォルダ配下にa.log、b.logがそれぞれ生成され、且つErrorの文字列がある場合はトリガーは発動し、メール通知されます。
ですので、ファイル毎にlogrtを作成する必要はないかと思うのですが、必要でしょうか?
TNK - 投稿数: 4740
a.logやb.logに別のバッチからログが出力されるのであれば必要
です。
これまで問題となっていないのであれば、バッチ処理時にログファ
イルが新規に作成されていて、結果の1行しか出力されないなどの
条件で、たまたま問題となっていないだけです。
各ログファイルに追記される形でログが出力されていたら、過去の
ログの行を再読み込みしてしまうなどの問題が発生する可能性が考
えられますのでご注意ください。
あと、logsource()は、Windowsのイベントログで使用するものです。
テキストログの監視に使用しても書かれているような書き方では、
適切ではありません。
もう1つ、2.4系は、特定の時刻にチェックすることができませんの
で、別途、何らかの仕組みを作成することが必要となるでしょう。
例えば、ログファイルをチェックして障害があったかどうかをファ
イルに出力しておいて、cronなどで朝6時にそのファイルをチェック
して、zabbix_senderなどでZabbixサーバに通知するような感じです。
fripper - 投稿数: 495
TNKさんの書かれているとおり、logrt のアイテムキーは、あくまで1つのログファイルが
ログローテート等で別名になりつつローテートされ、最新のものへ追記される
という前提で実装されています
ですので、残念ながら、同一ディレクトリ配下で、ワイルドカードに合致するからといって、
それら全てをまとめて監視収集できるようなものではありません
さらに、NZ299 さんの仰るような、6時になったらアイテム監視実行
というような定期ジョブ的な時間制御は、Zabbix2.4.x ではサポートされていませんので
この点でも、NZ299さんの想定と異なる動作が発生してしまう可能性があります
異なるアプローチとして、提案です
午前6時に、タスクスケジューラ等で、該当ディレクトリ配下の *.log を全て grep のようなプログラムで
舐めたうえで、"Error" という文字列の含まれる行だけを、"C:¥temp¥errors_summary.txt" 等のファイルに吐くようにしておいて
そのファイルを、log アイテムで監視するようにするのはいかがでしょうか?
対象ホスト側にスクリプトを仕込んだうえで、タスクスケジューラにも設定を入れる必要は
ありますが、お望みの動作となるかと思います
NZ299 - 投稿数: 6
皆さま、ご返信有り難う御座います。
今回はログの追記はなく、吐かれるエラーログも1行であるため、とりあえずこの設定で試験してみます。
logsourceが不適切である点は、別のを探して修正します。
特定時間に監視を実行する件は、頂いた提案のようにログの出力を1ログにまとめて、且つ特定時間にログ出力されるように
スクリプトを修正することにしました。