Zabbix 2.2 イベントの詳細にトリガの説明(comments)を表示させる
Zabbixでログ監視を設定したのは良いものの,上がってきたイベントにはログが表示されてなくて,わざわざヒストリを見にいくのは不便だったので無理やり改造してみた.
改造の流れ
- 「トリガの設定」で「名前」にマクロ
{ITEM.VALUE}
を入れるだけで,「イベント詳細」画面左カラムにある「イベントソースの詳細」テーブルの「トリガー」行にログが表示される.- 悪くないけど「トリガ画面」の「名前」列の表示もログになってしまって微妙だったのでもう少し頑張ってみる.
- 「イベント詳細」画面左カラム「イベント詳細」テーブルに「イベント」行がある.
- デフォルトだとトリガの名前が入ってるけど,ここにログが表示されれば入れられれば収まりがよさそう.
- 「トリガの設定」に「説明」(comments)欄があるのでここにマクロ
{ITEM.VALUE}
を書いて,それが上の「イベント」行に表示されるようにしよう.
- 「トリガの設定」に「説明」(comments)欄があるのでここにマクロ
- デフォルトだとトリガの名前が入ってるけど,ここにログが表示されれば入れられれば収まりがよさそう.
改造内容
表示するデータを作っているinclude/events.inc.php
のmake_event_details()
内にある
CMacrosResolverHelper::resolveEventDescription
を
CMacrosResolverHelper::resolveTriggerDescriptions
あたりに変更したら行けそうにみえたけど,マクロ{ITEM.VALUE}
の変換結果が常に最新のログになってしまったので少し強引に改造.
events.php
--- events.php.ORG 2013-12-11 02:45:09.000000000 +0900 +++ events.php 2014-02-07 14:11:58.165892875 +0900 @@ -652,7 +652,7 @@ 'triggerids' => zbx_objectValues($events, 'objectid'), 'selectHosts' => array('hostid'), 'selectItems' => array('name', 'value_type', 'key_'), - 'output' => array('description', 'expression', 'priority', 'flags', 'url') + 'output' => array('description', 'expression', 'priority', 'flags', 'url', 'comments') )); $triggers = zbx_toHash($triggers, 'triggerid');
- トリガのデータを取得しているところで「説明」欄の内容も取得するように変更.
include/events.inc.php
--- include/events.inc.php.ORG 2013-12-11 02:45:05.000000000 +0900 +++ include/events.inc.php 2014-02-07 11:01:27.587964245 +0900 @@ -179,7 +179,13 @@ $config = select_config(); $table = new CTableInfo(); - $table->addRow(array(_('Event'), CMacrosResolverHelper::resolveEventDescription(array_merge($trigger, $event)))); + $trigger_for_comments = $trigger; + $trigger_for_comments['description'] = $trigger_for_comments['comments']; + + $table->addRow(array(_('Event'), CMacrosResolverHelper::resolveEventDescription(zbx_array_merge($trigger_for_comments, array( + 'clock' => $event['clock'], + 'ns' => $event['ns'] + ))))); $table->addRow(array(_('Time'), zbx_date2str(_('d M Y H:i:s'), $event['clock']))); if ($config['event_ack_enable']) {
- 「イベント詳細」画面左カラム「イベント詳細」テーブル「イベント」行を作成するところで内容を差し替える.
CMacrosResolverHelper::resolveEventDescription
が引数にとる配列のキーdescription
を変換していたので,これを変更する.- 他に影響が出ないように引数用の配列
$trigger
を別配列$trigger_for_comments
にコピー. - 配列
$trigger_for_comments
のキーdescription
をキーcomments
で上書き.- キー
comments
は上記events.php
の改造で使えるようになっている.
- キー
- 他に影響が出ないように引数用の配列
CMacrosResolverHelper::resolveEventDescription
の引数を配列$trigger_for_comments
に変更.
おまけ
「最新のイベント」画面の「説明」カラムにトリガの「説明」を表示させる
--- events.php.ORG 2013-12-11 02:45:09.000000000 +0900 +++ events.php 2014-02-07 14:11:58.165892875 +0900 @@ -702,6 +702,16 @@ 'ns' => $event['ns'] ))); + $trigger_for_comments = $trigger; + $trigger_for_comments['description'] = $trigger_for_comments['comments']; + + $comments = CMacrosResolverHelper::resolveEventDescription(zbx_array_merge($trigger_for_comments, array( + 'clock' => $event['clock'], + 'ns' => $event['ns'] + ))); + + $description = $comments; + $triggerDescription = new CSpan($description, 'pointer link_menu'); $triggerDescription->setMenuPopup(getMenuPopupTrigger($trigger, $triggerItems, null, $event['clock']));
表示できるようにしたログが20バイトで切られてしまっていたので1024バイトまで表示されるようにする
--- include/items.inc.php.ORG 2013-12-11 02:45:05.000000000 +0900 +++ include/items.inc.php 2014-02-07 11:43:03.020497499 +0900 @@ -989,8 +989,8 @@ // break; is not missing here case ITEM_VALUE_TYPE_TEXT: case ITEM_VALUE_TYPE_LOG: - if ($trim && zbx_strlen($value) > 20) { - $value = zbx_substr($value, 0, 20).'...'; + if ($trim && zbx_strlen($value) > 1024) { + $value = zbx_substr($value, 0, 1024).'...'; } if ($mapping !== false) {