カスタムイベント通知テンプレート¶
テンプレート構文を使用して、イベント通知の内容をカスタマイズできます:
-
動的レンダリング:
{{ フィールド名 }}を使用してアラートフィールドを直接挿入(例:{{ host }}、{{ df_status }}) -
データ処理:
{{ 変数 | 関数() }}を使用してデータをフォーマット(例:タイムスタンプの日付変換、数値のパーセンテージ変換) -
条件分岐:
{% if ... %}を使用して異なるステータスに応じた通知を実現 -
リアルタイムクエリ:DQL("クエリ文")を埋め込んで関連データを取得(例:ホストIP、アプリケーション情報)
基本テンプレート変数¶
テンプレート変数の基本構文は {{ フィールド名 }} で、イベントに関連する動的情報をレンダリングするために使用されます。以下は一般的なテンプレート変数とその用途です:
| テンプレート変数 | 型 | 説明 |
|---|---|---|
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 | イベント詳細ページのリンクアドレス |
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 |
現在の環境コンソールアドレス | |
df_studio_monitor_base_link |
現在の環境のモニターアドレス |
テンプレート変数の例¶
モニターの by に region と host が設定され、イベント内容のテンプレートが以下の通りだとします:
イベント名:
イベント内容:
- 地域:{{ region }}
- ホスト:{{ host }}
- レベル:{{ df_status }}
- 検出値:{{ Result }}
- モニター:{{ df_monitor_checker_name }}(アラートポリシー:{{ df_monitor_name }})
この場合、error イベントが発生すると、レンダリング後のイベント出力は次のようになります:
出力イベント名:
出力イベント内容:
特殊なシナリオの変数¶
RUM メトリクス検出¶
RUM メトリクス検出では、上記の汎用テンプレート変数に加えて、以下のテンプレート変数が追加でサポートされています:
| テンプレート変数 | 型 | 説明 |
|---|---|---|
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 アドレスや OS などの詳細情報は含まれていません。
その場合、埋め込み DQL を使用すると、region と host を DQL クエリパラメータとして使用して対応するデータを取得し、{{ dql_data.host_ip }} などを使用して関連情報を出力できます。
埋め込み DQL クエリ関数の詳細¶
埋め込み DQL クエリ関数の呼び出し形式は次のとおりです:
- 第 1 引数は DQL ステートメントで、パラメータプレースホルダ
?を含めることができます - 後続の引数は DQL ステートメントのパラメータ値または変数です
パラメータプレースホルダ ? は、具体的な値に置き換えられる際に、システムによって自動的にエスケープされます。
変数 host の値が "my_server" であると仮定すると、埋め込み DQL 関数と実行される最終的な DQL ステートメントは次のようになります:
Warning
- 埋め込み DQL クエリはテンプレートの先頭に配置する必要があります
- クエリ結果名(ここでは
dql_data)は、一般的なプログラミング言語の命名規則に従い、任意の英字で始まり、英字、数字、アンダースコアのみを含む文字列である必要があります。絵文字の使用は推奨しません。 - クエリ結果名は、既存のテンプレート変数やテンプレート関数と同じ名前にしないでください。予期しない問題が発生する可能性があります
- DQL 内でフィールドに関数を使用する場合は、後で使用しやすいように
ASを使用してフィールドにエイリアスを付けることをお勧めします(例:O::HOST:( last(host) AS last_host ))。 - DQL のフィールド名に特殊文字が含まれている場合、テンプレート変数と同様に、
{{ dql_data['host-name'] }}、{{ dql_data['@level'] }}を使用してレンダリングする必要があります。