如何優雅地使用雲原生 Prometheus 監控叢集
作者陳凱燁,騰訊雲前端開發工程師。負責 TKE 叢集,彈性叢集和雲原生監控等模組控制檯開發。
概述
Prometheus 是一套開源的系統監控報警框架。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成為受歡迎度僅次於 Kubernetes 的專案。
2020年11月20日,騰訊云云原生 Prometheus 服務正式開始免費公測。針對容器叢集監控場景,提供了一整套包括監控、採集、儲存、告警、圖表等能力的監控服務。通過獨立部署與被監控物件解耦合,使得不受監控物件效能、穩定性、可靠性等因素的影響,託管模式使得使用者無需部署運維 Prometheus 監控例項,解放了運維人力,而新推出的模板功能可以解決在多個叢集之間貼上複製配置的重複性工作問題,實現一鍵同步多個叢集配置,使得整個流程更專業、更可靠。本文會詳細介紹雲原生監控服務的基本功能以及使用方式。
騰訊雲容器團隊的雲原生監控服務,產品目前已正式公測,歡迎讀者試用(傳送門:https://console.cloud.tencent.com/tke2/prometheus )。
基本功能
例項管理
建立例項
- 登入容器服務控制檯,選擇左側導航欄中的【雲原⽣監控】
- 點選⻚⾯上⽅的【新建】按鈕,進⼊【建立監控例項】⻚⾯。如下圖所示:
- 在【建立監控例項⻚⾯】,根據提示設定叢集資訊。如下圖所示:
-
地域: 選擇您希望部署該例項的地域,例項建立後 地域⽆法修改,建議您根據所在地理位置選擇靠近業務的地域,可降低訪問延遲,提高資料上報速度。
-
⽹絡:需選擇當前地域下已有的私有網路和子網,建立後不可修改。若在該地域下沒有 vpc 資源可跳轉到私有⽹絡控制檯新建 vpc。例項預設情況下只能監控本 vpc 網路的叢集,若您希望監控其他 vpc 叢集,您需要使⽤雲聯⽹等服務進⾏ vpc ⽹絡打通。
-
資料儲存時間:選擇資料儲存時間,可選 15天/ 3個⽉/ 6個⽉/⼀年。例項建立成功後將⾃動為您建立物件儲存 COS 儲存桶並按照實際資源使⽤情況計費。詳情請參見物件儲存計費概述。
-
Grafana元件:此處需要設定登入使用者名稱和密碼用於 Grafana 登陸。Grafana 預設只支援 vpc 內訪問,例項建立後,您可以根據業務需要開通 Grafana 外網訪問。
-
AlertManger:您可通過新增⾃定義的 AlertManger 地址,將例項產⽣的告警發往自建的 AlertManger。
基礎資訊
例項建立完成後,將處於執行中狀態,您可點選例項檢視其基本資訊。除了建立時指定的⼀些資訊外,還包含⼀些建立完成後提供的資訊:
-
物件儲存桶:雲原⽣監控使⽤物件儲存在進⾏資料持久化儲存,例項將在您賬號下建立⼀個物件儲存的桶⽤於儲存資料。
-
Prometheus 資料查詢地址:該接⼝⽤於提供資料查詢,targets 查詢,rules 查詢等。您可以使⽤該地址對接⾃建的 Grafana
-
Grafana:預設為您提供了內⽹地址,您可以選擇性開啟外⽹訪問,開啟後將⽣成固定的外⽹域名。
Prometheus資料查詢介面
Prometheus 資料查詢地址目前可支援以下幾個 path。
-
/api/v1/query:查詢最近⼀次抓取的資料。
-
/api/v1/query_range:查詢⼀段時間的資料。
-
/api/v1/targets:查詢監控目標的資訊。
由於例項可能關聯了多個叢集,您需要新增 cluster=[叢集型別]-[叢集id]引數,用於指定目標叢集:
TKE 叢集:/api/v1/targets?cluster=tke-cls-xxx
彈性叢集:/api/v1/targets?cluster=eks-cls-xxx
邊緣叢集:/api/v1/targets?cluster=tkeedge-cls-xxx
-
/api/v1/alerts:查詢告警狀態。
-
/api/v1/rules:查詢聚合和告警規則。
預設監控面板
例項建立的 Grafana 會提供⼀些常用的監控面板,包含了叢集綜合資訊,節點,工作負載,Pod 等。當您後續進行了叢集關聯後,被關聯叢集的資料就可以在預設監控面板中檢視。
多叢集管理
關聯叢集
例項建立完成後,您需要需要監控的叢集進行關聯。關聯之後,您就可以在叢集中通過建立 SerivceMonitor,PodMonitor 等進行採集配置。
TKE 的標準叢集以及彈性叢集需要與該例項 Prometheus 所屬同一個 VPC 網路,邊緣叢集則不受這個限制。
採集配置
Prometheus Operator
雲原生監控為使用者提供了與 Prometheus Operator 相容的能力,您可以修改 Prometheus Operator 所定義的採集相關的 CRD,例如 Prometheus CRD,ServiceMonitor,PodMonitor 等。具體可以參考【prometheus operator】
修改採集週期和額外 labels
當成功關聯集群后,會在被關聯叢集的 prom-xxx 名稱空間下建立⼀個名如【tke-cls-xxx】的 Prometheus CRD 資源。可以通過修改此資源來修改全域性採集配置,額外的 labels 等等。
ServiceMonitor
雲原⽣監控⽀持建立【ServiceMonitor】,您可以通過控制檯建立,也可以直接在叢集⾥建立 ServiceMonitor。
選擇該叢集中的任意 service 自動聚和成 Yaml。
PodMonitor
雲原監控支援建立【PodMonitor】,您可以通過控制檯建立,也可以直接在叢集⾥建立 PodMonitor。
Rawjob
雲原⽣監控⽀持直接建立 Prometheus 原⽣的 job,您可以通過控制檯建立,也可以通過修改叢集中 prom-xxx 名稱空間下的 promtheus-config secret 來達到同樣效果
最終配置
您可以在控制檯的叢集資料採集配置右上⻆看到最終⽣成的 Prometheus 配置⽂件
您也可以在被關聯叢集的 prom-xxx 名稱空間下,通過檢視 prometheus-tke-cls-xxx 的 secret 來檢視最終配置
掛載⽂件到採集器
在配置採集項的時候,您可能需要為配置提供⼀些⽂件,例如證書,您可以通過以下⽅式向採集器掛載⽂件,⽂件的更新會實時同步到採集器內:
-
prom-xxx 名稱空間下的 configmap 打上以下的 label:
prometheus.tke.tencent.cloud.com/scrape-mount = "true"
。其中所有的 key 就會被掛載到採集器的路徑
/etc/prometheus/configmaps/[configmap-name]/
。 -
prom-xxx 名稱空間下的 secret 打上以下的 label:
prometheus.tke.tencent.cloud.com/scrape-mount = "true"
其中所有的 key 就會被掛載到採集器的路徑
/etc/prometheus/secret/[secret-name]/
預設採集配置
叢集被關聯後,雲原⽣監控會在被關聯叢集內建立預設的採集配置。將安裝以下兩個元件
-
kube-state-metrics:在 kube-system 下將安裝【kube-state-metrics】元件。
-
node exporter: 在 kube-system 下將安裝【node exporter】元件。
將新增以下采集項:
將新增以下聚合規則:
檢視 targets
您可以通過控制檯【檢視 targets ⽬標】來檢視當前所有被監控的物件的狀態。
聚合規則
簡介
聚合規則⽤於使⽤ PromQL 來⽣成新的指標,聚合規則將以 30 秒為週期進⾏計算。
建立聚合規則
告警
簡介
告警規則⽤於定義告警,告警規則將以 30 秒為週期進⾏計算。
建立告警規則
您可以通過控制檯來建立告警規則,⼀個告警可以配置多條規則:
-
名稱:為⽤戶⾃定義告警名稱
-
規則名稱:⽤於識別規則,可通過該名稱在 Grafana 中檢視其告警狀態
-
PromQL:規則語句
-
Labels:在傳送告警時將額外帶上,這⾥的 Labels ⽆法在告警內容中引⽤
-
告警內容:⽤於⽣成告警內容的模板,您可以使⽤ {{$value}} 來引⽤告警觸發時的值,也可以使⽤ {{$labels.label-name}} 來引⽤某個 label 的值
-
持續時間:當規則處於告警狀態時間⼤於該值時才會觸發告警,配置告警規則時,您還需要配置對應的告警渠道資訊
檢視告警歷史
您可以在告警歷史界⾯查詢告警歷史記錄,預設查詢近 24 ⼩時的告警記錄,您可以通過時間篩選來查詢⽬標範圍內的記錄,您可以通過通過右邊搜尋欄進⾏模糊過濾。
在叢集內建立聚合或告警規則
您可以通過在叢集內直接建立【PrometheusRule】來建立告警和聚合規則
-
預設會⾃動在規則的 PromQL 中注⼊ Prometheus CRD 中的 externalLables,從⽽使得該規則只對本叢集⽣效,關閉 externalLabels 注⼊可以通過在【PrometheusRule】中打上以下 annottation 來關閉注⼊:
prometheus.tke.tencent.cloud.com/disable-labels-inject=""
-
若您建立的是告警規則,可通過新增以下 annotation 來指定告警渠道:
prometheus.tke.tencent.cloud.com/notification-inject="渠道id"
其中,渠道 id 即為控制檯建立告警規則時所⽣成的告警 id。
因此,若您想使⽤叢集內告警規則,您需要在控制檯⾄少建立⼀起告警。
模板功能
簡介
模板一共分成兩種型別,聚合規則和告警策略模板、資料採集模板。用於管理多叢集 prometheus 配置,並支援一鍵同步升級等功能。
建立模板
您可以通過控制檯來建立模板,既可以複製已有模板,也可以建立一個空模板,然後新增自定義配置。
其中聚合規則和告警策略模板、資料採集等配置寫法保持一致。
-
名稱:模板名稱。
-
型別:預設模板只允許進行復制,不允許編輯和刪除。
-
關聯 Prometheus 例項數目:模板綁定了 Prometheus 例項的數目。
-
關聯 Prometheus Agent 數目:模板綁定了 Prometheus 例項的數目。
-
版本:代表當前模板的版本。
關聯例項列表
告警和聚合模板的關聯例項列表,在這個列表中,能夠對繫結的多個 Prometheus 例項進行同步告警策略和聚合規則。
關聯例項
支援同時關聯多個地域的 Prometheus 例項或者多個地域的叢集,從而達到一鍵同步,管理多個叢集的效果。
如果對模板解除關聯則所有模板相關配置被清除且不可恢復。
總結
本文詳細介紹了雲原生監控服務的基本功能和使用方式,在原有監控、採集、儲存、告警、圖表等能力的基礎上再增加了模板功能,使得支援對多叢集架構服務進行監控。
【騰訊雲原生】雲說新品、雲研新術、雲遊新活、雲賞資訊,掃碼關注同名公眾號,及時獲取更多幹貨!!