リモートコマンドの結果を取得して、リカバリーメールに含めたい

お世話になっております。
Zabbixのバージョンは v3.0.9 です。

10個のプロセスを1アイテム:proc.num(targetProcesses)のようにプロセス数で監視し、
トリガー:proc.num(targetProcesses) < 10 の場合、リモートコマンドでシェルスクリプトを叩くよう設定しています。

シェルスクリプトは対象の10プロセスの状態をpsで確認して、Downしているプロセスのみ上げ直す仕組みにしています。
シェルスクリプトはログ出力し、どのプロセスがDownしていたかわかるようになっています。

現在の通知設定は、proc.num(targetProcesses) < 10 の障害通知メールと、これに対するリカバリーメールのみです。
主題の通り、リカバリーメールにリモートコマンドの実行結果=ログ内のDownしていたプロセスを含めることは可能でしょうか?

ーーーーーーーーーーーーーーーーーーーーーーー

10プロセス1つずつ監視してはいけないという制約はないので、上記設定が不可能であれば、
以下が対応策だと思うのですが、他に良いやり方があればご教授いただけますか?
 1、10アイテム、10トリガー、1アクションを設定する。= 1プロセスごとの監視
 2、設定は上記のまま、シェルスクリプトの出力するログ監視設定を追加する。=通知メールが増える。

よろしくお願いします。

コメント表示オプション

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

主題の通り、リカバリーメールにリモートコマンドの実行結果=ログ内のDownしていたプロセスを含めることは可能でしょうか?

そのシェルスクリプト内で、Downしていたプロセスが特定できてい
るのであれば、そのシェルスクリプトからzabbix_senderを使用し
てZabbixサーバーに値を送ってアイテムの値として保存し、リカバ
リメール内で、そのアイテムの値を参照するようマクロを記述する
という方法が考えられます。
# マクロ {host:key.func(param)} を使用

zabbix_senderを使用せずに、ログファイルに出力させてそのログ
ファイルの監視設定を行っておくことで、そのログファイルから取
得してきた行の内容を、アイテムの値としてリカバリメッセージ内
で使用する方法も考えられます。

ただし、アイテム取得のタイミングによっては、リカバリメッセー
ジを送信する際に、zabbix_senderでもログ監視のアイテムでも、
最新の値としてDBに反映されていないかもしれないので、処理され
るタイミングなどに注意が必要となるでしょう。

これらの説明で実装のイメージがわかないのであれば、それぞれの
プロセスごとにアイテムとトリガーを作成して、トリガーの名前で
どのプロセスでの障害が発生したのかを特定できるようにした方が
設定が簡単だと思います。

ユーザー yudai の写真

TNKさん、
ありがとうございます。

zabbix_senderの方は調べてみます。

>アイテムの値としてリカバリメッセージ内で使用する方法も考えられます。

プロセスDown検知 > リモートコマンド実行 > ログ出力 > プロセス全起動 > リカバリーメール
                        →これは別のアイテム設定

Aの障害検知で実行したリモートコマンドのログを
Bのログ監視設定で取得してアイテムとして保存し
AのリカバリーメッセージにBのアイテムを使用する
  ↓
Aのリカバリーメッセージが発行される前(次のステータス確認まで)に
Bのログ監視で値が取得できている必要があるということですね。