使用ASM定義應用服務級SLO,可以自動產生Prometheus規則。本文介紹如何將產生的規則匯入Prometheus中執行SLO。
前提條件
已在ACK叢集安裝Prometheus監控。具體操作,請參見開源Prometheus監控和整合自建Prometheus實現網格監控。
步驟一:將規則匯入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。
在Container ServiceACK中擷取
ruleSelector。登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在資源定義(CustomResourceDefinition)頁簽,單擊PrometheusRule。
在資來源物件瀏覽器頁簽,命名空間選擇monitoring,在ack-prometheus-operator-prometheus右側的操作列下,單擊YAML 編輯。
擷取
ruleSelector欄位資訊。ruleSelector欄位樣本如下。為了被標籤選取器選中,PrometheusRule中需要包含matchLabels中的標籤。ruleSelector: matchLabels: app: ack-prometheus-operator release: ack-prometheus-operator
部署Prometheus。
使用以下內容,建立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: # 此處替換為產生的規則檔案。在ACK叢集中,執行以下命令,部署Prometheus。
kubectl apply -f prometheusrule.yaml
查看Prometheus是否配置成功。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在配置項頁面上方,選擇命名空間為monitoring,在Prometheus配置右側的操作列下,單擊YAML 編輯。
如下圖所示,可以看到
PrometheusRule的對應Controller會自動將配置寫入ConfigMap中供Prometheus讀取。
步驟二:執行SLO
查看Prometheus監控資料和警示資訊
使用kubectl串連至ACK叢集,在命令列執行以下命令,將ack-prometheus-operator-prometheus服務轉寄到本地連接埠。
kubectl --namespace monitoring port-forward svc/ack-prometheus-operator-prometheus 9090單擊https://localhost:9090,訪問Prometheus控制台。
在Prometheus頁面的文字框中,輸入asm_slo_info,然後單擊Execute,查看配置的SLO。
如下圖所示,可以看到SLO配置,表示Prometheus Recording Rules配置成功。

在頁面上方,單擊Alerts,查看警示規則。
存在如下兩條規則,表示Prometheus Alerting Rules配置成功。

情境一:類比正常請求
在命令列執行以下指令碼,類比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;返回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
當前燃燒率。
情境二:類比異常請求
手動觸發故障,測試警示。
在命令列執行以下指令碼,類比請求出錯時,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;返回Prometheus控制台的Alerts頁面,查看警示。
警示觸發後的樣本效果如下:

在AlertManager控制台查看警示
在Prometheus架構中,由AlertManager組件負責收集Prometheus Server產生的警示資訊,並根據您的配置發送給各個接收者。
執行以下命令,將ack-prometheus-operator-alertmanager服務轉寄到本地連接埠。
kubectl --namespace monitoring port-forward svc/ack-prometheus-operator-alertmanager 9093單擊https://localhost:9093,訪問AlertManager控制台。
在Alertmanager頁面,單擊
表徵圖,查看警示。如下圖所示,可以看到自訂警示資訊採集成功。
