コンテンツにスキップ

カスタムイベント通知テンプレート


テンプレート構文を使用して、イベント通知の内容をカスタマイズできます:

  • 動的レンダリング:{{ フィールド名 }} を使用してアラートフィールドを直接挿入(例:{{ host }}{{ df_status }}

  • データ処理:{{ 変数 | 関数() }} を使用してデータをフォーマット(例:タイムスタンプの日付変換、数値のパーセンテージ変換)

  • 条件分岐:{% if ... %} を使用して異なるステータスに応じた通知を実現

  • リアルタイムクエリ:DQL("クエリ文")を埋め込んで関連データを取得(例:ホストIP、アプリケーション情報)

基本テンプレート変数

テンプレート変数の基本構文は {{ フィールド名 }} で、イベントに関連する動的情報をレンダリングするために使用されます。以下は一般的なテンプレート変数とその用途です:

テンプレート変数 説明
datetimestamp Integer イベント発生時刻。単位は秒
df_date_range Integer 時間範囲。単位は秒
df_check_range_start Integer 検出範囲の開始時刻。Unix タイムスタンプ、単位は秒
df_check_range_end Integer 検出範囲の終了時刻。Unix タイムスタンプ、単位は秒
df_status String(Enum) イベントステータス。取りうる値:

  • 緊急 critical
  • 重要 error
  • 警告 warning
  • 正常 ok
  • データ欠落 nodata
  • 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 の冗長フィールドです。取りうる値:

  • 正常 ok
  • インシデント fault
  • 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) モニターの実行モード。取りうる値:

  • 自動トリガー crontab
  • 手動実行 manual
  • 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 現在の環境のモニターアドレス

    テンプレート変数の例

    モニターの byregionhost が設定され、イベント内容のテンプレートが以下の通りだとします:

    イベント名:

    モニター {{ df_monitor_checker_name }} が {{ df_dimension_tags }} にインシデントを検出
    

    イベント内容:

    - 地域:{{ region }}
    - ホスト:{{ host }}
    - レベル:{{ df_status }}
    - 検出値:{{ Result }}
    - モニター:{{ df_monitor_checker_name }}(アラートポリシー:{{ df_monitor_name }})
    

    この場合、error イベントが発生すると、レンダリング後のイベント出力は次のようになります:

    出力イベント名:

    モニター モニター001 が {"region":"hangzhou","host":"web-001"} にインシデントを検出
    

    出力イベント内容:

    - 地域:hangzhou
    - ホスト:web-001
    - レベル:error
    - 検出値:90.12345
    - モニター:モニター001(アラートポリシー:チーム001)
    

    特殊なシナリオの変数

    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'] }} を使用

    テンプレート関数

    イベント内のフィールド値を直接表示するだけでなく、テンプレート関数を使用してフィールド値をさらに処理し、出力を最適化することもできます。

    基本構文は次のとおりです:

    {{ <テンプレート変数> | <テンプレート関数> }}
    

    具体的な例:

    イベント発生時刻:{{ date | to_datetime }}
    

    テンプレート関数にパラメータを渡す必要がある場合、構文は次のとおりです:

    イベント発生時刻:{{ date | to_datetime('America/Chicago') }}
    
    Warning

    テンプレート関数を使用する前にテンプレート変数を演算する必要がある場合は、括弧を追加することを忘れないでください。例:

    CPU 使用率:{{ (Result * 100) | to_round(2) }}
    

    利用可能なテンプレート関数のリストは次のとおりです:

    テンプレート関数 パラメータ 説明
    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

    テンプレート関数の例

    詳細については、各テンプレート関数の例を参照してください。

    設定されたモニターの byregionhost が設定され、アラート設定のテンプレートが以下の通りだとします:

    イベント名:

    モニター {{ df_monitor_checker_name }} が {{ df_dimension_tags | to_pretty_tags }} にインシデントを検出
    

    イベント内容:

    - 対象:{{ df_dimension_tags | to_pretty_tags }}
    - 時刻:{{ date | to_datetime }}
    - レベル:{{ df_status | to_status_human }}
    - 検出値:{{ (Result * 100) | to_round(2) }}
    

    この場合、error イベントが発生すると、レンダリング後のイベント出力は次のようになります:

    出力イベント名:

    モニター 私のモニター が region:hangzhou, host:web-001 にインシデントを検出
    

    出力イベント内容:

    - 検出対象:region:hangzhou, host:web-001
    - 検出時刻:2022-01-01 01:23:45
    - インシデントレベル:重要
    - 検出値:9012.35
    

    テンプレート分岐

    テンプレートは、条件に応じて異なるコンテンツをレンダリングするための分岐構文もサポートしています。

    テンプレート分岐の例

    次の構文を使用して分岐機能を実現できます:

    {% 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 ステートメントの実行をサポートします。通常、クエリで取得した最初のデータは、テンプレート内でテンプレート変数として使用できます。使用方法は次のとおりです:

    {% set dql_data = DQL("実行する DQL ステートメント") %}
    
    あるフィールド:{{ dql_data.some_field }}
    

    埋め込み 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 になります。

    モニターの byregionhost が設定され、イベント内容のテンプレートが以下の通りだとします:

    {% set dql_data = DQL("O::HOST:(host_ip, os) { region = ?, host = ? }", region, host) %}
    
    ホスト情報:
    IP:{{ dql_data.host_ip }}
    OS: {{ dql_data.os }}
    

    イベントには、異なるデータを識別するための regionhost テンプレート変数のみが含まれており、IP アドレスや OS などの詳細情報は含まれていません。

    その場合、埋め込み DQL を使用すると、regionhost を DQL クエリパラメータとして使用して対応するデータを取得し、{{ dql_data.host_ip }} などを使用して関連情報を出力できます。

    埋め込み DQL クエリ関数の詳細

    埋め込み DQL クエリ関数の呼び出し形式は次のとおりです:

    DQL(dql, param_1, param_2, ...)
    
    • 第 1 引数は DQL ステートメントで、パラメータプレースホルダ ? を含めることができます
    • 後続の引数は DQL ステートメントのパラメータ値または変数です

    パラメータプレースホルダ ? は、具体的な値に置き換えられる際に、システムによって自動的にエスケープされます。

    変数 host の値が "my_server" であると仮定すると、埋め込み DQL 関数と実行される最終的な DQL ステートメントは次のようになります:

    DQL("O::HOST:(host, host_ip, os, datakit_ver) { host = ? }",  host)
    
    O::HOST:(host, host_ip, os, datakit_ver) { host = 'my_server' }
    
    Warning
    • 埋め込み DQL クエリはテンプレートの先頭に配置する必要があります
    • クエリ結果名(ここでは dql_data)は、一般的なプログラミング言語の命名規則に従い、任意の英字で始まり、英字、数字、アンダースコアのみを含む文字列である必要があります。絵文字の使用は推奨しません。
    • クエリ結果名は、既存のテンプレート変数やテンプレート関数と同じ名前にしないでください。予期しない問題が発生する可能性があります
    • DQL 内でフィールドに関数を使用する場合は、後で使用しやすいように AS を使用してフィールドにエイリアスを付けることをお勧めします(例:O::HOST:( last(host) AS last_host ))。
    • DQL のフィールド名に特殊文字が含まれている場合、テンプレート変数と同様に、{{ dql_data['host-name'] }}{{ dql_data['@level'] }} を使用してレンダリングする必要があります。

    その他の DQL ドキュメント

    フィードバック

    このページは役に立ちましたか?