概要
Zabbixで検知したイベント発生の通知先をRundeckのWebhookに指定してRundeck Jobを実行しました
具体的には以下のとおりとなります。
①Zabbixからインスタンス(今回はOCI Compute)を監視
②イベント検知後、Rundeck Webhook先に通知
③あらかじめ登録したJobからインスタンスに再起動指示を実行

前提
今回はRundeckのWebhook機能を利用するため以下の設定は行っています
- Zabbixを使ったOCI Computeの監視
- Rundeckを使ったOCI Computeの管理(起動/停止)
準備
RundeckでJobを作成
OCI Computeに再起動指示を実行するJobを作成します
- Rundeckサーバー内にシェルを作成
OCI CLIを使って再起動を行います
対象がAWS EC2やAzure VMの場合はそれらに合わせたコマンドを準備します
vmaction-reset.sh
#! /bin/bash
# Reset action
oci compute instance action --auth instance_principal --action $2 --instance-id $1
- Rundeck Jobを作成
- Rundeckメニュー"ジョブ"から新しいジョブを作成を押下
- Workflowに以下を設定
Script file or URLを選択して以下を入力
File Path or URL:作成したシェル
Arguments:${option.ocid} ${option.action}
- Rundeck Webhook作成
- Rundeckメニュー"Webhook"から"Create Webhookを押下
[General] - HTTP Authorization String
Use Authorization Headerにチェック - Name: 任意の名前
- User: 実行時のユーザー
- Roles: 実行時のロール
- Enabledにチェック
[Handler Configuration] - Choose Webhook Plugin: Run Jobを選択
- Job: 先程作成したJobを選択
- Options:
- Rundeckメニュー"Webhook"から"Create Webhookを押下
-ocid ${data.messages.ocid} -action ${data.messages.action}
-
- Saveを押下
- 表示されたPost URLおよびauthorization stringをコピー
CurlでWebhookを検証
Webhookが機能することを検証します
[user@linux]$ curl --location --request POST '<<https://PostURL>>' --header 'Authorization: <<authorization string>>' --header 'Content-Type: application/json' --data-raw '{
"messages": {
"ocid":"OCI Compute OCID",
"action":"restart"
}
}
}'
以下が返ることを確認
{"jobId":"******","executionId":"****"}
Zabbix設定
Zabbixイベント発生の通知先をRundeckに指定します
- ホストにinstance ocid情報を追加
- Zabbixメニュー 監視データ>>ホスト
- 対象ホストを選択して設定>>ホストを選択
- ホストの説明にinstance ocidを設定
webhookにintance ocid情報を付加して通知します
- メディアタイプrundeckを作成
- Zabbixメニュー 通知>>メディアタイプ
- メディアタイプの作成を押下
- メディアタイプに以下を設定
- 名前: rundeck
- タイプ: Webhook
- パラメータ
名前:action, 値:RESET <= RESETコマンド
名前:ocid, 値: {HOST.DESCRIPTION} <=ホストの説明の内容 - スクリプト
<<PostURL>>および<<authorization string>>はWebhook作成時の値を設定
try {
Zabbix.log(4, '[ rundeck webhook ] Started with params: ' + value);
var result = {
'tags': {
'endpoint': 'rundeck'
}
},
params = JSON.parse(value),
req = new HttpRequest(),
messages = {},
resp;
if (params.HTTPProxy) {
req.setProxy(params.HTTPProxy);
}
req.addHeader('Content-Type: application/json');
req.addHeader('Authorization: <<authorization string>>');
messages.ocid = params.ocid;
messages.action = params.action;
resp = req.post('<<PostURL>>',
JSON.stringify({"messages": messages})
);
resp = JSON.parse(resp);
result.tags.issue_id = resp.id;
result.tags.issue_key = resp.key;
return JSON.stringify(result);
}
catch (error) {
Zabbix.log(4, '[ rundeck webhook ] Issue creation failed json : ' + JSON.stringify({"fields": fields}));
Zabbix.log(3, '[ rundeck webhook ] issue creation failed : ' + error);
throw 'Failed with error: ' + error;
}
-
- メッセージテンプレートに以下を設定
- メッセージタイプ: 障害
- 件名: 変更なし
- メッセージ: {HOST.DESCRIPTION}を追加
- 追加を押下
- メディアタイプのテスト
- テストを押下
- actionにRESETが表示されていることを確認
- ocidにOCI ComputeのOCIDを設定
- テストを押下
- "メディアタイプのテストに成功しました。"と表示されればテスト成功
- キャンセルを押下
- メッセージテンプレートに以下を設定
-
トリガーアクション設定
- 通知>>アクション>>トリガーアクション>>登録済のトリガーアクションからWebhookを設定するイベントを選択
- 実行内容の追加を押下
- 実行内容の詳細に以下を設定して追加を押下
- ユーザーに送信: 送信先ユーザー(例:Admin)
- Send to media type: rundeck
-
送信先設定
- ユーザー>>ユーザーから送信先ユーザーに設定したユーザーを選択(例:Admin)
- メディアを追加
- タイプ rundeck
- 送信先 メール通知されないのでダミーのメールアドレスでも可
テスト
Zabbixが障害検知してWebhookを通じてRundeck Jobを実行できるか確認します
- 監視対象インスタンスで障害を発生させる
インスタンスのzabbix agentを停止して障害を発生させます
[user@linux ~]$ uptime
00:12:00 up 37 min, 1 user, load average: 0.04, 0.05, 0.13
[user@linux ~]$ sudo systemctl status zabbix-agent2
● zabbix-agent2.service - Zabbix Agent 2
Loaded: loaded (/usr/lib/systemd/system/zabbix-agent2.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2025-06-24 23:34:32 JST; 37min ago
:
[user@linux ~]$ sudo systemctl stop zabbix-agent2
[user@linux ~]$ sudo systemctl status zabbix-agent2
● zabbix-agent2.service - Zabbix Agent 2
Loaded: loaded (/usr/lib/systemd/system/zabbix-agent2.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Wed 2025-06-25 00:13:06 JST; 4s ago
:
- Zabbixにて障害検知

- ZabbixからRundeckにメッセージ送信される

- Rundeckにて再起動のJobが実行される

- 再起動されたことがZabbixからも確認できる

- 監視対象インスタンスが再起動されたことを確認
[user@linux ~]$ uptime
00:25:02 up 5 min, 1 user, load average: 0.60, 1.07, 0.61
[user@linux ~]$ sudo systemctl status zabbix-agent2
● zabbix-agent2.service - Zabbix Agent 2
Loaded: loaded (/usr/lib/systemd/system/zabbix-agent2.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2025-06-25 00:19:32 JST; 5min ago
: