ログ監視トリガー ITEM.VALUEから文字列の抽出

いつもお世話になっております。

ログ監視のトリガーの設定において、ログのメッセージをトリガー名に表示し、ホスト名をタグに表示したいと考えています。
(アイテムのヒストリーには「情報」のログフォーマットの形式で表示させたいです。)

そこで、ITEM.VALUEから文字列を抽出したいのですが、やり方がわかりません。
どなたか教えて頂けないでしょうか。
(※zabbixのバージョンが2.0ではそのような機能はないと調べてわかったのですが、それ以降のバージョンでは調べてもわからなかったため、質問させていただきました。)

----------------------------------------------------------------------------------------
「情報」
zabbixバージョン:4.0.0 alpha6
ログフォーマット(ITEM.VALUEに入る値):yyyy/MM/dd hh:mm:ss HostName=XXXX AlarmID=YYYY Message=ZZZZ
※この中から、「XXXX 」と「ZZZZ」を取り出し、トリガー名にZZZZを表示し、タグの値にXXXX を入れたいと思っています
アイテム:logrt[・・・/output\..*\.log]
トリガーの条件:{Zabbix server:logrt[・・・/output\..*\.log].diff()}=1
----------------------------------------------------------------------------------------

よろしくお願いいたします。

============================================================
[追記]
バージョン3.2から {ITEM.VALUE} に対して、regsubとiregsubが使用できるらしく、こちらで解決できました。
https://www.zabbix.com/documentation/3.2/manual/config/macros/macro_func...
ありがとうございました。
============================================================

コメント表示オプション

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

Zabbix 3.4以降であれば、ログのアイテムから正規表現で値を切り
出すことはできます。

しかし、ログで障害を検知した時に、そのログから切り出した値を
トリガー名やタグに使用したいということであればできません。

まず、トリガー名にアイテムの値をマクロで指定できますが、その
値がトリガーイベントが発生したログから切り出した値であるとい
う保証がありません。
最新値でもよいのであれば、ログから切り出す依存アイテムを作成
して、そのアイテムの値を参照するマクロをトリガー名に指定すれ
ば実現できるかもしれません。

タグに関しては、障害の画面のタグの部分にログから切り出した値
を表示したいということであれば不可能です。
ここのタグは、事前にトリガーに設定してあったものを表示するだ
けです。

あと、Zabbixのバージョンを示す場合に、pre-4.0では情報が不足
しています。
preで始まる開発者向けバージョンは、日々更新されているので、
詳細なファイル名まで指定しなければ、同じ動作をするとは限りま
せんのでご注意ください。

ご参考:
依存アイテム
  https://www.zabbix.com/documentation/4.0/manual/config/items/itemtypes/d...
保存前処理
  https://www.zabbix.com/documentation/4.0/manual/config/items/item#item_v...
Zabbix最新情報 @OSC 2017 Tokyo/Fall (P.21)
  https://www.slideshare.net/atanaka7/zabbix-osc-2017-tokyofall

ユーザー kawa03 の写真

TNKさん

コメントありがとうございます。
なるほど。
Zabbixの設定では実現できないんですね。
参考のURLまで貼っていただき、ありがとうございます。

Zabbixのバージョンについて、変更いたしました。
ご指摘ありがとうございます。

ちなみになんですが、今回のことを実現するためにはソースコード(PHP)をいじると実現できると考えています。
ソースコードをいじるとすると、Problemテーブル(DBはmysql使用)にデータを挿入しているファイルをいじる必要があると考えているのですが、
どのファイルが該当しますでしょうか。
また、もっと簡単なやり方があれば、それも教えていただければ嬉しいです。
(外部スクリプトでも実現可能なのかなと考えていますが、まだそこまで勉強できていないため、確信出来ていない状態です。)

質問が多く申し訳ございませんが、ご協力よろしくお願いいたします。

ユーザー TNK の写真

ちなみになんですが、今回のことを実現するためにはソースコード(PHP)をいじると実現できると考えています。
ソースコードをいじるとすると、Problemテーブル(DBはmysql使用)にデータを挿入しているファイルをいじる必要があると考えているのですが、
どのファイルが該当しますでしょうか。

problemテーブルには、トリガー名やタグの情報はありません。
また、problemテーブルにイベント発生にデータを登録しているの
は、C言語で書かれたZabbixサーバーの処理です。

「監視データ -> 障害」の画面を変更したいのであれば、より広い
範囲のテーブルアクセスとデータの関係性を理解する必要がありま
す。

特定のログ監視だけ特殊な加工をするのであれば、どのトリガーで
のイベントで発生したかを判別することが必要ですし、加工した情
報を別途テーブルを作成して保存することも考える必要がでてくる
でしょう。

単純に一部のPHPだけの変更では対応できないと思います。

あと、Zabbix 4.0はまだAlpha版ですので、リリースまでにはまだ
まだ変更される可能性があります。
Alpha6で動いても、正式リリース版では、以前の修正方法では対応
できなくなる可能性があることに十分ご注意ください。

ユーザー kawa03 の写真

丁寧にコメントしていただきありがとうございます。
大変勉強になります。

problemテーブルには、トリガー名やタグの情報はありません。
また、problemテーブルにイベント発生にデータを登録しているの
は、C言語で書かれたZabbixサーバーの処理です。

失礼いたしました。トリガー名の情報はtriggerテーブルに登録されており、
ITEM.VALUEなどのマクロの値が反映されてevent・problemテーブルに登録している、
また、タグの情報はevent_tag・problem_tagテーブルに登録されていると認識しています。
eventテーブル・problemテーブルに登録しているのは、
events.cの関数save_eventsと関数save_problemsだと認識しているのですが、間違いないでしょうか。

特定のログ監視だけ特殊な加工をするのであれば、どのトリガーで
のイベントで発生したかを判別することが必要ですし、加工した情
報を別途テーブルを作成して保存することも考える必要がでてくる
でしょう。

ログをフォーマット化し、トリガー名に「ログ」を表示しています。
そこで、events・problemテーブルに挿入する前に、トリガー名の「ログ」を少しいじってから、
それぞれのテーブルに挿入しようと考えています。
その考えだと、どのトリガーか判別ができ、他のテーブルを作成しなくても実現可能だと考えているのですが、
この方法だと不具合が起きそうですか。

あと、Zabbix 4.0はまだAlpha版ですので、リリースまでにはまだ
まだ変更される可能性があります。
Alpha6で動いても、正式リリース版では、以前の修正方法では対応
できなくなる可能性があることに十分ご注意ください。

ご指摘ありがとうございます。
今のところ、実現可能かを判断するためにzabbixのソースコードをいじっていますが、
今後その点には十分注意したいと思います。

お忙しいところ申し訳ございませんが、
回答して頂ければ幸いです。