ユーザーパラメータの引数をトリガーのエラーワードに設定したい.

トリガー設定についての質問です.

環境はcentos 5.6, zabbix verはserver/agentともに2.4です.

Apacheのエラーログを監視する際に, 以下の様なユーザーパラメータを考えています.
<エージェント>
UserParameter=error_log_check[*], cat $1

<サーバー>
(アイテムで) error_log_check[エラーログのパス, down]

これで第一引数にエラーログの場所を設定し,
第二引数のdownをエラーログ内で検知したら警告するトリガーを設定したいのですが, 可能でしょうか.

以上, よろしくお願いします.

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー fripper の写真

実際に実行してみて、「このようなエラーが出て上手くいかない」などについては
「このようにしてみてはいかがでしょうか?」といったアドバイスや
「いや、こうしたほうが良いんじゃないですか?」という形で意見が得られるかと思いますが‥

実際設定されてみたのでしょうか‥?

>エージェント側について
この設定では、アイテムのデータ取得のたびに、指定されたファイル全体が cat されるような動作に
なってしまうと思います
通常のアイテム(zabbixエージェント・zabbixエージェント(アクティブ))としてアイテム登録した場合には
・指定ログファイルが存在しない場合や、空ファイルの場合には、ZBX_NOTSUPPORTED扱い
・ログファイル内容が1行のみの場合、当該1行がアイテム取得結果として、チェック・収集動作のたびに
 毎回サーバへ送信される
・ログファイル内容が2行以上となった場合、複数行の出力には確か対応していなかったと思います。ZBX_NOTSUPPORTED扱い

Zabbix には、ログ監視用のアイテムキーが、もともと存在しています
>log[xxx] や logrt[xxx] 等
これらを使うことで、「増えたログ部分だけを」毎回サーバへ通知することができますし、
ログアイテム自身のパラメータ指定によって、「[down] 等、任意のキーワードを含む行のみ」といった
指定も可能です

こちらを利用する方式では、何か問題があるのでしょうか?

ユーザー redman の写真

firpperさん

ご指摘ありがとうございます. 素人質問で申し訳ありませんでした.

zabbix既存のアイテムを使用した方が適しているのは仰る通りだと思います.
今回は「ユーザーパラメータの引数をトリガーに設定できるのか」という点をお伺いしたく投稿しました.
ログ監視についてはケースの一つ, という意味でしかありません.

イメージとしては
{テンプレ:アイテム(hogehoge, fugafuga).str($2)}=1
で引数2(fugafuga)を含んでいた場合, エラーを吐く, という挙動ができるか, という点です.
(勿論str($2)で第二引数を引く事はできないのですが)

マニュアルには引数をトリガーに適用する項がなかったと理解しているので,
もしできるならどういう方法があるのかな, という点を質問したかった次第です.

ユーザー TNK の写真

catコマンドの出力では、継続した監視はできません。

ログファイルを監視したいのであれば、アイテムのキーとしては、

 log[]
 logrt[]

のどちらかを利用してください。

同じログファイルに対して別の文字列のパターンで検知したいとい
うことだけであれば、アイテムは1つで、それぞれの文字列パター
ンを指定するトリガーを複数登録すれば、それぞれの文字列を検知
することができます。

例えば以下のような設定をホスト単位に登録します。

 ・アイテム
   キー : log[/var/log/httpd/error_log]

 ・トリガー1
   条件式 : {ホスト名:log[/var/log/httpd/error_log].str(down)}=1

 ・トリガー2
   条件式 : {ホスト名:log[/var/log/httpd/error_log].str(error)}=1

こうすれば、「down」という文字列も「error」という文字列も検
知することができます。
ただし、ログ監視の場合、Zabbixのエージェントが起動されるアカ
ウントで監視したいログファイルやディレクトリにアクセスできる
ようパーミッションの設定にご注意ください。

つまり、アイテムの設定だけで障害かどうかを判定するのではなく、
アイテムで値を取得して、その取得した値に対して複数のトリガー
を登録して監視することができます。

もしも、テンプレートでアイテムやトリガーを作成していて、ホス
ト毎に検知する文字列を変更したいということであれば、ユーザー
マクロを利用すれば良いでしょう。

テンプレートに設定したアイテムとトリガーで、ログ内のエラーと
判定する文字列をホストごとに変えたいということであれば、マク
ロを利用すれば実現できると思います。

例えば、テンプレートには以下のような設定を行うわけです。

 ・アイテム
   キー : log[/var/log/httpd/error_log]

 ・トリガー
   条件式 : {テンプレート名:log[/var/log/httpd/error_log].str({$ERROR_STRING})}=1

 ・マクロ
   {$ERROR_STRING} = down

テンプレートにマクロを設定している場合は、個別にホストに対し
て同じ名前のマクロを設定することで、個別設定を上書きすること
ができます。

上記の条件式は、あくまでもサンプルです。
要件によっては、さらにトリガーの条件式に条件を追加したり、判
定するために利用する関数などは別の物を利用した方がよいでしょ
う。
log[]やlogrt[]の引数によっては、ログの全行を取得するのではな
く、条件に合致した行のみを取得するような設定を行うこともでき
ます。

ご確認ください。

ユーザー fripper の写真

UserParameter を利用した監視に限らず、デフォルトで存在するアイテムキーも含め、
アイテム設定の段階で、
some.item.key[param1, param2]
などと設定した項目に対して、

以下のようなトリガーを、できるだけ簡単に設定したい
{host:some.item.key[param1, param2].str(param2)}=1

‥という意図のご質問でしょうか?

アイテム設定の際に入力した「アイテムに対する引数の情報」を、
トリガー設定の際に、「$2」のような形で引っ張ってくることは、残念ながら不可能です

テンプレートと、ホストマクロを上手に組み合わせることで、

テンプレートやホスト自身に設定するマクロ
  →  {$SOME_MACRO} = 'string'
アイテムの設定
  →   some.item.key[param1, {$SOME_MACRO}]
トリガーの設定
  →  {templatename:some.item.key[param1, {$SOME_MACRO}].str({$SOME_MACRO})}=1

というようなことは可能だと思います

組み合わせを複数パターン作る場合には、対応した数のマクロ・アイテム・トリガーを作る必要があると思います

ユーザー redman の写真

TNKさん

ありがとうございます, 参考にさせて頂きます.

ユーザー redman の写真

fripperさん

ご返信ありがとうございます.
承知しました, 頂いた方法も参考にさせて頂きます!
ありがとうございました.