Download PDF
Download page 定義済みのテンプレート変数.
定義済みのテンプレート変数
このページでは、HTTP リクエストテンプレートまたはメールテンプレートで使用できる定義済みの変数について説明します。トリガーイベントのコンテキストにおける変数の値は、実際のリクエストまたはメールを送信する際にポリシーエンジンによって置換されます。
変数名の形成
事前定義された変数名を形成するには、変数のベース名を対応する情報クラスのフィールドに結合します。ベース名は、対応する情報クラスのみとともに使用できます。たとえば、ベース名 action は情報クラス ActionInfo only
とともに使用できます。
情報クラスに関連付けられているフィールドがない場合、ベース名を変数として使用します。たとえば、コントローラ URL をテンプレートで変数として使用するには、${controllerUrl}
を使用します。
情報クラスに複数のフィールドが含まれる場合、1つのフィールドを選択してベース名と関連付けます。情報クラスと関連付けられているフィールドの一覧については、『 Info Class Fields』を参照してください。
次に例を示します。
- アカウント名をテンプレートで変数として使用するには、ベース名「
account
」をEntityInfo
クラスの [name
] フィールドと組み合わせて、変数${account.name}
を形成します。 - アクションのトリガー時刻を変数として使用するには、ベース名「
action
」をActionInfo
クラスの [triggerTime
] フィールドと組み合わせて、変数${action.triggerTime}
を形成します。
変数名のセグメントを連結できます。この場合、情報クラスのフィールドタイプがさらに別の情報クラスになります。
例えば、最近のトリガーイベントが発生したアプリケーションの名前を使用するには、次のようにします。
- latestEvent
EventInfo
クラスのapplication
フィールドと組み合わせます。 application
フィールドのフィールドタイプはEntityInfo
であり、これはさらに別の情報クラスであるため、EntityInfo
クラスの name フィールドを選択します。次のように、セグメントを末尾に追加して変数名を形成します。
{ <base name>.<field name of info class1>.<field name of info class2>}
${latestEvent.application.name}.
ベース名
この表では、定義済み変数に対するベース名と、対応する情報クラスについて説明しています。
ベース名 | 説明 | 情報クラス |
---|---|---|
account | アクションがトリガーされたアカウント | EntityInfo |
policy | アクションをトリガーしたポリシー | PolicyInfo |
action | トリガーされたアクション | ActionInfo |
topSeverity | INFO 、WARN 、または ERROR. | NotificationSeverity |
topSeverityImage | 重大度の画像またはアイコン | ImageInfo |
notificationConfigText | メールアクションのみ | String |
controllerUrl | コントローラの URL | String |
appDynamicsIcon | - | ImageInfo |
appDynamicsLogo | - | ImageInfo |
latestEvent | 最新のトリガーイベント | EventInfo |
fullEventList | アクションをトリガーしたイベントのリスト | List<EventInfo> |
fullEventsByTypeMap | アクションをトリガーしたイベントのリスト(タイプ別にグループ化) | Map<String, List<EventInfo>> |
clampLimit | 表示されるトリガーイベントの数を制限(オプション設定) | int |
clamped | クランプの制限が設定されている場合は True | boolean |
clampedEventList | クランプされる場合の最近 n 件のトリガーイベント | List<EventInfo> |
clampedEventsByTypeMap | クランプされる場合の最近 n 件のトリガーイベント(タイプ別にグループ化) | Map<String, List<EventInfo>> |
| メールおよび HTTP テンプレートで使用されるノードレベルの変数 | Map<EventInfo, NodeTemplateVariables> |
情報クラスフィールド
前の「ベース名」表から、適切なクラス内のフィールドを使用して、テンプレートで使用する変数を形成します。
class EventInfo {
EventType eventType
long id
String guid
String eventTypeKey
Date eventTime
String displayName
String summaryMessage
String eventMessage
EntityInfo application
EntityInfo tier
EntityInfo node
EntityInfo db
List<EntityInfo> affectedEntities
boolean healthRuleEvent
EntityInfo anomaly // * Only defined in case of anomaly event
EntityInfo healthRule // * Only defined when healthRuleEvent == true
EntityInfo incident // * Only defined when healthRuleEvent == true
boolean healthRuleViolationEvent
NotificationSeverity severity
ImageInfo severityImage
boolean btPerformanceEvent // * true when eventType matches one of the BT performance event types
String deepLink
}
class ImageInfo {
String name
String fileName
String mimeContentRef
String deepLink
}
class EntityInfo {
EntityType entityType
String entityTypeDisplayName
long id
String name
}
class ActionInfo extends EntityInfo {
Date triggerTime
}
class PolicyInfo extends EntityInfo {
boolean digest
digestDurationInMins
}
class PolicyInfo {
EntityType entityType
String entityTypeDisplayName
long id
String name
boolean digest
int digestDurationInMins
}
class ActionInfo {
EntityType entityType
String entityTypeDisplayName
long id
String name
Date triggerTime
}
enum NotificationSeverity { INFO, WARN, ERROR }
class NodeTemplateVariables {
private long id;
private String name;
private long tierId;
private String tierName;
private long machineId;
private String machineName;
private boolean machineAgentPresent;
private String machineAgentVersion;
private boolean appAgentPresent;
private String appAgentVersion;
private String ipAddresses;
private AgentType agentType;
}
private String ipAddresses
フィールドには、IP アドレスではなくホスト名が含まれます。
例
最新のトリガーイベントに対する HTTP リクエストの例
http://myController:8080/controller/rest/applications/${latestEvent.application.name}/nodes/${latestEvent.node.name}
トリガーイベントのリストを反復処理する HTTP リクエストの例
#foreach(${event} in ${fullEventList})
http://myController:8080/controller/rest/applications/${event.application.name}/nodes/${event.node.name}
#end
件名が動的に変わるメールの例
アプリケーションをモニタリングする複数の正常性ルールがあり、すべての正常性ルールについて 1 つのポリシーでメール通知を送信する場合、正しい情報を通知から検索するのが難しいことがあります。通知をトリガーしたイベントに基づいてメールの件名が動的に更新されるよう、変数を定義することができます。
必ず、メール本文で件名の変数を定義し、件名フィールドにそれを含めてください。
Subject: $subject
Body:
...
<!-- Subject changes dynamically based on the triggering event -->
#foreach(${events} in ${fullEventList})
#set($subject = ${events.eventType.toString()}) #end
...
メールの HTML 本文の例
AppDynamics はこのメールテンプレートを使用して、アプリケーションで発生したイベントの詳細を通知します。イベントタイプを有効にすることで、通知が必要なイベントの詳細をカスタマイズできます。
<!-- Default AppDynamics email template -->
#if( $!{notificationConfigText} != '' )
$!{notificationConfigText}
#else
AppDynamics
#end
Event Notification for the "${latestEvent.application.name}" Application
Event Notification Name: ${policy.name}
Event Notification Severity: ${topSeverity}
Summary of events occurring during the ${policy.digestDurationInMins}+ minute(s) prior to ${action.triggerTime}:
## Summary table
|| Event Type | Count ||
## Copy this row for each event type and count
#foreach($eventTypeEntry in $fullEventsByTypeMap.entrySet())
|| ${eventTypeEntry.getKey()} | ${eventTypeEntry.getValue().size()} ||
#end
## Full List of Events
The following events occurred during the time frame:
#if ($clamped)
Warning: The event list has been clamped at ${clampLimit} results! Please see the event and/or request snapshot viewers for the full list of events.
#end
|| Event Time | Event Type | Severity | Tier | Node | Summary ||
#foreach($eventList in $clampedEventsByTypeMap.values())
#foreach($event in $eventList)
|| ${event.eventTime} | ${event.displayName} | ${event.severity} | $!{event.db.name} | $!{event.tier.name} | $!{event.node.name} | ${event.summaryMessage} ||
#end
#end
Event Notification from AppDynamics.
This is an auto-generated email summarizing events on the "${latestEvent.application.name}" application. You are receiving this because you are configured as a recipient on the "${policy.name}" event notification. This is not necessarily an exhaustive list of all events during this time frame. Only those event types enabled in the notification will appear in this message.
反復処理を使用してイベントの詳細を抽出する例
次の例では、eventList
を反復処理して、指定された期間中に発生した各イベントの詳細を抽出します。
<h1>Summary of events occurring during the ${policy.digestDurationInMins}+ minute(s) prior to ${action.triggerTime}:</h1>
<table>
#foreach(${eventList} in ${fullEventsByTypeMap.values()})
#foreach(${event} in ${eventList})
<tr>
<td>
<!-- Event icon -->
<img src="${event.severityImage.mimeContentRef}" alt="${event.severity}"/>
</td>
<td>
<!-- Event name with event link -->
<a href="${event.deepLink}">${event.displayName}</a>
</td>
<td>
<!-- Event message -->
${event.eventMessage}
</td>
</tr>
#end
#end
</table>
すべての変数を一覧表示するコードの例
<h1>variables below </h1>
${fullEventsNodeMap}
<h2>map elements below</h2>
#foreach(${value} in ${fullEventsNodeMap.values()})
${value}
${value.name}
#end
これらの定義済み変数ではすべてのニーズを満たせない場合、独自のカスタム変数を定義し、[Create Template] ペインでこれらのテンプレートに使用することができます。