ログ監視で同じ文字列を含むものが一定期間発生していた場合に通知する方法
OS:CentOS 7
Zabbix:3.0.9
お世話になっております。
cronで一定間隔(10分)でスクリプトを実行して、結果をログファイルに出力しています。
このログファイルの監視を行うのですが、以下のようなことは可能なのでしょうか。
・同じエラーIDの出力が2日以上続いたらメール通知させる
一定期間内に特定文字列をx個以上出力されたら検知する といった設定はcountで可能でしたが、上記のような設定は可能なのでしょうか。
「diff を使って288回前の値と比較して同じだったらメール通知」のようなことを考えたのですが、マニュアルをみると最新値と前回値しか比較できないようなのだったので何か方法がないかと考えております。
fripper - 投稿数: 495
ログ・過去値との相関・計数‥などについて、Zabbix側で
すべてデータ処理させるとなると、設定内容や、条件指定がかなり複雑に
なってしまうかと思います
ログ監視はログ監視で、今のまま置いておいて、
ご所望の監視については、以下のようなアプローチが良いのではないかと思います
★cronスクリプト側で、毎回実行完了時に「今回の出力ログ」を対象に
grep や awk、wc 等のコマンドを活用して、整形・計数する
ユーザ定義の「Zabbixトラッパー」型アイテムを以下のようなキーとして
整数型で定義しておいて、そこへZabbixSenderで送り込む
user.cronjob.idcount[ID001]
user.cronjob.idcount[ID002]
user.cronjob.idcount[ID003]
トリガー側では、
{host:user.cronjob.idcount[ID001].min(2d)} > 0
などのような条件として、直近2日間の計数結果、最小値が1以上‥
すなわち、2日間ずっと1以上だったら‥
だったら、障害として検知‥
計数・送信用のコマンドスクリプト例:
1.grep から ID00x を含む行を抽出し、wcで行数をカウント
カウント結果を、Zabbix監視ホスト名・アイテムキーとともに
作業ファイルへ書き出ししておいて、ZabbixSenderで送信させる
#!/bin/sh
for IDNUM in 001 002 003 004; do
echo -n "HOSTNAME user.cronjob.idcount[ID${IDNUM}] "
grep hogehoge.log "ID${IDNUM}* | wc -l
done > idcount.log
zabbix_sender -z server-host -i idcount.log
副次的なメリットとしては、エラーIDごとの発生回数推移・履歴が
Zabbix側でグラフ化できるようになる‥などでしょうか
kasugai - 投稿数: 72
fripper様
ご回答いただきありがとうございます。
今回のようなものだと、やはりスクリプト側で処理するようにしないと難しいのですね。
頂いた内容のスクリプトで試してみようと思います。