Webhook アラート・チャネル

Webhook を使用したアラート通知の送信方法について学びましょう。

Webhook を使用してアラート通知を送信するには、汎用 Webhook アラートチャネルを作成してください。

Webhookアラートチャネルの作成

汎用的なWebhookアラートチャネルを作成するには、 Instana のUIで、 [設定] > [グローバル設定 ] > [イベントとアラート ] > [アラートチャネル ] > [アラートチャネルを追加] の順にクリックします。

図 1. 汎用 Webhook アラート・チャネル
汎用 Webhook アラート・チャネル

Webhook URL の形式は protocol://domainOrIPAddress:port/path

アラートの例

設定されたURL( HTTP または HTTPS )に対して、以下の WebhookPOST イベントが HTTP として受信されます:

注: 以下の例では、 Instana Webhook という形式を使用しています。 Instana Webhook 形式は、Incoming Webhook 形式想定しているサードパーティ製ツールとは互換性がありません。 サード・パーティー・ツールに接続するために、カスタム・アダプターまたは If This Then That を使用することができます。

未解決の問題やインシデントについて

{
  "issue": {
    "id": "53650436-8e35-49a3-a610-56b442ae7620",
    "type": "issue",
    "state": "OPEN",
    "start": 1460537793322,
    "severity": 5,
    "text": "Garbage Collection Activity High (11%)",
    "suggestion": "Tune your Garbage Collector, reduce allocation rate through code changes",
    "link": "https://XXXXXXX/#/?snapshotId=rjhkZXdNzegliVVEswMScGNn0YY",
    "zone": "prod",
    "fqdn": "host1.demo.com",
    "entity": "jvm",
    "entityLabel": "Test jvm",
    "tags": "production, documents, elasticsearch",
    "container": "test-container"
  }
}
 

重大な問題や事案について

{
  "issue": {
    "id": "53650436-8e35-49a3-a610-56b442ae7620",
    "type": "issue",
    "state": "CLOSED",
    "start": 1460537793322,
    "end": 1460538393322,
    "severity": 5,
    "text": "Garbage Collection Activity High (11%)",
    "suggestion": "Tune your Garbage Collector, reduce allocation rate through code changes",
    "link": "https://XXXXXXX/#/?snapshotId=rjhkZXdNzegliVVEswMScGNn0YY",
    "zone": "prod",
    "fqdn": "host1.demo.com",
    "entity": "jvm",
    "entityLabel": "Test jvm",
    "tags": "production, documents, elasticsearch",
    "container": "test-container"
  }
}
 

変更イベントについて

{
    "issue": {
        "id": "G9KRvijARFw6vffuygCvl_Fyg",
        "type": "change",
        "start": 1743798954000,
        "text": "Change detected",
        "description": "The value has changed from X to Y.\n",
        "link": "https://X/#/events;eventId=G9KRvijARFw6vffuygCvl_Fyg?&snapshotId=mTraati8sdfl0H5qrEagmIRIBYoM4",
        "end": 1743798954000,
        "zone": "prod",
        "fqdn": "something.com",
        "entity": "Kubernetes Pod",
        "entityLabel": "Test",
        "tags": "docs",
        "container": "b-container"
        }
    }
}
 

オフラインおよびオンラインのイベント

{
  "issue": {
    "id": "53650436-8e35-49a3-a610-56b442ae7620",
    "type": "presence",
    "start": 1460537793322,
    "text": "online",
    "description": "Java virtual machine on Host host1.demo.com",
    "link": "https://XXXXXXX/#/?snapshotId=rjhkZXdNzegliVVEswMScGNn0YY",
    "zone": "prod",
    "fqdn": "host1.demo.com",
    "entity": "jvm",
    "entityLabel": "Test jvm",
    "tags": "production, documents, elasticsearch",
    "container": "test-container"
  }
}
 

エージェントによるイベントの監視について

