このページでは、HTTP リクエストアクションで使用できる定義済みの変数について説明します。トリガーイベントのコンテキストにおける変数の値は、実際のリクエストが送信される際に、実行時に置き換えられます。

変数名の形成

定義済みの変数名を形成するには、eventList 配列を、最上位オブジェクトと対応するコンテキストフィールドまたは複数のネストされたコンテキストフィールドと組み合わせます。最上位オブジェクトのみを使用して、情報を取得することもできます。

  • すべての変数は、eventList 配列を介してアクセスされます。
  • eventList 配列には、正常性ルール違反または異常に関する単一のイベントが含まれています。

次に例を示します。

  • 正常性ルール違反イベントの ID を取得するには、${eventList[0].event_id} を使用します
  • 正常性ルールの違反条件の名前を取得するには、${eventList[0].event_details.condition_details[0].name} を使用します
  • 正常性ロールアップの子エンティティタイプの詳細を取得するには、${eventList[0].event_details.rollup_details.child_entities[0].child_entity_type} を使用します
  • 異常の原因となっているメトリックタイプを取得するには、${eventList[0].anomaly_type} を使用します
  • 異常が検出された最上位オブジェクトの概要を取得するには、${eventList[0].rca_result.top_impact_object}
    を使用します

このページにリストされている新しい変数名を使用して、既存のすべての HTTP アクションを更新する必要があります。変数名を更新したら、既存の HTTP アクションを正常性ルールに再度リンクします。このタスクを実行しないと、対応する正常性ルール違反でアクションがトリガーされません。

次の表に、最上位オブジェクトとさまざまなコンテキストフィールドの詳細を示します。

コンテキスト属性

次の表に、最上位オブジェクトと対応する詳細のリストを示します。

最上位オブジェクト

説明フィールド タイプ
entity_id違反が検出されたエンティティを識別します。string
entity_type

違反が検出されたエンティティのタイプを示します。形式は namespace:type です

例:k8s:type

string
event_idイベントを識別します。string
event_typeさまざまな違反タイプの表示名を示します。たとえば、VIOLATION_STARTED_WARNINGVIOLATION_STARTED_CRITICAL です。string

violation_id

違反インシデントを識別します。

string

event_time

違反インシデントのタイムスタンプを示します。タイムスタンプは、日時形式、エポック形式、または有効なカスタム形式で表示できます。

HTTP ペイロードで次の式を使用して、いずれかの形式で event_time を表示します。

フォーマット出力例
日時${eventList[0].event_time}Sep 15 05:16:00 PDT 2023.
エポック$format.epochTime{eventList[0].event_time}1694780160000
yyyy-MM-dd HH:mm:ss などの有効なカスタム形式$format.formattedTime{'yyyy-MM-dd HH:mm:ss', $eventList[0].event_time}2023-09-15 05:16:00
long

violation_start_time

違反インシデントの開始時刻を示します。タイムスタンプは、日時形式、エポック形式、または有効なカスタム形式で表示できます。

HTTP ペイロードで次の式を使用して、いずれかの形式で violation_start_time を表示します。

フォーマット

出力例

日時${eventList[0].violation_start_time}Sep 15 05:16:00 PDT 2023.
エポック$format.epochTime{eventList[0].violation_start_time}1694780160000
yyyy-MM-dd HH:mm:ss などの有効なカスタム形式$format.formattedTime{'yyyy-MM-dd HH:mm:ss', $eventList[0].violation_start_time}2023-09-15 05:16:00
long

violation_end_time

違反インシデントの終了時刻を示します。タイムスタンプは、日時形式、エポック形式、または有効なカスタム形式で表示できます。

HTTP ペイロードで次の式を使用して、いずれかの形式で violation_end_time を表示します。

フォーマット出力例
日時${eventList[0].violation_end_time}Sep 15 05:16:00 PDT 2023.
エポック$format.epochTime{eventList[0].violation_end_time}1694780160000
yyyy-MM-dd HH:mm:ss などの有効なカスタム形式$format.formattedTime{'yyyy-MM-dd HH:mm:ss', $eventList[0].violation_end_time}2023-09-15 05:16:00
long
violation_duration違反インシデントの期間を示します。これは現在時刻とインシデントの開始時刻の差です。long
violation_severity重大または警告などの違反の重大度を示します。string
violation_status違反インシデントがオープンかクローズかを示します。string
violation_type正常性ルールまたは異常検知の MELT イベントのタイプを示します。たとえば、

alerting:healthrule.violationtroubleshooting です。

string

config_id

正常性ルールまたは異常検知構成を識別します。

string

config_name

正常性ルールまたは異常検知構成の表示名を示します。

string
event_details正常性ルールに基づいて違反の詳細を示します。
  • 複雑
  • object event_details
model_sensitivity

異常検知モデルのアラート感度レベルを示します。感度レベルは次のとおりです。

  • TEST
  • 中規模
