STERFIELD

Zabbix でアプリケーションログの監視

Zabbix でアプリケーションログの監視

はじめに

何度か記事を書いてきたZabbix。
今回はWebアプリケーションのログを監視し、
特定キーワードが検出されたら通知する・・・といった内容です。何度かチャレンジして躓いた箇所も備忘録として記載してます。

導入

ひな形となる「テンプレート」を作成

上部のメニュー「設定」「テンプレート」を選択。
次に右上の「グループ」から所属させたいテンプレートグループを任意に選択します。
そして「テンプレートの作成」。
スクリーンショット 2017-04-11 16.41.49
スクリーンショット 2017-04-11 16.41.56
ユニークなテンプレート名と表示名を入力するだけです。

関連するアプリケーションの登録

テンプレート一覧に戻り、「アプリケーション」リンクを押下。
スクリーンショット 2017-04-11 16.57.11

遷移した先で「アプリケーションの作成」ボタンを押下。
更に遷移した先で適当なアプリケーションの名称を入力して「追加」。
スクリーンショット 2017-04-11 16.42.32

アイテムの登録

障害イベント(トリガ)を発生させるためのキー情報となる「アイテム」を作ります。
具体的に「ログを監視する」と言った処理内容を定義します。

一つ前で作成したアプリケーションが作成直後に一覧表示されているので、
右側の「アイテム」のリンクを押下、遷移先の「アイテムの作成」ボタンを押下。
スクリーンショット 2017-04-11 17.03.00

タイプ : Zabbixエージェント (アクティブ)
キー : log[/var/www/html/ProjectName/app/logs/prod.log,@messages]
データ型 : ログ
ログの時間の形式 : [yyyy-MM-dd hh:mm:ss]
アプリケーション : 前述で作成したものを選択

このように設定します。
間違えやすいのが「タイプ」で、「Zabbixエージェント」というものもありますが
「Zabbixエージェント (アクティブ)」を必ず選択すること。

そして一番大事な設定が「キー」
“log”の後の大かっこで括ったものが”log”というZabbix側で用意された命令に対する処理内容です。

/var/〜/prod.log がログ保存されるパス。
@messages は正規表現として共通変数に登録したものです。設定は以下のようにして共通化しておきます。
※ 以下の例では “CRITICAL”,”ERROR”,”FATAL”,”WARNING” のいずれかがヒットした時に “条件一致した” とみなします。
スクリーンショット 2017-04-11 17.07.19

トリガの登録

前述で作成したテンプレートが選択された状態で
上部メニューの「トリガ」を選択し、「トリガの作成」を押下。

設定例は以下。
「条件式」が最も重要です。
これが間違っていたら通知は発生しません。あるいは不要な通知を発生させてしまいます。
スクリーンショット 2017-04-11 17.13.49

一行目は「5分間に”CRITICAL”という文字列がキー情報にあったら通知発生」と言う意味。
2行目は論理和。つまり3行目に来る条件と1行目の条件が両方とも成立する時のみ通知発生という意味。
3行目は「1分間に受信したキー情報である」と言う意味。
3行目が無いと溜まっていくログの中の”CRITICAL”を常に検出して通知が来てしまいます。

countなどのZabbixが用意している処理命令の前の部分は
「アイテム」で登録されたものと同等である必要があります。
それに気づかずあれこれカスタマイズして登録失敗したのがあとで悔やまれました。

監視対象サーバーに関連付ける

ここまで作成したテンプレートの編集画面で
「グループ」あるいは「ホスト」を所属(使用中)にさせれば完了です。

躓いたところ

今更ですが、各監視対象のサーバー設定で「Hostname」という項目を初期値から変更してませんでした。。
ログ監視にはここを適切に設定する必要があります。「ホスト」の登録時にユニークに設定する「ホスト名」と同じ文字列を
/etc/zabbix/zabbix_agend.conf
135行目付近の
Hostname=
に設定し、エージェントを再起動すれば解決しました。

その他の動作は問題なかったのでなかなかたどり着かず時間をロスしてしまいました。orz…

Author Profile

著者近影

スターフィールド編集部

SHARE

合わせて読みたい