Zabbix 2.2 を使ってテキストログの監視を行い、指定したキーワード(エラーと判断する文字列)が記録された場合に検知できるようにする手順を記載しています。
テキストログの監視には、Zabbixエージェント(アクティブ)を使います。Zabbixエージェント(アクティブ)は、zabbix_agentd で利用する事になります(xinetd を利用する zabbix_agent では利用できません)。Zabbixエージェントが「アクティブ」に自分自身でログを監視し、結果をZabbixサーバに通知します。
Zabbixバージョン
今回利用したZabbixのバージョンは以下になります。
Zabbixサーバ:2.2.2
Zabbixエージェント:2.2.7
なお、Zabbixエージェントはrpm(yum)でインストールしています。
Zabbix設定ファイル
Zabbixエージェント(アクティブ)側である /etc/zabbix/zabbix_agentd.conf では以下が関連項目です。
ServerActive=(Zabbix Server アドレス) RefreshActiveChecks=120 (Zabbix Server からアクティブチェックの項目リストを取得する間隔) AllowRoot=1 (OSのZabbixアカウントに権限がないログを監視する場合、rootアカウントで監視)
設定変更後に、Zabbixエージェントを再起動します。
zabbix_agentのログは、/var/log/zabbix/zabbix_agentd.log です。
以下のようなログが記録されます。
2563:20141128:153602.773 Zabbix Agent stopped. Zabbix 2.2.7 (revision 50148). 2664:20141128:153602.903 Starting Zabbix Agent [dev]. Zabbix 2.2.7 (revision 50148). 2664:20141128:153602.903 using configuration file: /etc/zabbix/zabbix_agentd.conf 2668:20141128:153602.905 agent #3 started [listener #3] 2666:20141128:153602.906 agent #1 started [listener #1] 2667:20141128:153602.906 agent #2 started [listener #2] 2669:20141128:153602.906 agent #4 started [active checks #1] 2665:20141128:153602.907 agent #0 started [collector]
監視対象ファイル
今回は、/var/log/messages ファイルを監視し、「error」という文字列が出力されたらメール通知する事とします。
なお、監視対象のテキストログファイルは、デフォルトでは、Zabbixエージェントの稼働ユーザである「zabbix」アカウントが少なくとも参照権限を持っている必要があります。
今回の「/var/log/messages」のように、root アカウントに対する権限しかないログを監視する必要がある場合は、上記で例示設定したとおり、zabbix_agentd.conf で「AllowRoot」設定を行います。
上記で例示設定しているとおり「AllowRoot=1」を設定すると、Zabbixエージェントはrootで稼働します。その為、/var/log/messages も監視できるようになります。
テンプレートについて
以降の手順では、アイテムとトリガーを個別で作成します。
ちなみに、サーバが複数台あり、監視するテキストログも同様の場合は、テンプレートから作成すると楽だと思います。(テンプレートにアイテムとトリガーを定義する形)
アイテム設定
ローテーションしないファイルの場合、アイテムを設定する際の最もシンプルな設定は以下になります。
- タイプ:Zabbixエージェント(アクティブ)
- キー:log[ログファイルの絶対パス]
- データ型:ログ
「キー」は、いくつかの設定が可能ですが、/var/log/messages をシンプルに監視したい場合は、log[/var/log/messages] になります。
何かしらの理由でうまくいかない場合は、キー項目にはオプションがいくつかありますので、「選択」ボタンを押下し、キー設定フォーマットを確認し、試してみると良いと思います。
トリガー設定
トリガー作成画面で、トリガー名を適当な名称で設定します。
条件式の箇所で「追加」ボタンをクリックし、まずトリガーを適用する「アイテム」を選択します。
関数の選択は、下記のように設定すると「error」文字列を正規表現にて監視できます。
設定される条件式は下記のようになります。
{(ホスト名):log[/var/log/messages].iregexp(error)}#0
正規表現にしておくと全てが小文字の「error」文字列でも、一部が大文字の「Error」文字列でも監視できるようになります。
- 「障害イベントを継続して生成」にチェックを入れておきます。
- 「深刻度」は、この後のアクション設定で定義するものを選択しておきます(例:軽度の障害など)。
アクション設定
アクション設定では、アクションの実行条件にて、他のアクション設定とのバランスを考慮しながら設定します。
テキストログを監視する際のポイントとしては、「リカバリメッセージ」のチェックはしない事です。「リカバリメッセージ」のチェックをしてしまうと、トリガーで設定した「error」文字列を検知して通知がされた後に、問題のないログが記録された際に、リカバリメッセージとして通知されてしまいます。このリカバリメッセージは本来は不要なものになると思います。