可通過阿里雲Prometheus監控查看ACK Edge叢集預先配置的監控大盤和監控效能指標。本文介紹如何在ACK Edge叢集中接入阿里雲Prometheus監控。
前提條件
已建立ACK Edge叢集,且版本為1.18.8-aliyunedge.1及以上。
確保ACK Edge叢集已安裝的ack-arms-prometheus版本為1.1.4及以上,如不滿足,請及時升級ack-arms-prometheus版本。
如果叢集版本小於1.26,需要檢查確保叢集
kube-system/edge-tunnel-server-cfg的ConfigMap中,已經對Node Exporter的連接埠9100、GPU Exporter的連接埠9445開啟了轉寄配置,具體配置資訊如下:http-proxy-ports: 9445 https-proxy-ports: 9100
阿里雲Prometheus監控介紹
阿里雲Prometheus監控全面對接開源Prometheus生態,支援類型豐富的組件監控,提供多種開箱即用的預置監控大盤,且提供全面託管的Prometheus服務。藉助阿里雲Prometheus監控,無需自行搭建Prometheus監控系統,無需關心底層資料存放區、資料展示、系統營運等問題。
ACK Edge叢集支援使用容器監控基礎版。
查看阿里雲Prometheus Grafana大盤
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面中,單擊目的地組群名稱,然後在左側導覽列中,選擇。
說明僅首次登入時,需要根據頁面提示,單擊安裝組件下面的開始安裝,控制台會自動安裝組件並檢查監控大盤。安裝完成後跳轉到Prometheus監控詳情頁面。
在Prometheus監控頁面,可通過內建的監控大盤,例如節點監控、應用監控、GPU監控分別查看到叢集中節點、應用及GPU的監控資料。
配置Prometheus監控警示
為監控任務建立警示可在滿足警示條件時通過電話、郵件、簡訊、DingTalk、企業微信和Webhook等渠道即時警示,主動協助發現異常。警示規則被觸發時會向指定的連絡人分組發送通知,而在建立連絡人分組之前必須先建立連絡人。建立連絡人時,可指定連絡人用於接收通知的手機號和郵箱地址;也可以在通知策略中指定對應的接收群用於接收警示,便於及時對警示進行管理。
關於建立DingTalk機器人的具體操作,請參見DingTalk機器人。
關於建立企業微信機器人的具體操作,請參見企業微信機器人。
步驟一:建立連絡人
步驟二:建立Prometheus警示規則
通過靜態閾值建立Prometheus警示規則
靜態閾值檢查類型提供了系統預設的警示指標,通過選擇已有的警示指標,可通過語義化的方式快速建立對應指標項的警示規則。
登入ARMS控制台。
在左側導覽列,選擇。
在Prometheus警示規則頁面,單擊建立Prometheus警示規則。
在建立Prometheus警示規則版面設定如下警示參數,設定完成後單擊儲存。
參數
說明
樣本
警示名稱
警示的名稱。
生產叢集-容器CPU使用率警示
檢測類型
選擇靜態閾值。
靜態閾值
Prometheus執行個體
選擇需要建立警示的Prometheus執行個體。
生產叢集
警示分組
選擇警示分組。
不同Prometheus類型支援的警示分組不同,警示分組備選項會隨著選擇的Prometheus執行個體類型的不同產生變化。
Kubernetes負載
警示指標
選擇想要配置警示的指標,每個警示分組對應不同的指標。
容器CPU使用率
警示條件
基於警示指標預置內容設定警示事件產生條件。
當容器CPU使用率
大於80%時,滿足警示條件。篩選條件
根據警示指標,設定當前配置的警示規則適用的範圍,即所有符合篩選條件的資源滿足此條警示規則時,均會產生警示事件。
可選篩選條件包括:
遍曆:警示規則適用於當前Prometheus執行個體下的所有資源。篩選條件預設為遍曆。
等於:選擇該條件後,需要繼續輸入具體資源名稱。所建立的警示規則將僅適用於對應資源。不支援同時填寫多個資源。
不等於:選擇該條件後,需要繼續輸入具體資源名稱。所建立的警示規則將適用於除該資源之外的其他資源。不支援同時填寫多個資源。
正則匹配:選擇該條件後,按需輸入Regex匹配相應的資源名稱。所建立的警示規則將適用於符合該Regex的所有資源。
正則不匹配:選擇該條件後,按需輸入Regex匹配相應的資源名稱。所建立的警示規則將過濾符合該Regex的所有資源。
說明完成篩選條件設定後,會彈出資料預覽地區。
請將篩選條件字元限制在300個字元以內。
遍曆
資料預覽
資料預覽地區展示警示條件對應的PromQL語句,並以時序曲線的形式展示當前警示規則配置的監控指標的值。
預設僅展示一個資源的即時值,您可以在該地區的篩選框中選擇目標資源以及時間區間來查看不同時間區間和不同資源的值。
說明警示閾值將會以一條紅色直線的形式顯示在時序曲線中,滿足警示閾值的時序曲線顯示為深紅色,不滿足警示閾值的時序曲線顯示為藍色。
將滑鼠懸浮於時序曲線上,可以查看對應時間點的資源詳情。
在時序曲線上選中一段時間,可以查看對應時間段的時序曲線。
無
期間
當警示條件滿足時,直接產生警示事件:任何一個資料點滿足閾值,就會產生警示事件。
當警示條件滿足持續N分鐘時,才產生警示事件:即只有當滿足閾值的時間大於等於N分鐘時,才產生警示事件。
1
警示等級
自訂警示等級。預設警示等級為預設,警示嚴重程度從預設、P4、P3、P2、P1逐級上升。
預設
警示內容
使用者收到的警示資訊。您可以使用Go template文法在警示內容中自訂警示參數變數。
命名空間:{{$labels.namespace}} / Pod: {{$labels.pod_name}} / 容器:{{$labels.container}} CPU使用率{{$labels.metrics_params_opt_label_value}} {{$labels.metrics_params_value}}%, 當前值{{ printf "%.2f" $value }}%
警示通知
極簡模式:可以設定通知對象、通知時段和重複策略。
普通模式:
不指定通知策略:若選擇此選項,當完成建立警示規則後,您可以在通知策略頁面建立通知策略並指定匹配規則和匹配條件(如警示規則名稱等)來匹配該警示規則。當該警示規則被觸發產生警示事件後,警示資訊會被發送給通知策略中指定的連絡人或連絡人群組。更多資訊,請參見通知策略。
指定某個通知策略:若選擇此項,ARMS會自動在對應的通知策略添加一條匹配規則,匹配規則內容為警示規則ID(以警示規則名稱的方式呈現),以確保當前警示規則產生的警示事件一定可以被選擇的通知策略匹配到。
重要快速指定通知策略只能保證當前警示規則產生的警示事件一定能夠被所選的通知策略匹配到並且產生對應的警示。但是,當前警示規則產生的事件同時也可能被其它設定了模糊比對的通知策略匹配到並且產生警示。警示規則產生的警示事件和通知策略之間是多對多的匹配關係。
不指定通知規則
進階設定
警示檢查周期
指警示規則每隔N分鐘進行一次檢查,判斷資料是否滿足警示條件。預設1分鐘,最少設定1分鐘。
1
資料完整後再檢查
是
否
是
標籤
設定警示標籤,設定的標籤可用作通知策略匹配規則的選項。
無
注釋
設定警示的注釋。
無
通過自訂PromQL建立Prometheus警示規則
如果需要對靜態閾值中系統預設指標之外的指標進行監控,可使用自訂PromQL檢測類型來建立警示規則。
在建立Prometheus警示規則版面設定以下警示參數,設定完成後單擊儲存。
參數 | 說明 | 樣本 |
警示名稱 | 警示的名稱。 | Pod的CPU使用率大於8% |
檢測類型 | 設定為自訂PromQL。 | 自訂PromQL |
Prometheus執行個體 | 選擇需要建立警示的Prometheus執行個體。 | 無 |
參考警示分組 | 選擇警示分組。 不同Prometheus類型支援的警示分組不同,警示分組備選項會隨著選擇的Prometheus執行個體類型的不同產生變化。 | Kubernetes負載 |
參考警示指標 | 可選。參考指標中包括了常見指標的自訂PromQL配置方法,您可以選擇已有的類似指標來進行填充,然後參考對應指標的配置方式進行修改以完成警示配置。 參考指標參數會根據選擇的Prometheus執行個體類型自動過濾支援的警示指標。 | Pod磁碟使用率警示 |
自訂PromQL語句 | 使用PromQL語句設定警示規則運算式。 | 命名空間:{{$labels.namespace}}/Pod: {{$labels.pod_name}}/磁碟裝置:{{$labels.device}} 使用率超過90%,當前值{{ printf "%.2f" $value }}%max(container_fs_usage_bytes{pod!="", namespace!="arms-prom",namespace!="monitoring"}) by (pod_name, namespace, device)/max(container_fs_limit_bytes{pod!=""}) by (pod_name,namespace, device) * 100 > 90 |
資料預覽 | 資料預覽地區展示警示條件對應的PromQL語句,並以時序曲線的形式展示當前警示規則配置的監控指標的值。 預設僅展示一個資源的即時值,您可以在該地區的篩選框中選擇目標資源以及時間區間來查看不同時間區間和不同資源的值。 說明
| 無 |
期間 |
| 1 |
警示等級 | 自訂警示等級。預設警示等級為預設,警示嚴重程度從預設、P4、P3、P2、P1逐級上升。 | 預設 |
警示內容 | 使用者收到的警示資訊。您可以使用Go template文法在警示內容中自訂警示參數變數。 | 命名空間:{{$labels.namespace}}/Pod: {{$labels.pod_name}}/磁碟裝置:{{$labels.device}} 使用率超過90%,當前值{{ printf "%.2f" $value }}% |
警示通知 |
| 不指定通知規則 |
進階設定 | ||
警示檢查周期 | 指警示規則每隔N分鐘進行一次檢查,判斷資料是否滿足警示條件。預設1分鐘,最少設定1分鐘。 | 1 |
資料完整後再檢查 |
| 是 |
標籤 | 設定警示標籤,設定的標籤可用作通知策略匹配規則的選項。 | 無 |
注釋 | 設定警示的注釋。 | 無 |
常見問題
如何查看ack-arms-prometheus組件版本?
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,單擊組件管理。
在組件管理頁面,單擊日誌與監控頁簽,找到ack-arms-prometheus組件。
在組件下方顯示目前的版本資訊,如有新版本需要升級,可單擊版本右側升級完成組件升級。
說明當已安裝的組件版本不是最新版本時,才會顯示升級操作。
ACK Edge叢集如何?監控資料的擷取?
在邊緣計算情境中,邊緣節點處在相對封閉的線下IDC環境中,雲上VPC和邊緣側處於不同的網路平面內。部署在雲上的Prometheus Agent無法直接通過Endpoint訪問到邊緣側的Node Exporter、GPU Exporter,從而擷取相應的監控指標。從ack-arms-prometheus 1.1.4版本開始,藉助ACK Edge叢集內建的雲邊營運通訊組件Tunnel,ack-arms-prometheus可以自動打通雲邊之間的監控資料擷取鏈路。
為什麼GPU監控無法部署?
如GPU節點上存在汙點,可能導致GPU監控無法部署。可通過以下步驟查看GPU節點的汙點情況。
執行以下命令,查看目標GPU節點的汙點情況。
如GPU節點擁有自訂的汙點,可找到汙點相關的條目。本文以
key為test-key、value為test-value、effect為NoSchedule為例說明:kubectl describe node cn-beijing.47.100.***.***預期輸出:
Taints:test-key=test-value:NoSchedule通過以下兩種方式處理GPU節點的汙點。
執行以下命令,刪除GPU節點的汙點。
kubectl taint node cn-beijing.47.100.***.*** test-key=test-value:NoSchedule-對GPU節點的汙點進行容忍度聲明,允許Pod調度到該汙點的節點上。
# 1.執行以下命令,編輯ack-prometheus-gpu-exporter。 kubectl edit daemonset -n arms-prom ack-prometheus-gpu-exporter # 2. 在YAML中添加如下欄位,聲明對汙點的容忍度。 #省略其他欄位。 #tolerations欄位添加在containers欄位上面,且與containers欄位同級。 tolerations: - key: "test-key" operator: "Equal" value: "test-value" effect: "NoSchedule" containers: #省略其他欄位。
手動刪除資源或將導致重新安裝阿里雲Prometheus失敗,如何完整地手動刪除ARMS-Prometheus?
只刪除阿里雲Prometheus的命名空間,會導致資源刪除後有殘留配置,影響再次安裝。可執行以下操作,完整地手動刪除ARMS-Prometheus殘餘配置。
刪除arms-prom命名空間。
kubectl delete namespace arms-prom刪除ClusterRole。
kubectl delete ClusterRole arms-kube-state-metrics kubectl delete ClusterRole arms-node-exporter kubectl delete ClusterRole arms-prom-ack-arms-prometheus-role kubectl delete ClusterRole arms-prometheus-oper3 kubectl delete ClusterRole arms-prometheus-ack-arms-prometheus-role kubectl delete ClusterRole arms-pilot-prom-k8s kubectl delete ClusterRole gpu-prometheus-exporter kubectl delete ClusterRole o11y:addon-controller:role kubectl delete ClusterRole arms-aliyunserviceroleforarms-clusterrole刪除ClusterRoleBinding。
kubectl delete ClusterRoleBinding arms-node-exporter kubectl delete ClusterRoleBinding arms-prom-ack-arms-prometheus-role-binding kubectl delete ClusterRoleBinding arms-prometheus-oper-bind2 kubectl delete ClusterRoleBinding arms-kube-state-metrics kubectl delete ClusterRoleBinding arms-pilot-prom-k8s kubectl delete ClusterRoleBinding arms-prometheus-ack-arms-prometheus-role-binding kubectl delete ClusterRoleBinding gpu-prometheus-exporter kubectl delete ClusterRoleBinding o11y:addon-controller:rolebinding kubectl delete ClusterRoleBinding arms-kube-state-metrics-agent kubectl delete ClusterRoleBinding arms-node-exporter-agent kubectl delete ClusterRoleBinding arms-aliyunserviceroleforarms-clusterrolebinding刪除Role及RoleBinding。
kubectl delete Role arms-pilot-prom-spec-ns-k8s kubectl delete Role arms-pilot-prom-spec-ns-k8s -n kube-system kubectl delete RoleBinding arms-pilot-prom-spec-ns-k8s kubectl delete RoleBinding arms-pilot-prom-spec-ns-k8s -n kube-system
手動刪除ARMS-Prometheus資源後,請在Container Service管理主控台的營運管理>組件管理中,重新安裝ack-arms-prometheus組件。