Alibaba Cloud Service Mesh (ASM) でアプリケーションレベルのサービスレベル目標 (SLO) を定義すると、一連の Prometheus ルールが自動的に生成されます。このトピックでは、これらのルールをご利用の Prometheus インスタンスにインポートして SLO を適用する方法について説明します。
前提条件
-
ご利用の Container Service for Kubernetes (ACK) クラスターに Prometheus モニタリングがインストールされていること。詳細については、「オープンソースの Prometheus モニタリング」および「メッシュモニタリングのためのセルフマネージド Prometheus インスタンスの統合」をご参照ください。
ステップ 1:Prometheus へのルールのインポート
このトピックでは、Prometheus Operator を使用して Prometheus をデプロイしたことを前提としています。このモードでは、Prometheus の構成はカスタムリソースを通じて管理されます。記録ルールとアラートルールを構成するには、PrometheusRule ラベルを持つ app: ack-prometheus-operator and release: ack-prometheus-operator オブジェクトを作成します。
-
これらのラベルが必要かどうかは、ご利用の Prometheus カスタムリソースの
ruleSelector設定によって異なります。ruleSelectorが空の場合、ラベルを追加する必要はありません。ご利用の環境に合わせて構成を調整してください。 -
異なるメソッドで Prometheus をデプロイする場合、対応するメソッドを使用して生成されたルールを適用する必要があります。詳細については、公式の Prometheus ドキュメントをご参照ください。
-
ACK コンソールから
ruleSelectorを取得します。-
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
-
クラスターリスト ページで、ご利用のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
CRD タブで、[PrometheusRule] をクリックします。
-
リソースオブジェクト タブで、名前空間 ドロップダウンリストから [monitoring] を選択します。[ack-prometheus-operator-prometheus] の行で、アクション 列の YAML の編集 をクリックします。
-
ruleSelectorフィールドを取得します。次の例は、典型的な
ruleSelector構成を示しています。Prometheus Operator がご利用のPrometheusRuleリソースを選択するには、リソースにmatchLabelsで定義されたラベルが必要です。ruleSelector: matchLabels: app: ack-prometheus-operator release: ack-prometheus-operator
-
-
PrometheusRule リソースをデプロイします。
-
次の内容で prometheusrule.yaml という名前のファイルを作成します。
YAML ファイルでは、
labelsフィールドに前のステップで取得したラベルを含める必要があります。specフィールドには、生成された Prometheus ルールが含まれます。apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: labels: app: ack-prometheus-operator release: ack-prometheus-operator name: asm-rules namespace: monitoring spec: # Replace this with the content of your generated rule file. -
ご利用の ACK クラスターで次のコマンドを実行して、PrometheusRule リソースを適用します。
kubectl apply -f prometheusrule.yaml
-
-
ルールが適用されたことを確認します。
-
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
-
クラスターリスト ページで、ご利用のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
ConfigMap ページで、名前空間 ドロップダウンリストから [monitoring] を選択します。Prometheus 構成の行で、アクション 列の YAML の編集 をクリックします。
PrometheusRuleコントローラーは、リソースを自動的にルールに変換し、Prometheus が読み取るための ConfigMap に追加します。次の例は ConfigMap の内容を示しており、monitoring-asm-rules-fcd9bea9-22b3-462b-8786-424f74f098ec.yamlは ASM ルールファイルのキーです:up{job= alertmanager main,namespace= monitoring } ) ) >= 0.5 for: 5m labels: severity: critical monitoring-asm-rules-fcd9bea9-22b3-462b-8786-424f74f098ec.yaml: | groups: - name: sloth-slo-sli-recordings-httpbin-asm-slo rules:
-
ステップ 2:SLO モニタリングの検証
Prometheus でのメトリックとアラートの確認
-
kubectl を使用して ACK クラスターに接続し、次のコマンドを実行して Prometheus サービスをローカルポートに転送します。
kubectl --namespace monitoring port-forward svc/ack-prometheus-operator-prometheus 9090 -
https://localhost:9090 をクリックして Prometheus コンソールにアクセスします。
-
Prometheus UI で、式ブラウザに asm_slo_info を入力し、[実行] をクリックすると、SLO 構成を表示できます。
クエリは結果
asm_slo_info{asm_slo="asm-slo",slo_id="httpbin-asm-slo",slo_mode="cli-gen-prom",slo_objective="99.9",slo_service="httpbin",slo_spec="prometheus/v1",slo_version="dev"}を返します。これは、Prometheus 記録ルールが正しく構成されていることを示します。 -
ページの上部で、[アラート] をクリックしてアラートルールを表示します。
次の 2 つのルールが存在することは、Prometheus アラートルールが正しく構成されていることを示します。asm-alert という名前の 2 つのアラートルールが表示され、両方とも [0 active] (アクティブなアラートなし) と表示されます。
シナリオ 1:通常のトラフィックのシミュレーション
-
次のスクリプトを実行して、成功率 99.5% のトラフィックをシミュレーションします。
{ingress-gateway-ip}をご利用のイングレスゲートウェイの実際の IP アドレスに置き換えてください。イングレスゲートウェイの IP アドレスを取得するには、「イングレスゲートウェイ情報の表示」をご参照ください。#!/bin/bash for i in `seq 200` do if (( $i == 100 )) then curl -I http://{ingress-gateway-ip}/status/500; else curl -I http://{ingress-gateway-ip}/; fi echo "OK" sleep 0.01; done; -
Prometheus UI に戻り、式ブラウザに slo:period_error_budget_remaining:ratio を入力して [実行] をクリックします。 残りのエラーバジェットの変更を確認します。
クエリを実行すると、グラフには残りのエラーバジェット率が約 1.0 から約 0.93 に急激に低下することが示され、エラーバジェットが急速に消費されていることがわかります。
次の表は、主要な SLO メトリックについて説明しています。詳細については、「サービスレベル目標 (SLO) の概要」をご参照ください。
メトリック
説明
slo:period_error_budget_remaining:ratio
30 日間の SLO 期間の残りのエラーバジェット。
slo:sli_error:ratio_rate30d
30 日間の SLO 期間の平均エラーレート。
slo:period_burn_rate:ratio
30 日間の SLO 期間のバーンレート。
slo:current_burn_rate:ratio
現在のバーンレート。
シナリオ 2:エラートラフィックのシミュレーション
手動で障害をトリガーして、アラートルールをテストします。
-
次のスクリプトを実行して、成功率 50% のトラフィックをシミュレーションします。これはバーンレート 50 に相当します。
{ingress-gateway-ip}をご利用のイングレスゲートウェイの実際の IP アドレスに置き換えてください。#!/bin/bash for i in `seq 200` do curl -I http://{ingress-gateway-ip}/ curl -I http://{ingress-gateway-ip}/status/500; echo "OK" sleep 0.01; done; -
Prometheus コンソールの [アラート] ページに戻り、トリガーされたアラートを確認します。
[アラート] ページでは、ルールファイルパス
monitoring-asm-rules.yamlの下、sloth-slo-alerts-httpbin-asm-slo2ルールグループ内に、2 つの asm-alert アラートルールがアクティブな状態 (1 active) になっています:-
最初のルール:
sloth_severity=page、sloth_window=30m、ラベルにはalertlabel="bbb"、pagelabels="ddd"、sloth_id="httpbin-asm-slo2"が含まれます。 -
2 番目のルール:
sloth_severity=ticket、sloth_window=2h、ラベルにはticketlabel="eee"が含まれます。
-
Alertmanager コンソールでのアラートの表示
Prometheus フレームワークでは、Alertmanager コンポーネントが Prometheus サーバーによって生成されたアラートを収集し、構成に基づいてレシーバーにルーティングします。
-
次のコマンドを実行して、ack-prometheus-operator-alertmanager サービスをローカルポートに転送します。
kubectl --namespace monitoring port-forward svc/ack-prometheus-operator-alertmanager 9093 -
https://localhost:9093 をクリックして Alertmanager コンソールにアクセスします。
-
[Alertmanager] ページで、展開アイコン
をクリックしてアラートの詳細を表示します。Alertmanager のアラートリストには、asm-alert タイプの 2 つのカスタムアラートが表示されます。1 つは
slo_severity=page(slo_window=30m) で、もう 1 つはslo_severity=ticket(slo_window=2h) です。これは、ASM SLO アラートルールが正常にトリガーされたことを示します。