Log Service のアラート取り込みシステムを Prometheus の Alertmanager コンポーネントとして設定できます。 設定が完了すると、Prometheus から Log Service のアラートシステムにアラートが送信されます。 アラートシステムは受信したアラートのノイズを除去し、アラート通知を送信します。

始める前に

アラート取り込みサービスおよびアラート取り込みアプリケーションが作成されている必要があります。 詳細については、「アラート取り込み用 Webhook URL の設定」をご参照ください。

Prometheus の設定

Prometheus の設定ファイルで、alertmanagers パラメーターを追加します。 設定用のコードを以下に示します。

# Alertmanager configuration
alerting:
  alertmanagers:
  - path_prefix: /event/webhook/RAMAK_{ACCESS_KEY_ID}/{WEBHOOK_APP_ID}
    api_version: v2
    static_configs:
    - targets:
      - {ALIYUN_SLS_ENDPOINT}
パラメーター 説明 例:
path_prefix パスを設定します。 Log Service のアラート取り込みシステムでアラート取り込みサービスおよびアラート取り込みアプリケーションの作成後に生成される Webhook URL のサブパスに設定します。 詳細については、「Webhook URL の取得」をご参照ください。
-path_prefix: event/webhook/RAMAK_WEDC***YEBD/Prometheus-alert01_k8s
targets アラートの受信側を設定します。 値を Log Service のエンドポイント (例:cn-heyuan-intranet.log.aliyuncs.com) に設定します。 詳細については、「Webhook URL の取得」をご参照ください。
Prometheus サーバーが ECS インスタンスにデプロイされている場合は、ECS インスタンスが存在するリージョンを選択し、関連する LAN または VPC エンドポイントを使用することを推奨します。 リージョンのインターネット Webhook URL を使用することもできます。
-targets:
        -cn-heyuan-intranet.log.aliyuncs.com

Prometheus のアラート

以下に、Prometeus のアラートの例を示します。

Prometheus のアラートに severity フィールドが存在する場合、Log Service によるアラートの取り込み後、対応する重大度にアラートの重大度をマッピングします。 severity フィールドが存在しない場合、Prometheus のアラートのデフォルトの重大度は中です。 詳細については、「重大度レベル」をご参照ください。
[
    {
        "annotations": {
            "description": "description info",
            "summary": "High request latency"
        },
        "endsAt": "2020-10-28T12:28:52.710Z",
        "startsAt": "2020-10-28T12:23:37.710Z",
        "generatorURL": "http: //127.0.0.1:9090/graph?g0.expr=go_threads%7Binstance%3D%22localhost%3A9090%22%2Cjob%3D%22prometheus%22%7D+%3E+0\\u0026g0.tab=1",
        "labels": {
            "alertname": "HighErrorRate",
            "instance": "localhost:9090",
            "job": "prometheus",
            "severity": "page"
        }
    }
]

フィールドのマッピング

Prometheus のアラートが Log Service に取り込まれると、アラートはフィールドマッピングにより Log Service でサポートされているアラートに変換されます。 以下に、Prometheus のアラートの例を示します。
{
    "aliuid": "{アラート取り込みアプリケーションが属する Alibaba Cloud アカウントの ID}",
    "alert_instance_id": "{自動的に生成されるアラートインスタンス ID}",
    "project": "{アラートセンターが属するプロジェクト}",
    "region": "{アラートの送信先となるエンドポイントのリージョン}",
    "alert_id": "HighErrorRate",
    "alert_type": "sls_pub",
    "alert_name": "HighErrorRate",
    "next_eval_interval": 78,
    "alert_time": 1603859020,
    "fire_time": 1603859017,
    "resolve_time": 0,
    "status": "firing",
    "labels": {
        "alertname": "HighErrorRate",
        "instance": "localhost:9090",
        "job": "prometheus"
    },
    "annotations": {
        "__pub_alert_region__": "{アラートの送信先となるエンドポイントのリージョン}",
        "__config_app__": "sls_pub_alert",
        "__pub_alert_service__": "{アラート取り込みサービスのID}",
        "__pub_alert_app__": "{アラート取り込みアプリケーションの ID}",
        "__pub_alert_protocol__": "prometheus",
        "severity": "page"
    },
    "severity": 2,
    "policy": {
        "alert_policy_id": "{アラート取り込みアプリケーションに指定されているアラートポリシー}",
        "action_policy_id": "{アラート取り込みアプリケーションに指定されているアクションポリシー}",
        "repeat_interval": "{アラート取り込みアプリケーションに指定されている間隔}"
    },
    "drill_down_query": "http: //127.0.0.1:9090/graph?g0.expr=go_threads%7Binstance%3D%22localhost%3A9090%22%2Cjob%3D%22prometheus%22%7D+%3E+0\\u0026g0.tab=1"
}

