一つ前のステータスの取得

お世話になっています。

障害通知用アクションで、
一つ前のステータスを取得する場合、以下の設定でとってこれると思っています。

{{HOSTNAME}:{TRIGGER.KEY}.prev(0)}

監視対象が、Linuxの場合は、取得できているのですが、
Windowsでは、うまくいかないです。
監視対象のOSは、関係ないと思っているのですが、
Windowsで実績があるかだけ確認させてください。
よろしくお願いいたします。

コメント表示オプション

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

priv()関数が監視対象によって結果が異なるということはありませんので、想定どおりの動作をしていないということであればアイテムの種類や設定に関係する可能性があります。

正常に取得できているアイテムと、取得できないアイテムの設定を書いていただければ何か分かるかもしれません。

ユーザー tthogho1 の写真

設定は即座に出せないです。申し訳ないです。

以下のようにメッセージの定義をすると、

 {{HOSTNAME}:{TRIGGER.KEY}.prev(0)}
ログの中で

Function [MyWIN:proc.num[mysqld.exe].prev(0)] not found. Query
returned empty result

のエラーが出力されます。
もうちょっと調べます。
すいません。。。

ユーザー tthogho1 の写真

すいません。情報として伝えていなかったのですが、
proc.num[mysqld.exe]
のプロセス名の部分は、アイテムの定義部ではユーザマクロを使用しています。(以下です。)
proc.num[$PROCESS] 
かつ
$PROCESS=mysqld.exe

ログから、先ほどのエラー直前のSQLで、データベースから、proc.num[mysqld.exe]を検索しているようでしたので、アイテムの定義で
mysqld.exeを直接入力したところ、値が取得できるようになりました。

「取得アイテムにマクロを使用している場合は、{{HOSTNAME}:{TRIGGER.KEY}.prev(0)}は使用できない。」

という認識であっているのでしょうか?

ユーザー kodai の写真

マクロは{$MACRO}の形式で書く必要がありますので、アイテムとマクロの設定を

proc.num[{$PROCESS}]
{$PROCESS}=mysqld.exe

と設定するとうまく動かないでしょうか?

ユーザー tthogho1 の写真

また、やってしまいました。すいません。
proc.num[{$PROCESS}]
{$PROCESS}=mysqld.exe
の定義で実行していました。

ただ、やはり実績はあるのですね。

ちなみに、
アクションのコンディションは、以下のようにしています。

(A) ホストグループ = "Windows servers"
(B) トリガー = "Template-Windows-Send:プロセスダウンを検知しました。"
(C) トリガーの値 = "障害"

{{HOSTNAME}:{TRIGGER.KEY}}
のみだと
{MyWIN:proc.num[mysqld.exe]}

{{HOSTNAME}:{TRIGGER.KEY}.prev(0)}
だと
*UNKNOWN*

が表示されています。

ユーザー kodai の写真

返信遅くなりました。いろいろと情報ありがとうございます。

マクロを使わずに直接mysqld.exeを設定すると正しく動作するということでれば、マクロの展開のバグかもしれません。

手元の環境で試してみようと思います。

ユーザー kodai の写真

返信遅くなりました。この件、原因が分かりました。

アクションで(TRIGGER.KEY}のようなアイテムのキーを含むマクロを使用し、
かつそのアイテムのキーのオプションにもマクロを使っていた場合、
アクション実行時にアイテムのオプション内のマクロまで展開されてしまうバグがありました。

言葉だけでは分かりづらいので例をあげて説明すると、

ホスト名: localhost
ユーザ定義マクロ: {$PROCESS} - mysqld.exe
アイテムのキー: proc.num[{$PROCESS}]
アクションのメッセージ: {{HOSTNAME}:{TRIGGER.KEY}.last(0)}

という設定にしていた場合、アクション実行時のメッセージでは
以下のようにマクロが展開されてしまいます。

{localhost:proc.num[mysqld.exe].last(0)}

結果、localhostにはproc.num[mysqld.exe]というキーを持つアイテムは存在しないため
(存在しているのはproc.num[{$PROCESS}]というキー)、ヒストリを正しく参照できない状態になってしまっていました。

Zabbix SIAに報告したところ修正予定と回答があったので、今後のリリースで修正されると思います。

ユーザー tthogho1 の写真

ありがとうございます。
すっきりしました。

修正されることも分かり、安心しました。