{
    "issue": {
        "id": "ah7cCh99TjGqnZJ4UL-uZHA",
        "type": "monitoringIssue",
        "state": "OPEN",
        "start": 1743798151988,
        "severity": 5,
        "text": "Monitoring issue: nodejs_collector_not_installed",
        "suggestion": "Our Agent observed a problem with monitoring the linked process.",
        "link": "https://XX/#/events;eventId=ah7cCh99TjGqnZJ4UL-uZHA?&snapshotId=UhgAKBptVGeu04DsagNGU",
        "zone": "ava",
        "fqdn": "cool.fyre.ibm.com",
        "entity": "Process",
        "entityLabel": "node  (7532267)",
        "tags": "proc",
        "container": "c-container"
    }
}
 

OAuth 2.0 承認

OAuth 2.0 による認証が必要なサービスと Webhook の配信を連携させるには、 Instana 内で Webhook アラートチャネル用の OAuth プロファイルを設定できます。 Webhookチャネルが OAuth を有効にして設定されると、 Instana はアクセストークンのライフサイクルを自動的に管理します。具体的には、トークンの取得や更新処理を行い、送信リクエストに対してBearerトークンとしてトークンを安全に付加します。

OAuth の構成

Webhookチャネル用に OAuth を設定するには、以下の手順を実行してください:

  1. Go Instana のUIで、 「設定 」>「 グローバル設定 」> 「イベントとアラート 」>「 アラートチャネル 」> 「アラートチャネルを追加」 の順に進みます。
  2. Webhookチャネルで OAuth のサポートを有効にするには、 「 OAuth を有効にする」 を「 オン」 に設定してください。
  3. OAuth の認証情報を入力してください:
    • クライアントID: 認証サーバーによって発行される、アプリケーションの公開識別子。
    • クライアントシークレット: アプリケーションと認証サーバーのみが知る機密鍵。
    • アクセス トークン URL : アプリケーションがクライアント認証情報をアクセス トークンと交換するためにリクエストを送信するエンドポイント。
    • 受信者(任意): アクセストークンの宛先を指定します。通常はリソースサーバーの識別子(例: API エンドポイント)です。 特定のリソースに対するトークンの有効性を確認するために、一部の OAuth フローで使用されます。
    • 適用範囲(オプション): クライアントが要求する権限またはアクセスレベルを定義します(例:「読み取り」、「書き込み」)。

HTTP 要求ヘッダー

カスタム HTTP 要求ヘッダーの指定

一部の Webhook 連携機能では、このセクションで追加できるヘッダーの指定が必要となります。 例えば、AWS API Gateway 用の API トークンの追加などです。

Webhook URL 基本認証