string
anomaly_type異常の原因となったメトリックタイプを示します。たとえば、1 分あたりのエラー数(EPM)および平均応答時間(ART)です。string
rca_result異常検知アルゴリズムによって実行された根本原因分析の結果を示します。object

entity_context_path

ヘルス ルール違反について、アプリケーションのエンティティ ページへの直接ナビゲーションを提供します。したがって、違反時のエンティティのコンテキストを表示できます。

変数をテナントのベース URL に追加する必要があります。entity_context_path

たとえば、 https://your-appd-cloud-url.com/${eventList[0].entity_context_path}

string


次の表に、rca_result 変数の第 2 レベルのコンテキストフィールドと対応する詳細のリストを示します。

Second Level Context Fields - rca_result

説明フィールド タイプ
top_impact_object

異常が生成された最も影響の大きいオブジェクトの偏差メトリックと要約情報を示します。

object

suspected_object_summaries

根本原因オブジェクトの偏差メトリックと要約情報を示します。

アレイ

list_of_suspected_cause_paths異常の原因と思われる経路を示します。アレイ


次の表に、event_details 変数の第 2 レベルのコンテキストフィールドと対応する詳細のリストを示します。

Second Level Context Fields - event_details

説明

フィールド タイプ

condition_details

正常性ルール違反の詳細を示します。詳細は、メトリック条件についてのみ使用できます。

の配列condition_details

rollup_details

正常性ルール違反のロールアップエンティティの詳細を示します。

複雑

object rollup_details


次の表に、rollup_details 変数の第 3 レベルのコンテキストフィールドと対応する詳細のリストを示します。

Third Level Context Fields - rollup_details

説明フィールド タイプ
child_entities相関インシデントと子エンティティを示します。

の配列rollup_result_details

violation_count違反している子エンティティの数を示します。long


次の表に、condition_details 変数の第 4 レベルのコンテキストフィールドと対応する詳細のリストを示します。

Fourth Level Context Fields - condition_details

説明フィールド タイプ
name

条件の表示名を示します。

string
data_points条件の評価に使用されるデータポイントの数を示します。string
eval_win_size正常性ルールを評価するために使用されるデータが収集される正常性ルール評価タイムフレームを示します。 string
result条件評価のステータスを示します。true(1)、false(0)、または不明(-1)を返します。整数
baseline_meanベースラインと平均値の差を示します。double
baseline_std_devベースラインと標準偏差の差を示します。double
violation_count評価タイムフレーム中の条件違反の数を示します。string
missing_data評価タイムフレーム内の失われたデータポイントの数を示します。string
expressionメトリックのパフォーマンスを評価するために使用される数式を示します。string
expression_value式の左側にある値を示します。string
threshold_value式の右側にある値を示します。string
threshold_typeしきい値のタイプ(静的またはベースライン)を示します。string


次の表に、rollup_result_details 変数の第 4 レベルのコンテキストフィールドと対応する詳細のリストを示します。

Fourth Level Context Fields - rollup_result_details

説明

フィールド タイプ

child_entity_id評価子エンティティを識別します。string
child_entity_type名前空間を持つ評価子エンティティタイプ名を示します。string
correlated_incident_idロールアップルール違反の原因となった子エンティティのインシデント ID を示します。string

Samples

最新のトリガーイベントに対する HTTP リクエストの例:

Slack イベントのサンプル


URL:

Slack アプリで、次の URL のような受信 Webhook を取得します。

https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
CODE


Payload:

{
  "blocks": [
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "*New ${eventList[0].violation_severity} Alert from AppDynamics Cloud:* ${eventList[0].config_name}\n"
      }
    },
    {
      "type": "section",
      "fields": [
        {
          "type": "mrkdwn",
          "text": "*Entity Type:*\n${eventList[0].entity_type}"
        },
        {
          "type": "mrkdwn",
          "text": "*When:*\n${eventList[0].event_time}"
        },
        {
          "type": "mrkdwn",
          "text": "*Entity Id:*\n${eventList[0].entity_id}"
        }
      ]
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "*Violating Conditions*\n"
      }
    },
    #if(${eventList[0].event_details})
	    #foreach( $condition in ${eventList[0].event_details.condition_details} )
	      {
	        "type": "section",
	        "text": {
	          "type": "mrkdwn",
	          "text": "\n${condition.expression}"
	        }           
	      },
	      #end   
    #end
    {
      "type": "actions",
      "elements": [
        {
          "type": "button",
          "text": {
            "type": "plain_text",
            "emoji": true,
            "text": "Check in AppD Cloud"
          },
          "style": "danger",
          "value": "click_me_123",
          "url": "https://your-appd-cloud-url.com${eventList[0].entity_context_path}"
        }
      ]
    },
    {
      "type": "divider"
    }
  ]
}

