[改善希望] 内部イベントでのアクション実行についてアクション実行条件にメンテナンス状態が選択できない

jhiguと申します。

Zabbix2.2で監視を行っております。

2.2から追加された「アクション」-「イベントソース」の「内部イベント」に関して改善して欲しい項目があります。

現状:
 「イベントソース:内部イベント」で、監視アイテムの「取得不可」が検知できるようになりました。
 (Ver1.8ではzabbix-server.logのログ監視にて対応していました。)
 しかし、イベントソース:内部イベントの場合は、アクションの実行条件に「メンテナンス状態」が選択できないため
 監視対象がメンテナンス期間中に「サーバ停止/再起動」などで「取得不可」となったときにアクションが実行されてしまいます。

具体的には、以下の画面遷移になります。

・設定ーアクションで「イベントソース:トリガー」を選択した状態で「アクションの作成」をクリック
・表示された画面で「アクションの実行条件」タブをクリック
・新規条件のリストに「メンテナンス状態」が表示されるので選択できる。

一方
・設定ーアクションで「イベントソース:内部イベント」を選択した状態で「アクションの作成」をクリック
・表示された画面で「アクションの実行条件」タブをクリック
・新規条件のリストに「メンテナンス状態」が表示されないで選択できない。
 ->この結果、メンテナンス期間を設定してある監視対象機器でメンテナンス作業(サーバ再起動など)が行われた際に
    アイテムが「取得不可」となるとアクションが実行されてしまう。

「イベントソース:内部イベント」のアクション条件設定でも「メンテナンス状態」を選択できるようになると助かります。

 

コメント表示オプション

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

すでに改善要望があがっているようですので、ぜひ、Voteして改善
要望があることを開発元に伝えてあげてください。

該当すると思われる改善要望:
 Add maintenance status to the supported conditions for actions on internal events
   https://support.zabbix.com/browse/ZBXNEXT-2141

ユーザー KAZ の写真
jhiguさん

トップページにも書いてありますが…

ZABBIX-JPは統合監視ソフトウェア"Zabbix"の非公式日本コミュニティサイトです。日本におけるZabbixの普及を目標としています。
ZabbixはZabbix SIAにより開発され、日本国内のオフィシャルサポートはZabbix Japanが提供しています。
なので、Zabbix SIAに要望出したほうが良いです。
書き方分からないとかなら相談して下さい。

TNKさん

情報ありがとうございました。
Voteしました。

KAZさん
すいませんでした。
本家のほうは、英語であったのでこちらに登録してしまいました。
今後は、相談させていただくようにします。

また、改善を待っていられなかったので、アクションのスクリプトで該当のサーバが「メンテナンス中」であるか判定するようにしました。

以下は参考まで。
アクションのメール送信で使わせてもらっている ”sendmessage_php.sh” のメール送信前に以下処理を入れてメンテナンス中か判断しています。

---ここから---------
//対象のホストの状態をZabbix APIにて取得して、対象がメンテナンス中ならメールを送信しないように変更
// Zabbix API 情報
require 'ZabbixApiAbstract.class.php';
require 'ZabbixApi.class.php';

$APIuser = "APIuser";
$APIpass = "APIpass";
$ZabbixServerURL = "http://localhost/zabbix/api_jsonrpc.php";

// 送信メールの「件名」に挿入されている対象サーバ名を取得する
// 重要!!!
// 件名($MAIL_SUBJECT)を空白で分割した場合に第2フィールドに「サーバ名」が存在する前提!!!
//  アクションの「デフォルトの件名」で第2フィールドに{HOSTNAME}と指定すること!!

$ArrayStr = explode(" ", $MAIL_SUBJECT);
$hostname = $ArrayStr[1];

try {
$api = new ZabbixApi( $ZabbixServerURL, $APIuser, $APIpass);
$hoststatusAr = $api->hostGet(array(
'output' => 'extend' , 'filter' => array( 'host' => $hostname )
));
} catch(Exception $e) {
// Exception in ZabbixApi catched
$str .= $e->getMessage();
echo $e->getMessage();
}

$hoststatus = $hoststatusAr[0];
echo $hoststatus->maintenance_status . "\n";
if ($hoststatus->maintenance_status == "0")
{
  // maintenance_status == "0":メンテナンス中ではないので
  // メール送信処理 実施
}
---ここまで--------------

以上です。