Prometheus のアラートが発報すると、対応担当者は多くの場合、Application Real-Time Monitoring Service (ARMS) コンソールに切り替えてメトリクスの傾向を確認します。DingTalk のアラートカードにメトリクスの傾向グラフを追加することで、対応担当者は DingTalk を離れることなく、通知内で直接、視覚的なコンテキストを即座に把握できます。
アラートルールに設定する 2 つのカスタムアノテーションによって、プロットするメトリクスとグラフに表示する名前を制御します。
メトリクスの傾向グラフは、DingTalk グループのアラートカードでのみサポートされています。他の通知チャネル (メール、Webhook) はこの機能をサポートしていません。
仕組み
Prometheus アラートルールは、cpu_usage > 80 のようなしきい値条件を持つ PromQL 式を評価します。傾向グラフを描画するには、ARMS は別の PromQL 式、つまりしきい値条件を 含まない 同じクエリを使用して、時系列の生のメトリクス値をプロットする必要があります。
このクエリと表示名は、次の 2 つのアノテーションを使用して指定します:
| アノテーションキー | 目的 | 値の例 |
|---|---|---|
_aliyun_display_promql | プロットするメトリクスデータを返す PromQL 式。アラート式からしきい値条件や論理演算子 (AND、OR) を削除します。 | cpu_usage |
_aliyun_display_name | グラフに表示されるメトリクスの表示名。 | コンテナ CPU 使用率 |
グラフは、_aliyun_display_promql クエリの結果に含まれるラベルが、アラートルールの PromQL の結果に含まれるラベルと一致する場合にのみ描画されます。詳細については、「グラフが表示されないのはなぜですか?」をご参照ください。
_aliyun_display_promql クエリは、最大 512 KB のメトリクスデータを返すことができます。前提条件
開始する前に、次のものが準備できていることを確認してください:
通知チャネルとして設定された DingTalk グループ。詳細については、「DingTalk チャットボット」をご参照ください。
アラートを DingTalk グループにルーティングする通知ポリシー。詳細については、「通知ポリシー」をご参照ください。
傾向グラフ付きのアラートルールの作成または編集
ARMS コンソールにログインします。
左側メニューで、[Managed Service for Prometheus] > [Prometheus Alert Rules] を選択します。
[Prometheus Alert Rules] ページで、右上隅にある [Create Prometheus Alert Rule] をクリックします。
[Alert Notification] セクションで [Simple Mode] を選択し、DingTalk グループを連絡先として使用する通知ポリシーを選択します。
[Advanced Settings] を展開し、[Annotations] セクションを見つけて、[Create Annotation] をクリックします。次の 2 つのアノテーションを追加します:
キーを
_aliyun_display_promqlに、値をしきい値が削除された PromQL 式に設定します。たとえば、アラートルールでcpu_usage > 80を使用している場合、値をcpu_usageに設定します。もう一度 [Create Annotation] をクリックします。キーを
_aliyun_display_nameに、値をコンテナ CPU 使用率のようなわかりやすいメトリクス名に設定します。
必要に応じて他のアラートルールパラメーターを設定します。詳細については、「Prometheus アラートルール」をご参照ください。
[Save] をクリックし、次に [Complete] をクリックします。
グラフの確認
アラートルールが発報した後、DingTalk グループを開き、アラートカードを確認します。メトリクスの傾向グラフがインラインで表示され、アラートに至るまでのメトリクス値が示されます。
DingTalk でのアラートの対応については、「通知グループでのアラートの処理」をご参照ください。
よくある質問
なぜグラフ用に別の PromQL 式が必要なのですか?
アラートルールの PromQL 式には、しきい値条件と論理演算子 (例: cpu_usage > 80) が含まれます。これらは、グラフに必要な生のメトリクス値を返すのではなく、結果セットをフィルタリングします。_aliyun_display_promql アノテーションは、しきい値を除いた同じクエリを受け取るため、ARMS は基になる時系列データを取得してプロットすることができます。
アノテーションを設定した後、グラフが表示されないのはなぜですか?
グラフは、_aliyun_display_promql クエリの結果に含まれるラベルが、アラートルールの PromQL の結果に含まれるラベルと一致する場合にのみ描画されます。PromQL 式は複数の時系列を返すことがあり、ARMS はそのラベルに基づいて一致するものを選択します。
たとえば、cpu_usage > 80 が pod_name と container のラベルを持つ時系列を返す場合、_aliyun_display_promql クエリもこれらのラベルの両方を含む時系列を返す必要があります。ラベルが異なる場合、ARMS は結果を照合できず、グラフは描画されません。
トラブルシューティングを行うには、次の手順を実行してください:
Prometheus クエリエディターで、
_aliyun_display_promqlクエリとアラートルールの PromQL 式を個別に実行してください。返された時系列のラベルセットを比較してください。
結果のラベルがアラートルールのラベルと一致するように、
_aliyun_display_promql式を調整してください。