下表に、Log Service のフィールドと Prometheus のフィールド間でのアラート属性のマッピングを示します。

アラート属性 Prometheus のフィールド 説明
aliuid なし アラート取り込みアプリケーションが属する Alibaba Cloud アカウントの ID。
alert_id alertname アラートモニタリングルールの ID。
alert_type なし アラートタイプ。 有効な値:sls_pub
alert_name alertname アラートモニタリングルールのルール名。
status なし アラートステータス。 有効な値:発生中および解決済み。
  • Prometheus のアラートで endsAt フィールドの値が alert_time フィールドより大きい場合、ステータスは発生中です。
  • Prometheus のアラートで endsAt フィールドの値が alert_time フィールドより小さい場合、ステータスは解決済みです。
next_eval_interval なし アラートが評価される間隔。

現在のアラートステータスが発生中の場合、このパラメーターの値は以下の式を使用して計算されます。 Evaluation interval = (endsAt - alert_time)/4.

alert_time なし Log Service が Prometheus のアラートを受信した時刻。
fire_time startsAt Log Service が Prometheus のアラートを受信した時刻。
resolve_time なし アラートが作成された時刻。
  • Prometheus のアラートで endsAt フィールドの値が alert_time フィールドより大きい場合、resolve_time は 0 です。
  • Prometheus のアラートで endsAt フィールドの値が alert_time フィールドより小さい場合、resolve_time フィールドはタイムスタンプです。 タイムスタンプは、 endsAt フィールドのタイムスタンプと同じです。
labels labels アラートのラベル。
  • Prometheus のアラートで、labels フィールドに severity が存在する場合、アラートが Log Service に取り込まれた後に severity フィールドが annotations フィールドに追加されます。
  • アラート取り込みアプリケーションの作成時に [エンリッチメント] タブにラベルを追加すると、指定したラベルが labels フィールドに追加されます。
    [エンリッチメント] タブで指定されたラベルのキーが、Prometheus のアラートの labels フィールドのサブフィールドと同じ場合、Prometheus のアラートの [エンリッチメント] タブのラベルが優先されます。
annotations annotations Prometheus のアラートが Log Service に取り込まれた後、対応する Log Service のアラートの annotations フィールドに以下のフィールドが追加されます。
  • __config_app__: "sls_pub_alert"
  • __pub_alert_service__: {アラート取り込みサービスの ID}
  • __pub_alert_app__: {アラート取り込みアプリケーションの ID}
  • __pub_alert_protocol__: "prometheus"
  • __pub_alert_region__: {アラート送信先エンドポイントのリージョン}
アラート取り込みアプリケーションの作成時に [エンリッチメント] タブに注釈を追加すると、指定した注釈がannotations フィールドに追加されます。
[エンリッチメント] タブで指定された注釈のキーが、Prometheus のアラートの labels フィールドのサブフィールドと同じ場合、Prometheus のアラートの [エンリッチメント] タブの注釈が優先されます。
severity severity アラートの重大度。 詳細については、「重大度レベル」をご参照ください。
policy なし アラート取り込みアプリケーションに指定されたアラートポリシー。 詳細については、「ポリシー変数のデータ構造」をご参照ください。
project なし アラートセンターが属するプロジェクト。 詳細については、「プロジェクト」をご参照ください。
drill_down_query generatorURL Prometheus のアラートの generatorURL フィールドが表示されます。