HTTPAuthorization リクエストヘッダーを手動で指定する代わりに、Webhook( URL )経由で HTTP の基本認証を使用することもできます。 ホスト名の先 password 頭に および を username 付加する(例: https://username:password@webhookurl.com )、認証情報は自動的に Base64-encoded として取得され、以下の HTTP ヘッダー値として提供されます:

Authorization: Basic <base64 encoded credentials>
 

JSONata によるペイロードの変換

API を使用して Webhook アラートチャネルを作成する際、JSONata 式を使用して Webhook のペイロードを変換することができます。 この機能は現在、 API の設定を通じてのみ利用可能であり、 Instana のUIからは利用できません。 これにより、Webhookのペイロード構造をカスタマイズして、サードパーティ製システムとの連携を強化することができます。

制限事項とベストプラクティス

変換式はアラートチャネルレベルでグローバルに適用され、そのチャネルを通じて送信されるすべてのアラートに影響します。 以下の指針を検討します。

  • アラートごとの変換 :アラートごとに異なる変換が必要な場合は、複数のWebhookアラートチャネルを作成し、それぞれに独自の変換式を設定してください。
  • エラー処理 :無効なJSONata式により、アラートの配信に失敗する可能性があります。 設定を作成する前に「 テストチャンネル 」ボタンを使用し、式が有効であることを確認するとともに、NULL値や欠損値が想定される場合に適切に対処してください。

JSONata は、JSON データに対して照会と変換を行うための軽量の言語です。 JSONataの構文に関する詳細については、 JSONataのドキュメントを参照してください。

ペイロード変換機能付きのWebhookの作成

変換機能付きのWebhookアラートチャネルを作成するには、エンド POST /api/events/settings/alertingChannels ポイントへの API リクエストにオプションの transformationExpression フィールドを含めてください。 この transformationExpression フィールドは、次の例に示すように、JSONataの構文に従う必要があります。 API の詳細については、 Instana OpenAPI specification をご覧ください。

{
    "transformationExpression": "{\"issue\": $merge([issue, {\"metricNames\": issue.text}])}",
    "headers": [],
    "rbacTags": [],
    "webhookUrls": [
        "https://webhook.example.com/endpoint"
    ],
    "kind": "WEB_HOOK",
    "name": "Transformed Webhook",
    "oauthEnabled": false
}
 

変換例

例:アラートのタイトルを metricNames にマッピングする

例えば、フィールド metricNames にアラートのタイトル(に保存されている issue.text)を入力するという要件があります:

変換式:

{
  "issue": $merge([issue, {"metricNames": issue.text}])
}
 

変更前:

{
  "issue": {
    "id": "<event-id>",
    "type": "issue",
    "state": "OPEN",
    "start": 1749498047273,
    "severity": 5,
    "text": "<issue-title>",
    "suggestion": "<issue-description>",
    "link": "<issue-link>",
    "entityType": "Host",
    "customZone": "<custom-zone>",
    "availabilityZone": "<availability-zone>",
    "zone": "<zone>",
    "fqdn": "<host-fqdn>",
    "entity": "Host",
    "entityLabel": "<entity-label>",
    "tags": "<tag1>, <tag2>",
    "container": "<container-name>",
    "service": "not available",
    "containerNames": [],
    "metricNames": [
      "cpu.used"
    ],
    "customPayloads": {
      "custom:stringKey": [
        "<string-value>"
      ],
      "custom:stringSetSingleton": [
        "<singleton-value>"
      ],
      "custom:stringSet": [
        "<item-1>",
        "<item-2>",
        "<item-3>",
        "<item-4>",
        "<item-5>"
      ]
    }
  }
}
 

変換後:

{
  "issue": {
    "id": "<event-id>",
    "type": "issue",
    "state": "OPEN",
    "start": 1749498047273,
    "severity": 5,
    "text": "<issue-title>",
    "suggestion": "<issue-description>",
    "link": "<issue-link>",
    "entityType": "Host",
    "customZone": "<custom-zone>",
    "availabilityZone": "<availability-zone>",
    "zone": "<zone>",
    "fqdn": "<host-fqdn>",
    "entity": "Host",
    "entityLabel": "<entity-label>",
    "tags": "<tag1>, <tag2>",
    "container": "<container-name>",
    "service": "not available",
    "containerNames": [],
    "metricNames": "<issue-title>",
    "customPayloads": {
      "custom:stringKey": [
        "<string-value>"
      ],
      "custom:stringSetSingleton": [
        "<singleton-value>"
      ],
      "custom:stringSet": [
        "<item-1>",
        "<item-2>",
        "<item-3>",
        "<item-4>",
        "<item-5>"
      ]
    }
  }
}
 

FAQ

Instana のバックエンドが、 TCP / TLS への接続を確立できるようにするにはどうすればよいですか?

Instana のバックエンドは、 AWS および Google Cloud のサーバーからリクエストを送信しています。 そのため、JavaScript ファイルとソース・マップ・ファイルがインターネットから一般的にアクセス可能であることが重要です。 また、バックエンドで TLS の設定が正しく機能しており、 完全な証明書チェーンが構成されていることを確認してください。 SSL Labs/Qualysが提供する無料の「 SSL 」テストを利用するか、以下のコマンドを実行することで、 TLS に関する問題の有無を確認できます:

openssl s_client -showcerts -connect {{YOUR_DOMAIN_HERE}}:443