CODE
  • 変数を取得できない場合は、if 条件内に変数を含めます。if 条件の詳細については、Apache Velocity のドキュメントを参照してください。
  • Slack で受信 Webhook を構成する方法については、Slack のドキュメントを参照してください。

PagerDuty イベント API V2 のサンプル


URL

https://events.pagerduty.com/v2/enqueue
CODE

Payload

{
  "payload": {
    "summary": "${eventList[0].event_type} on ${eventList[0].config_name}",
    "source": "AppDynamics Cloud",
    "severity": "${eventList[0].violation_severity.toLowerCase()}",
    "component": "${eventList[0].entity_type}",
    "custom_details": {
      "Event Name": "${eventList[0].event_type}",
      "Event ID": "${eventList[0].event_id}",
      "Entity Type": "${eventList[0].entity_type}",
      "Event Time": "${eventList[0].event_time}",
      "Entity ID": "${eventList[0].entity_id}"
    }
  },
  "routing_key": "<your integration key>",
  "dedup_key": "${eventList[0].violation_id}",
  "event_action": "trigger",
  "client": "AppDynamics Cloud",
  "client_url": "https://your-appd-cloud-url.com${eventList[0].entity_context_path}"
}
CODE

統合キー(ルーティングキー)は、PagerDuty イベント API V2 統合ページで入手できます。

PagerDuty にイベントを送信する方法については、PagerDuty のドキュメントを参照してください。

ServiceNow イベントのサンプル


URL

https://<instance_name>.service-now.com/api/global/em/jsonv2
CODE

Authentication

基本認証オプションを使用して、ユーザー名とパスワードを入力します。

Payload

{
  "records": [
    {
      "source": "AppDynamics Cloud",
      "event_class": "your-controller",
      "resource": "${eventList[0].entity_id}",
      "node": "${eventList[0].entity_id}",
      "metric_name": "${eventList[0].config_name}",
      "type": "${eventList[0].event_type}",
      "message_key": "${eventList[0].violation_id}",
      "description": "*New ${eventList[0].violation_severity} Alert from AppDynamics Cloud:* ${eventList[0].config_name}. Check https://your-appd-cloud-url.com${eventList[0].entity_context_path}",
      #if( ${eventList[0].violation_severity} == "CRITICAL" )
      "severity": "1"
      #elseif( ${eventList[0].violation_severity} == "WARNING"  )
      "severity": "2"
      #else
      "severity": "0"
      #end   
    }
  ]
}
CODE

ServiceNow にイベントを送信する方法については、ServiceNow のドキュメントを参照してください。

OpsGenie イベントのサンプル


URL

https://api.opsgenie.com/v2/alerts
CODE

Custom Headers

  • キー:認証
  • 値:GenieKey <your_API_key>

Payload

{
  "source": "AppDynamics Cloud",
  "message": "${eventList[0].event_type} on ${eventList[0].config_name}",
  "alias": "${eventList[0].violation_id}",
  "description": "${eventList[0].event_type} on ${eventList[0].config_name}",
  "entity": "${eventList[0].entity_type}:${eventList[0].entity_id}",
  #if( ${eventList[0].violation_severity} == "CRITICAL" )
  "priority": "P1",
  #elseif( ${eventList[0].violation_severity} == "WARNING"  )
  "priority": "P3",
  #else
  "priority": "P5",
  #end
  "details": {
    "Event Name": "${eventList[0].event_type}",
    "Event ID": "${eventList[0].event_id}",
    "Entity Type": "${eventList[0].entity_type}",
    "Event Time": "${eventList[0].event_time}",
    "Entity ID": "${eventList[0].entity_id}",
    "Link": "https://your-appd-cloud-url.com${eventList[0].entity_context_path}"
  }
}
CODE

OpsGenie でアラートを作成する方法については、OpsGenie のドキュメントを参照してください。

Webex

URL

https://webexapis.com/v1/webhooks/incoming/<incoming_webhook_url>
CODE


Payload

{"markdown": "   \n- - -  \n**${eventList[0].violation_severity}** Alert from Cisco CNAO: **${eventList[0].config_name}**   \n- - -  \n**Details**  \n _Event Type:_ ${eventList[0].event_type}  \n_Entity Type:_ ${eventList[0].entity_type}  \n_Entity Id:_ ${eventList[0].entity_id}  \n_Event Time:_ ${eventList[0].event_time}\n**Violation Details** #if(${eventList[0].event_details}) #foreach( $condition in ${eventList[0].event_details.condition_details} ) \n$esc.java(${condition.expression}) #end #end \n_Link:_[Click here](${appdURL}${eventList[0].entity_context_path})\n- - -  \n" }
CODE
  • 変数を取得できない場合は、if 条件内に変数を含めます。if 条件の詳細については、Apache Velocity のドキュメントを参照してください。
  • Webex で着信 Webhook を設定する方法については、Webex のドキュメントを参照してください。