コンテンツにスキップ

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


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

  • 動的レンダリング: {{ フィールド名 }} を使用してアラートフィールド(例: {{ 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) イベントステータス。取り得る値:

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

  • 正常 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 現在の環境のコンソール URL
    df_studio_monitor_base_link 現在の環境のモニター URL

    テンプレート変数の例

    モニターの by に region と host が設定されており、イベント内容のテンプレートが次のとおりであるとします。

    イベント名:

    モニター {{ 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)
    

    特殊なシナリオの変数

    ユーザーアクセスメトリクス検出

    ユーザーアクセスメトリクス検出では、上記の一般的なテンプレート変数に加えて、次のテンプレート変数もサポートされています。

    テンプレート変数 型 説明
    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

    テンプレート関数の例

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

    モニターの by に region と host が設定されており、アラート設定のテンプレートが次のとおりであるとします。

    イベント名:

    モニター {{ 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 になります。

    モニターの 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, param_1, param_2, ...)
    
    • 最初のパラメーターは 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)は一般的なプログラミング言語の命名要件に従い、任意の英字で始まり、英字、数字、アンダースコアのみを含む文字列にしてください。emoji の使用は推奨されません。
    • クエリ結果名は、既存のテンプレート変数やテンプレート関数と同じ名前を付けないでください。同じ名前を付けると予期しない問題が発生する可能性があります。
    • DQL でフィールドに関数を使用する場合は、後で使いやすいように AS でフィールドにエイリアスを付けることをお勧めします(例: O::HOST:( last(host) AS last_host ))。
    • DQL のフィールド名に特殊文字が含まれる場合、テンプレート変数と同様に、{{ dql_data['host-name'] }}、{{ dql_data['@level'] }} を使用してレンダリングしてください。

    その他の DQL ドキュメント

    フィードバック

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