こんにちは。SCSKの坂木です。
今回はZabbixのcount関数を使った複雑な条件のログ監視を行う方法をご紹介します。
ログ監視は、例えば「”ERROR”という文字列が含まれる」「イベントIDが”777″」などシンプルな条件なら簡単に作成できますよね。
しかし、5分間で5回”ERROR”という文字列が含まれるといった条件はパッと作成できますか?
さらには、5分間で連続で5回”ERROR”という文字列が含まれるといったように、「連続で」という条件がつくとさらに頭を悩ませるのではないでしょうか。
そこで今回は、このような条件式を作成できるcount関数を用いたログ監視について紹介していきます。
ログ監視
Linuxのログは、以下のアイテムキーで取得できます。
アイテムキー:log[監視するファイル名]
以下は、ログ監視のアイテム設定画像です。今回の場合、監視対象ファイルは/var/log/zabbix/testlogです。
複雑なログ監視のやり方
countを用いた監視方法①
監視対象ファイルにおいて、評価期間のうちに〇回以上”検知文字列”が含まれるというトリガー条件式は以下の通りです。ちなみに、”検知文字列”ではグローバル正規表現は利用できないため、条件式に直接検知文字列を記載する必要があります。
障害の条件式:count([/ホスト名/アイテムキー],評価期間, ,”検知文字列”)>=〇
では、/var/log/zabbix/testlogにおいて、5分間のうちに5回以上”ERROR”の文字列が含まれるといった条件式を考えてみます。
上記の式に当てはめて、作成してみましょう。
実際に/var/log/zabbix/testlogにログを書き込んでみます。
5分間のうちに、ERRORが5つ書き込まれているため、障害として検知しました。
countを用いた監視方法②
続いて、/var/log/zabbix/testlogにおいて、5分間のうちに連続で5回以上”ERROR”の文字列が含まれるといった条件式を考えてみます。
まず、この連続5回以上という条件式は以下の通りです。
障害の条件式:count([/ホスト名/アイテムキー],#5, ,”文字列”)>=5
評価期間を、<数字> → #<数字>とすることで、時間 → 回数へ変更できます。
先ほどの条件を組み合わせると、こちらのようにトリガーを設定できます。andを使った条件式について詳しく知りたい方はこちら。
実際に/var/log/zabbix/testlogにログを書き込んでみます。5分以内に連続せず5回以上”ERROR”を書き込むパターンと、5分以内に連続して5回以上”ERROR”を書き込むパターンを検証します。
5分以内に連続せず5回以上”ERROR”を書き込むパターン
5分以内に、”ERROR”を6個ファイルに書き込んでみました。結果、5回連続という条件は満たしていないため、障害として検知しませんでした。
5分以内に連続して5回以上”ERROR”を書き込むパターン
5分以内に、”ERROR”を連続して5個ファイルに書き込みました。結果、両方の条件を満たしているため障害として検知しました。
まとめ
本ブログでは、Zabbixのcount関数を使った複雑な条件のログ監視について紹介しました。
countを用いることで、ログ監視において特定の文字列を複数回検知したときに障害として検知できることを紹介しました。
この記事を参考にぜひ試してみてください!
Zabbixで複雑なログ監視を実装する方法シリーズファンの方へ
以下のブログでは、and/orを使った複合条件や除外条件について詳しく説明しています。
