0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Zabbixイベント発生の通知先をRundeckに指定してJobを実行

Posted at

概要

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:
-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
   :
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?