全部產品
Search
文件中心

Alibaba Cloud Service Mesh:將產生的規則匯入Prometheus中執行SLO

更新時間:Jun 30, 2024

使用ASM定義應用服務級SLO,可以自動產生Prometheus規則。本文介紹如何將產生的規則匯入Prometheus中執行SLO。

前提條件

步驟一:將規則匯入Prometheus

本文採用Prometheus Operator模式部署Prometheus。在此模式下,Prometheus的相關配置由Prometheus定義的相關自訂資源決定。配置Recording Rules和警示規則時,您可以建立Prometheus CR,建立一個具有app: ack-prometheus-operator和release: ack-prometheus-operator標籤的PrometheusRule對象。

說明
  • 標籤的添加取決於在Prometheus CR中標籤選取器ruleSelector的設定。若ruleSelector為空白,可以不添加標籤。請您根據實際情況進行調整。

  • 不同的Prometheus部署方式,需要採用不同的方法部署產生的Prometheus規則。關於匯入Prometheus規則的更多資訊,請參見Prometheus

  1. 在Container ServiceACK中擷取ruleSelector

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 自訂資源

    3. 資源定義(CustomResourceDefinition)頁簽,單擊PrometheusRule

    4. 資來源物件瀏覽器頁簽,命名空間選擇monitoring,在ack-prometheus-operator-prometheus右側的操作列下,單擊YAML 編輯

    5. 擷取ruleSelector欄位資訊。

      ruleSelector欄位樣本如下。為了被標籤選取器選中,PrometheusRule中需要包含matchLabels中的標籤。

      ruleSelector:
        matchLabels:
          app: ack-prometheus-operator
          release: ack-prometheus-operator
  2. 部署Prometheus。

    1. 使用以下內容,建立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:
        # 此處替換為產生的規則檔案。
    2. 在ACK叢集中,執行以下命令,部署Prometheus。

      kubectl apply -f prometheusrule.yaml
  3. 查看Prometheus是否配置成功。

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇組態管理 > 配置項

    3. 配置項頁面上方,選擇命名空間monitoring,在Prometheus配置右側的操作列下,單擊YAML 編輯

      如下圖所示,可以看到PrometheusRule的對應Controller會自動將配置寫入ConfigMap中供Prometheus讀取。Prometheus

步驟二:執行SLO

查看Prometheus監控資料和警示資訊

  1. 使用kubectl串連至ACK叢集,在命令列執行以下命令,將ack-prometheus-operator-prometheus服務轉寄到本地連接埠。

    kubectl --namespace monitoring port-forward svc/ack-prometheus-operator-prometheus 9090
  2. 單擊https://localhost:9090,訪問Prometheus控制台。

  3. Prometheus頁面的文字框中,輸入asm_slo_info,然後單擊Execute,查看配置的SLO。

    如下圖所示,可以看到SLO配置,表示Prometheus Recording Rules配置成功。SLO配置

  4. 在頁面上方,單擊Alerts,查看警示規則。

    存在如下兩條規則,表示Prometheus Alerting Rules配置成功。Alerting Rules

情境一:類比正常請求

  1. 在命令列執行以下指令碼,類比99.5%成功率的情況下產生的指標。

    指令碼中的{網關IP}請替換為實際的網關IP。關於如何擷取網關IP,請參見查看網關資訊

    #!/bin/bash
    for i in `seq 200`
    do
    if (( $i == 100 ))
    then
        curl -I http://{網關IP}/status/500;
    else
        curl -I http://{網關IP}/;
    fi
    echo "OK"
    sleep 0.01;
    done;
  2. 返回Prometheus控制台的Prometheus頁面,在文字框中輸入slo:period_error_budget_remaining:ratio,然後單擊Execute,查看剩餘的錯誤預算的變化。

    樣本效果如下:類比正常請求

    SLO的關鍵計量說明如下。更多資訊,請參見服務等級目標SLO概述

    指標

    說明

    slo:period_error_budget_remaining:ratio

    SLO期間(30d)的剩餘錯誤預算。

    slo:sli_error:ratio_rate30d

    SLO期間(30d)內的平均錯誤率。

    slo:period_burn_rate:ratio

    SLO期間(30d)內的燃燒率。

    slo:current_burn_rate:ratio

    當前燃燒率。

情境二:類比異常請求

手動觸發故障,測試警示。

  1. 在命令列執行以下指令碼,類比請求出錯時,50%成功率(燃燒率為50)的情況下產生的指標。

    指令碼中的{網關IP}請替換為實際的網關IP。

    #!/bin/bash
    for i in `seq 200`
    do
    curl -I http://{網關IP}/
    curl -I http://{網關IP}/status/500;
    echo "OK"
    sleep 0.01;
    done;
  2. 返回Prometheus控制台的Alerts頁面,查看警示。

    警示觸發後的樣本效果如下:類比異常請求

在AlertManager控制台查看警示

在Prometheus架構中,由AlertManager組件負責收集Prometheus Server產生的警示資訊,並根據您的配置發送給各個接收者。

  1. 執行以下命令,將ack-prometheus-operator-alertmanager服務轉寄到本地連接埠。

    kubectl --namespace monitoring port-forward svc/ack-prometheus-operator-alertmanager 9093
  2. 單擊https://localhost:9093,訪問AlertManager控制台。

  3. Alertmanager頁面,單擊展開表徵圖,查看警示。

    如下圖所示,可以看到自訂警示資訊採集成功。警示樣本