カスタムイベント通知テンプレート¶
テンプレート構文を使用して、イベント通知の内容をカスタマイズできます。
- 動的レンダリング:
{{ フィールド名 }}を使用してアラートフィールド(例:{{ host }}、{{ df_status }})を直接挿入します。 - データ処理:
{{ 変数 | 関数() }}を使用してデータをフォーマットします(例: タイムスタンプを日付に変換、数値をパーセンテージに変換)。 - 条件分岐:
{% if ... %}を使用して、ステータスに応じて異なる通知を実現します。 - リアルタイムクエリ: DQL("クエリ文")を埋め込んで関連データ(例: ホスト IP、アプリケーション情報)を取得します。
テンプレートの検証とプレビュー¶
モニターのイベント内容、データ欠落イベント内容、およびインテリジェントモニターのイベント内容は構文検証に対応しています。編集後に入力欄の外へフォーカスを移動するか、モニターを保存すると、システムがテンプレートをチェックして構文の問題を指摘します。
構文チェックが完了したら、イベント内容エディターのプレビューボタンをクリックし、必要に応じて変数のテスト値を入力してから、プレビューをクリックしてレンダリング結果を確認します。通常のモニターでは現在のタイトルと内容を同時にプレビューし、インテリジェントモニターではイベント内容をプレビューします。df_status などの変数のテスト値を切り替えて、異常、復旧などの条件分岐を確認できます。
プレビューはテンプレートの効果を確認するためのもので、実際のアラートはイベント発生時のデータに基づきます。テンプレートに組み込み DQL が含まれる場合、プレビューは現在のワークスペースの関連データを読み取ります。
基本テンプレート変数¶
テンプレート変数の基本構文は {{ フィールド名 }} で、イベント関連の動的な情報をレンダリングするために使用できます。以下は一般的なテンプレート変数とその用途です。
| テンプレート変数 | 型 | 説明 |
|---|---|---|
date、timestamp |
Integer | イベント発生時刻。単位は秒 |
df_date_range |
Integer | 時間範囲。単位は秒 |
df_check_range_start |
Integer | 検出範囲の開始時刻。Unix タイムスタンプ、単位は秒 |
df_check_range_end |
Integer | 検出範囲の終了時刻。Unix タイムスタンプ、単位は秒 |
df_status |
String(Enum) | イベントステータス。取り得る値:criticalerrorwarningoknodata |
df_event_id |
String | イベントの一意の ID |
df_event_link |
String | イベント詳細ページのリンク URL |
df_dimension_tags |
String | イベントディメンション。検出対象を識別するために使用します 例: {"host":"web-001"} |
df_monitor_id |
String | アラートポリシー ID |
df_monitor_name |
String | アラートポリシー名 |
df_monitor_checker_id |
String | モニター ID |
df_monitor_checker_name |
String | モニター名 |
df_monitor_checker_value |
String | 検出値、つまりモニターによって検出された値 ❗️互換性を保証するため、検出値は String 型に強制変換されます |
df_monitor_checker_event_ref |
String | モニターイベントの関連付け。 モニター ID とイベントの df_dimension_tags に基づいて算出されます |
df_fault_id |
String | 今回の障害 ID。最初の障害イベントの df_event_id を値とします |
df_fault_status |
String(Enum) | 今回の障害ステータス。df_status の冗長フィールドです。取り得る値:okfault |
df_fault_start_time |
Integer | 今回の障害の発生時刻。Unix タイムスタンプ、単位は秒 |
df_fault_duration |
Integer | 今回の障害の継続時間。単位は秒 |
df_user_id |
String | 手動復旧時の操作ユーザー ID |
df_user_name |
String | 手動復旧時の操作ユーザー名 |
df_user_email |
String | 手動復旧時の操作ユーザーのメールアドレス |
df_crontab_exec_mode |
String(Enum) | モニターの実行モード。取り得る値:crontabmanual |
df_site_name |
String | 現在のGuanceノード名 |
df_workspace_name |
String | 所属ワークスペース名 |
df_workspace_uuid |
String | 所属ワークスペース ID |
df_label |
List | モニターのタグリスト |
df_check_condition |
Dict | 満たされた検出条件 |
df_check_detail |
Dict | 急変検出に適用され、急変値と元の値の比較を示します。次の 3 つのフィールドを含みます:change_value)comparison_value)detection_value) |
df_check_condition.operator |
String | 検出条件を満たす演算子。例: >、>= など |
df_check_condition.operands |
List | 検出条件を満たすオペランドのリスト。 通常は 1 つのオペランドですが、 between などの演算子は 2 つのオペランドを持ちます |
df_check_condition.operands[#] |
Integer, Float | 検出条件を満たすオペランド |
Result |
Integer, Float | 検出された値。df_monitor_checker_value と同じく検出時に生成される値ですが、フィールド型は検出時の元の型のままで、String への強制変換は行われません |
df_dimension_tags 内の各フィールド |
String | df_dimension_tags 内の各フィールドが抽出されます |
df_event |
Dict | 完全なイベントデータ |
df_studio_env_name |
現在の環境名 | |
df_studio_console_base_url |
現在の環境のコンソール URL | |
df_studio_monitor_base_link |
現在の環境のモニター URL |
テンプレート変数の例¶
モニターの by に region と host が設定されており、イベント内容のテンプレートが次のとおりであるとします。
イベント名:
イベント内容:
- リージョン:{{ region }}
- ホスト:{{ host }}
- レベル:{{ df_status }}
- 検出値:{{ Result }}
- モニター:{{ df_monitor_checker_name }}(アラートポリシー:{{ df_monitor_name }})
このとき、error イベントが発生すると、レンダリング後のイベント出力は次のようになります。
出力イベント名:
出力イベント内容:
特殊なシナリオの変数¶
ユーザーアクセスメトリクス検出¶
ユーザーアクセスメトリクス検出では、上記の一般的なテンプレート変数に加えて、次のテンプレート変数もサポートされています。
| テンプレート変数 | 型 | 説明 |
|---|---|---|
app_id |
String | アプリケーション ID |
app_name |
String | アプリケーション名 |
app_type |
String | アプリケーションタイプ |
特殊文字を含むフィールドの処理¶
検出設定の ディメンション フィールドに特殊文字(例: -、@)が含まれる場合(例: host-name、@level)、通常の変数名として直接使用できず、テンプレートのレンダリングが失敗します。
解決策として、次の形式で参照します。
{{ host-name }}の代わりに{{ df_event['host-name'] }}を使用します{{ @level }}の代わりに{{ df_event['@level'] }}を使用します
テンプレート関数¶
イベント内のフィールド値を直接表示するだけでなく、テンプレート関数を使用してフィールド値をさらに処理し、出力を最適化できます。
基本構文は次のとおりです。
具体的な例は次のとおりです。
テンプレート関数にパラメーターを渡す必要がある場合、構文は次のとおりです。
Warning
テンプレート関数を使用する前にテンプレート変数を演算する必要がある場合は、括弧を追加することを忘れないでください。例:
利用可能なテンプレート関数の一覧は次のとおりです。
| テンプレート関数 | パラメーター | 説明 |
|---|---|---|
to_datetime |
タイムゾーン | タイムスタンプを日付に変換します(デフォルトのタイムゾーンは Asia/Shanghai)例: {{ date | to_datetime }}出力: 2022-01-01 01:23:45 |
to_date_range_human |
df_fault_duration を読みやすい形式に変換します例: {{ df_fault_duration | to_date_range_human }}出力: X日 Y時間 Z分 W秒 |
|
to_status_human |
df_status を読みやすい形式に変換します例: {{ df_status | to_status_human }}出力: 緊急 |
|
to_fixed |
小数桁数 | 数字を固定小数桁数で出力します(デフォルトは小数 0 桁) 例: {{ Result | to_fixed(3) }}出力: 1.230 |
to_round |
小数桁数 | 数字を四捨五入します(デフォルトは小数 0 桁) 例: {{ Result | to_round(2) }}出力: 1.24 |
to_percent |
小数桁数 | 小数をパーセンテージで出力します(デフォルトは小数 0 桁) 例: {{ Result | to_percent(1) }}出力: 12.3% |
to_pretty_tags |
タグを見やすく出力します 例: {{ df_dimension_tags | to_pretty_tags }}出力: region:hanghzou, host:web-001 |
|
limit_lines |
行数を制限します | |
limit_chars / limit_text |
文字数を制限します | |
type_name |
データ型の名前を出力します 例: {{ data | type_name }}出力: dict |
|
to_int |
整数に変換します 例: {{ data | to_int }}<br>出力:1`` |
|
to_float |
浮動小数点数に変換します 例: {{ data | to_float }}出力: 1.234 |
|
to_str |
文字列に変換します 例: {{ data | to_str }}出力: 1.234 |
|
to_json_dumps |
JSON シリアライズされた文字列に変換します 例: {{ data | to_json_dumps }}出力: {"key1":"value1","key2":"value2"} |
|
length |
データの長さを取得します 例: {{ data | length }}出力: 10 |
テンプレート関数の例¶
詳細については、各テンプレート関数の例 をご覧ください。
モニターの by に region と host が設定されており、アラート設定のテンプレートが次のとおりであるとします。
イベント名:
イベント内容:
- 対象:{{ df_dimension_tags | to_pretty_tags }}
- 時刻:{{ date | to_datetime }}
- レベル:{{ df_status | to_status_human }}
- 検出値:{{ (Result * 100) | to_round(2) }}
このとき、error イベントが発生すると、レンダリング後のイベント出力は次のようになります。
出力イベント名:
出力イベント内容:
テンプレートの分岐¶
テンプレートでは、条件に応じて異なる内容をレンダリングする分岐構文もサポートされています。
テンプレートの分岐の例¶
次の構文を使用して分岐機能を実現できます。
{% if df_status == 'critical' %}
緊急の問題です。すぐに対処してください!
{% elif df_status == 'error' %}
重要な問題です。対処してください
{% elif df_status == 'warning' %}
問題が発生している可能性があります。空いた時間に対処してください
{% elif df_status == 'nodata' %}
データが途切れています。すぐに対処してください!
{% else %}
問題ありません!
{% endif %}
より典型的な例は次のとおりです。
{% if df_status != 'ok' %}
> レベル:{{ df_status }}
> ホスト:{{ host }}
> 内容:Elasticsearch JVM ヒープメモリの使用量は {{ Result }}% です
> 提案:現在、JVM のガベージコレクションが JVM のガベージ生成に追いついていません。業務状況を早めに確認してください
{% else %}
> レベル:{{df_status}}
> ホスト:{{host}}
> 内容:Elasticsearch JVM ヒープメモリのアラートは復旧しました
{% endif %}
組み込み DQL クエリ関数¶
場合によっては、テンプレート変数だけではレンダリングの要件を満たせないことがあります。その場合は、組み込み DQL クエリ関数を使用して追加のデータクエリを実現できます。
組み込み DQL クエリ関数は、このワークスペース内の今回の検出時間範囲で任意の DQL ステートメントを実行できます。通常、クエリで取得した最初のデータは、テンプレート内でテンプレート変数として使用できます。使用方法は次のとおりです。
組み込み DQL クエリの例¶
次の組み込み DQL ステートメントは、host フィールドが "my_server" のデータをクエリし、最初のデータを dql_data 変数に代入します。
{% set dql_data = DQL("O::HOST:(host, host_ip, os, datakit_ver) { host = 'my_server' }") %}
ホスト OS: {{ dql_data.os }}
以降のテンプレートでは、{{ dql_data.os }} を使用してクエリ結果の特定のフィールドを出力できます。
組み込み DQL へのパラメーターの受け渡し¶
DQL ステートメントの実行時にパラメーターの受け渡しが必要になる場合があります。これらのパラメーターは DQL ステートメントに直接埋め込むことができ、by フィルターを追加するかどうかを選択できます。ただし、記述方法が少し異なります。通常、変数を参照する場合は {{df_status}} を使用しますが、DQL ステートメントでは {{ }} を付けずに変数名を直接使用するため、最終的な記述は status になります。
モニターの by に region と host が設定されており、イベント内容のテンプレートが次のとおりであるとします。
{% set dql_data = DQL("O::HOST:(host_ip, os) { region = ?, host = ? }", region, host) %}
ホスト情報:
IP:{{ dql_data.host_ip }}
OS: {{ dql_data.os }}
イベントには、データを識別するための region と host のテンプレート変数のみが含まれ、IP アドレスやオペレーティングシステムなどの追加情報は含まれません。
その場合、組み込み DQL を使用すると、region と host を DQL クエリパラメーターとして対応するデータを取得し、{{ dql_data.host_ip }} などで関連情報を出力できます。
組み込み DQL クエリ関数の詳細¶
組み込み DQL クエリ関数の呼び出し形式は次のとおりです。
- 最初のパラメーターは DQL ステートメントで、パラメータープレースホルダー
?を含めることができます。 - 後続のパラメーターは、DQL ステートメントのパラメーター値または変数です。
パラメータープレースホルダー ? が具体的な値に置き換えられるとき、システムが自動的にエスケープ処理を行います。
変数 host の値が "my_server" であるとすると、組み込み DQL 関数と実行される最終的な DQL ステートメントは次のとおりです。
Warning
- 組み込み DQL クエリはテンプレートの先頭に配置してください。
- クエリ結果名(ここでは
dql_data)は一般的なプログラミング言語の命名要件に従い、任意の英字で始まり、英字、数字、アンダースコアのみを含む文字列にしてください。emoji の使用は推奨されません。 - クエリ結果名は、既存のテンプレート変数やテンプレート関数と同じ名前を付けないでください。同じ名前を付けると予期しない問題が発生する可能性があります。
- DQL でフィールドに関数を使用する場合は、後で使いやすいように
ASでフィールドにエイリアスを付けることをお勧めします(例:O::HOST:( last(host) AS last_host ))。 - DQL のフィールド名に特殊文字が含まれる場合、テンプレート変数と同様に、
{{ dql_data['host-name'] }}、{{ dql_data['@level'] }}を使用してレンダリングしてください。