4 Webhook

概要

Webhookメディアタイプは、カスタムJavaScriptコードを使用してHTTPコールを行うのに便利で、ヘルプデスクシステム、チャット、メッセンジャーなどの外部ソフトウェアとの簡単な統合が可能です。 Zabbixが提供するインテグレーションをインポートするか、独自のインテグレーションをゼロから作成することができます。

統合

以下の統合が利用可能で、定義済みの webhook メディアタイプを使用して Zabbix の通知を送信できます。

ここに記載されているサービスに加えて、Zabbix は Spiceworks と統合できます(webhook は不要です)。 Zabbix の通知を Spiceworks のチケットに変換するには、email media type を作成し、指定した Zabbix ユーザーのプロファイル設定に Spiceworks のヘルプデスクメールアドレス(例: help\@zabbix.on.spiceworks.com)を入力します。

設定

webhook連携の使用を開始するには:

  1. ダウンロードした Zabbix バージョンの templates/media ディレクトリ内にある必要な .yaml ファイルを見つけるか、Zabbix git repository からダウンロードします。
  2. ファイルを Zabbix インストール環境に インポート します。
    webhook はメディアタイプ一覧に表示されます。
  3. Readme.md ファイルの手順に従って webhook を設定します(上の webhook 名をクリックすると、Readme.md にすばやくアクセスできます)。

カスタム webhook を一から作成するには:

  1. 障害 > メディアタイプ に移動します。
  2. メディアタイプの作成 をクリックします。

メディアタイプ タブには、このメディアタイプ固有のさまざまな属性が含まれています:

必須入力フィールドには赤いアスタリスクが付いています。

以下のパラメータは webhook メディアタイプ固有のものです:

Parameter Description
Parameters webhook 変数を属性と値のペアとして指定します。
事前設定済みの webhook では、サービスに応じてパラメータ一覧が異なります。パラメータの説明については webhook の Readme.md ファイルを確認してください。
新規 webhook では、いくつかの共通変数がデフォルトで含まれています(URL:<empty>, HTTPProxy:<empty>, To:{ALERT.SENDTO}, Subject:{ALERT.SUBJECT}, Message:{ALERT.MESSAGE})。必要に応じてそのまま残すことも削除することもできます。

Webhook パラメータは user macros、障害通知でサポートされるすべての macros に加えて、{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE} マクロをサポートします。

HTTP プロキシを指定する場合、このフィールドはアイテム設定の HTTP proxy フィールドと同じ機能をサポートします。プロキシ文字列の先頭に [scheme]:// を付けて、使用するプロキシの種類を指定できます(例: https, socks4, socks5。詳細は documentation を参照してください)。
Script パラメータ欄またはその横の鉛筆アイコンをクリックすると開くモーダルエディタに、JavaScript コードを入力します。このコードが webhook の処理を実行します。
スクリプトは、パラメータと値のペアを受け取る関数コードです。値は JSON.parse() メソッドを使用して JSON オブジェクトに変換する必要があります。例: var params = JSON.parse(value);

コードはすべてのパラメータにアクセスでき、HTTP GET、POST、PUT、DELETE リクエストを実行できます。また、CONNECT、PATCH、HEAD、OPTIONS、TRACE などの追加メソッドもサポートし、HTTP ヘッダーとリクエスト本文を制御できます。
スクリプトには return 演算子が必須です。ない場合、スクリプトは有効になりません。OK ステータスに加えて、任意のタグとタグ値の一覧を返すことも、エラー文字列を返すこともできます(タグの処理 オプションを参照)。

スクリプトはアラート作成後にのみ実行されることに注意してください。スクリプトがタグを返して処理するように設定されている場合でも、初回の障害メッセージおよび復旧メッセージ内の {EVENT.TAGS} と {EVENT.RECOVERY.TAGS} マクロでは、これらのタグは解決されません。これは、スクリプトが実行される前にメッセージが生成されるためです。
: 各スクリプトが独自のデータで動作し、同時呼び出し間の競合を避けるため、グローバル変数(例: global = 1)ではなくローカル変数(例: var local = 1)を使用することを推奨します(既知の問題 を参照)。

関連情報: Webhook development guidelinesWebhook script examplesAdditional JavaScript objects
Timeout JavaScript 実行タイムアウト(1-60秒、デフォルト 30秒)。
時間の接尾辞をサポートします。例: 30s, 1m。
Process tags チェックボックスをオンにすると、返された JSON プロパティ値をタグとして処理します。これらのタグは既存の障害タグに追加されます。
webhook tags を使用する場合、webhook は少なくとも空の tags オブジェクトを含む JSON オブジェクトを返す必要があります: var result = {tags: {}};
返却可能なタグの例: jira-id:prod-1234, responsible:John Smith, processed:<no value>
Include event menu entry チェックボックスをオンにすると、作成された外部チケットへのリンクを含む event menu の項目を追加します。
この項目は、有効でこのチェックボックスがオンになっている各 webhook について追加されます。Menu entry nameMenu entry URL パラメータに {EVENT.TAGS.<tag name>} マクロが含まれている場合、これらのマクロが解決できる場合にのみ項目が追加されます(つまり、そのイベントにこれらのタグが定義されている場合です)。
オンにした場合、この webhook は異なるユーザーへの通知送信には使用しないでください(代わりに 専用ユーザー の作成を検討してください)。また、1つの障害イベントに対する複数のアラートアクションで使用しないでください(アラートアクションの設定 を参照)。
Menu entry name メニュー項目名を指定します。
{EVENT.TAGS.<tag name>} マクロをサポートします。
このフィールドは、Include event menu entry がオンの場合にのみ必須です。
Menu entry URL メニュー項目の基になる URL を指定します。
{EVENT.TAGS.<tag name>} マクロをサポートします。
このフィールドは、Include event menu entry がオンの場合にのみ必須です。

