2017年9月21日木曜日

Zabbixでログに記載されている数値を抽出して監視する

自宅ではsquid + squidGuardを組み合わせたプロキシサーバを使ってWebフィルタリングの機能を実装している。squidGuardではスクリプトを使ってフィルタリング対象のURL情報を更新しているが、いつ更新がされたかわからいので、更新が発生した際にZabbixにて検知できるようにすることにした。

squidGuardで利用しているURL更新スクリプトは、更新されたURL数をログに出力するので、そのURL数の情報を抽出して、Zabbixにてログ監視を行う。当然、squidGuard以外でも、ログに数値が出されるもの(例えばウイルススキャンの結果など)であれば、同様の方法で監視ができるようになる。

環境

今回の環境は以下の通りとなる。

------------------------------
・Zabbix: 2.2.19
・Squid Cache: Version 3.5.20
・SquidGuard: 1.4 Berkeley DB 5.3.21: (May 11, 2012)
------------------------------

アイテムを作成

まずは、監視対象のホストにアイテムを追加する。監視対象のログは以下のような内容となる。

2017-09-18 14:24:14 [1402] update: added 35 entries, deleted 0 entries

update: added XX entriesのXXの値を取り出して監視をすることにする。今回は以下のように設定した。

------------------------------
・名前:squidGuard
・タイプ:Zabbixエージェント (アクティブ)
・キー:
 log[/var/log/squidGuard/squidGuard.log,"update: added ([0-9]+)",,,skip,\1]
・データ型:ログ ※「数値」でも問題ないと思われる
・更新間隔(秒):30
・ヒストリ保存期間(日):7
・アプリケーション:OS
------------------------------


「保存」ボタンを押して、想定通りアイテムが作成されていることを確認する。


「キー」の設定について、もう少し詳しく説明する。logの構文は以下の通りとなる。

log[/path/to/file/file_name,<regexp>,<encoding>,<maxlines>,<mode>,<output>]

第1引数には監視対象をログのフルパスを指定する。

第2引数<regexp>にはログに含まれる取得対象の文字列を記載する。ここで、数値として取り出したい箇所に「([0-9]+)」を記載する。これは正規表現で「1桁以上の連続する数字」を表している。()で囲んでいる意味は後述する。

第5引数<mode>はall (デフォルト)とskipが選べる。allの場合は、監視対象ログの過去のログも遡って取得する。skipを指定すると、過去のログは取得しない。Zabbixサーバが停止している時間の監視漏れを防止したいのであればallとした方がよいのだが、過去のログが大量にある場合は、多数のログ取得・トリガーの実行が発生してZabbixが高負荷になる恐れがあるので注意する。

第6引数<output>に「\1」を指定する。これは第2引数で()で囲んだ箇所をアイテムの値として抽出するという設定となる。

トリガーを作成

次に、先ほど作成したアイテムに対するトリガーを作成する。

------------------------------
・名前:squidGuard
・条件式:
 {t3023ce72:log[/var/log/squidGuard/squidGuard.log,
  "update: added ([0-9]+)",,,skip,\1].last()}#0
・障害イベントを継続して生成:チェック
・深刻度:軽度の障害
------------------------------


条件式ビルダーで条件式を作成する場合は、以下のように設定する。


これでZabbix側の設定は完了となる。

監視テスト

試しに監視対象ログに文字列を書き込んで監視テストをしてみる。さくっとechoでログに文字列を書き込んでみる。

# echo "2017-09-18 14:24:14 [1402] update: added 35 entries, deleted 0 entries" >> /var/log/squidGuard/squidGuard.log

ログを確認する。下線部の情報がZabbixにアイテムとして取り込まれる想定となる、

# tail /var/log/squidGuard/squidGuard.log
------------------------------
2017-09-18 14:24:14 [1402] update: added 35 entries, deleted 0 entries
------------------------------

Zabbix側で「監視データ」→「最新データ」を表示し、先ほど設定した「squidGuard」のアイテムのヒストリを確認する。

以下の通り、値のみが取得できている。


「監視データ」→「トリガー」を確認すると、こちらも想定通りsquidGuardのトリガーが動作していることが確認できる。


以上で、設定は完了となる。

参考

・Zabbix Documentation 2.2 - 6 ログファイル監視
https://www.zabbix.com/documentation/2.2/jp/manual/config/items/itemtypes/log_items

0 件のコメント:

コメントを投稿

人気の投稿