スクリプト実行時にネットワーク機器のインターフェイス名を引数に渡したい

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

ZabbixのTemplate SNMP Deviceを使用し、各ネットワーク機器の
インターフェイスのup/downを監視しています。

あるインターフェイスがdownした場合、トリガーで検知しますが、この検知した際に
対象ネットワーク機器の対象インターフェイスに対して、スクリプトを実行
したいのですが、可能でしょうか?
スクリプトに対象ネットワーク機器のIPアドレスは渡すことは出来ましたが
ローレベルディスカバリで取得した、インターフェイス名(#SNMPVALUE値)は、
渡せませんでした。
※Zabbixのマニュアルにも、サポートされていなさそうなのは確認済みですが…。

こういったことを実施しようとした時に、何か代替案はありますでしょうか?
何かいいアイディアをお持ちの方は、ご教授のほどよろしくお願い致します。

□環境
Zabbix 2.2.4

□実施したいことの流れ
1.インターフェイスのdown等発生
2.Zabbixでトリガー検知→ダッシュボードに表示
3.該当ネットワーク機器のIPアドレス、対象インターフェイスを元に、
 Zabbixサーバ上のスクリプトを実行する。
4.スクリプト内処理は、expectコマンドを使用し、該当ネットワーク機器の
 該当インターフェイスのmac address table情報を取得する
5.結果を返す

以上、よろしくお願い致します。

コメント表示オプション

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

#SNMPVALUEの値だけを取り出すマクロは無かったかもしれませんが、

 トリガーが発生したトリガーの名前は{TRIGGER.NAME}

で取得できたと思うので、それを利用して、スクリプト内でその名
称からインターフェース名のみ切り出して実現できるのではないで
しょうか?

ユーザー TF0814 の写真

TNK様

さっそくご回答ありがとうございます。

ご指摘の{TRIGGER.NAME}ですが、スクリプトに設定して
実行してみましたが、そのままの文字列として、スクリプトに
渡されていました。

 □実行したスクリプトのコマンド
 PATH/スクリプト名 {HOST.IP} {TRIGGER.NAME} 2>&1

Zabbixマニュアルを確認すると、{TRIGGER.NAME}は
スクリプトではサポートされていないようです。
https://www.zabbix.com/documentation/2.2/manual/appendix/macros/supporte...

ユーザー TNK の写真

スクリプトというのはどこから実行するスクリプトですか?

私が読み取ったのは、トリガーが発生して自動的にアクションから
実行するスクリプトなのですが?

手動でマップやホスト一覧からホストをクリックして実行するスク
リプトであるならば、実行時に引数を指定できなかったと思います
ので、そこから直接実行することは難しいと思います。

強いて実装するとすれば、ZabbixのAPIを利用して、指定したホスト
のインターフェースのステータス一覧を取得して、それぞれのステ
ータスに合わせて、コマンドの実行が必要なものに対してコマンド
を実行するようなスクリプト(プログラム)を作成することになるか
もしれません。

ユーザー TF0814 の写真

失礼しました。
手動で実行する方のスクリプトの事を言っておりました。

なるほど、了解しました。
アクションからのスクリプトであれば、出来そうですね。
こちらで試してみようと思います。

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

ユーザー TNK の写真

現時点でのZabbixの実装だと、ホストをクリックして選択して実行
するスクリプトに関しては、動的に引数を指定することができませ
んので、呼び出す可能性のあるものは事前に登録しておく必要があ
ったと思います。
また、LLDでみつかったインターフェース毎のメニュー自動追加も
なかったと思います。

スクリプトをホストグループ単位で表示するしないは設定できるよ
うですので、同じインターフェースを持つものを、同じホストグル
ープにも登録して、各インターフェース用のスクリプトを表示させ
るようなことはできるかもしれません。

しかし、インターフェースの数が多くなってくると、サブメニュー
も利用するとしても、ポップアップメニューから選択するのは非常
に面倒かもしれません。

自動でトリガーの発生したポートを対象としたスクリプトを実行す
ればよいのであれば、アクションを利用すればトリガー名は取得で
きますので、そこからインターフェース名を切り出してexpectで何
らかのコマンドを実行というのはできると思います。