デフォルトメッセージとアラート処理オプションの設定方法については、共通のメディアタイプパラメータ を参照してください。

webhook がデフォルトメッセージを使用しない場合でも、この webhook で使用される操作タイプのメッセージテンプレートは定義しておく必要があります。

テスト

設定済みのWebhookメディアタイプをテストするには:

  1. メディアタイプの一覧から該当するWebhookを探します。
  2. 一覧の最終列にあるテストをクリックします(テスト用ウィンドウが開きます)。
  3. 必要に応じてWebhookパラメータの値を編集します。 マクロを例示値に置き換えてください。そうしないとマクロが解決されず、テストが失敗します。
  4. テストをクリックします。

テストウィンドウで値を置き換えたり削除したりしても、テスト手順のみに影響し、実際のWebhook属性値は変更されません。

テストウィンドウを閉じずにメディアタイプのテストログエントリを表示するには、ログを開くをクリックします(新しいポップアップウィンドウが開きます)。

Webhookテストが成功した場合:

  • "Media type test successful." メッセージが表示されます。
  • サーバーのレスポンスがグレーの Response フィールドに表示されます。
  • レスポンスタイプ(JSONまたはString)が Response フィールドの下に表示されます。

Webhookテストが失敗した場合:

  • "メディアタイプのテストに失敗しました。" というメッセージが表示され、続いて追加の失敗の詳細が表示されます。

ユーザーメディア

メディアタイプの設定が完了したら、Users > Users セクションに移動し、既存のユーザーに webhook メディアを割り当てるか、webhook を表す新しいユーザーを作成します。 既存ユーザーに対するユーザーメディアの設定手順は、すべてのメディアタイプで共通であり、メディアタイプ ページで説明されています。

webhook がタグを使用してチケット\メッセージIDを保存する場合、同じ webhook を異なるユーザーにメディアとして割り当てることは避けてください。そうしないと webhook エラーが発生する可能性があります(これは Include event menu entry オプションを利用する大半の webhook に当てはまります)。 この場合のベストプラクティスは、webhook を表す専用ユーザーを作成することです。

  1. webhook メディアタイプを設定した後、Users > Users セクションに移動し、webhook を表す専用のZabbixユーザーを作成します。たとえば、Slack webhook の場合はユーザー名を Slack にします。 メディア以外のすべての設定はデフォルトのままで構いません。このユーザーは Zabbix にログインしないためです。
  2. ユーザープロファイルで Media タブに移動し、必要な連絡先情報を指定して webhook を追加 します。 webhook が Send to フィールドを使用しない場合は、検証要件を回避するため、サポートされている文字の任意の組み合わせを入力してください。
  3. このユーザーに対して、アラートを送信する必要があるすべてのホストに少なくとも読み取り権限を付与します。

アラートアクションを設定する際は、Operation details の Send to users フィールドにこのユーザーを追加してください。これにより、Zabbix はこのアクションからの通知に webhook を使用します。

アラートアクションの設定

アクションは、どの通知をウェブフック経由で送信するかを決定します。 ウェブフックを含むアクションの設定手順は、以下の例外を除き、他のすべてのメディアタイプと同じです。

  • ウェブフックがチケットやメッセージIDの保存や更新・解決操作の処理にウェブフックタグを使用する場合、1つの問題イベントに対して同じウェブフックを複数のアラートアクションで使用しないでください。 {EVENT.TAGS.<tag name>}が存在し、ウェブフック内で更新された場合、その結果の値は未定義になります。 これを回避するには、更新された値を保存するためにウェブフックで新しいタグ名を使用してください。 これは、Zabbixが提供するJira、Jira Service Desk、Mattermost、Opsgenie、OTRS、Redmine、ServiceNow、Slack、Zammad、Zendeskのウェブフックおよびイベントメニューエントリを含めるオプションを利用するほとんどのウェブフックに該当します。 ただし、同じアクションの複数の操作やエスカレーションステップ、または異なる条件により同じ問題イベントでトリガーされない異なるアクションで、1つのウェブフックを使用することは可能です。
  • 内部イベント用のアクションでウェブフックを使用する場合、カスタムメッセージのチェックボックスを必ずマークし、アクション操作の設定でカスタムメッセージを定義してください。 そうしないと、通知は送信されません。