做者陳凱燁,騰訊雲前端開發工程師。負責 TKE 集羣,彈性集羣和雲原生監控等模塊控制檯開發。前端
Prometheus 是一套開源的系統監控報警框架。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成爲受歡迎度僅次於 Kubernetes 的項目。node
2020年11月20日,騰訊云云原生 Prometheus 服務正式開始免費公測。針對容器集羣監控場景,提供了一整套包括監控、採集、存儲、告警、圖表等能力的監控服務。經過獨立部署與被監控對象解耦合,使得不受監控對象性能、穩定性、可靠性等因素的影響,託管模式使得用戶無需部署運維 Prometheus 監控實例,解放了運維人力,而新推出的模板功能能夠解決在多個集羣之間粘貼複製配置的重複性工做問題,實現一鍵同步多個集羣配置,使得整個流程更專業、更可靠。本文會詳細介紹雲原生監控服務的基本功能以及使用方式。git
騰訊雲容器團隊的雲原生監控服務,產品目前已正式公測,歡迎讀者試用(傳送門:https://console.cloud.tencent.com/tke2/prometheus )。github
地域: 選擇您但願部署該實例的地域,實例建立後 地域⽆法修改,建議您根據所在地理位置選擇靠近業務的地域,可下降訪問延遲,提升數據上報速度。api
⽹絡:需選擇當前地域下已有的私有網絡和子網,建立後不可修改。若在該地域下沒有 vpc 資源可跳轉到私有⽹絡控制檯新建 vpc。實例默認狀況下只能監控本 vpc 網絡的集羣,若您但願監控其餘 vpc 集羣,您須要使⽤雲聯⽹等服務進⾏ vpc ⽹絡打通。網絡
數據存儲時間:選擇數據存儲時間,可選 15天/ 3個⽉/ 6個⽉/⼀年。實例建立成功後將⾃動爲您建立對象存儲 COS 存儲桶並按照實際資源使⽤狀況計費。詳情請參見對象存儲計費概述。架構
Grafana組件:此處須要設置登陸用戶名和密碼用於 Grafana 登錄。Grafana 默認只支持 vpc 內訪問,實例建立後,您能夠根據業務須要開通 Grafana 外網訪問。框架
實例建立完成後,將處於運行中狀態,您可點擊實例查看其基本信息。除了建立時指定的⼀些信息外,還包含⼀些建立完成後提供的信息:運維
Prometheus 數據查詢地址:該接⼝⽤於提供數據查詢,targets 查詢,rules 查詢等。您能夠使⽤該地址對接⾃建的 Grafanaide
Prometheus 數據查詢地址目前可支持如下幾個 path。
/api/v1/query:查詢最近⼀次抓取的數據。
/api/v1/query_range:查詢⼀段時間的數據。
因爲實例可能關聯了多個集羣,您須要添加 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:查詢告警狀態。
實例建立的 Grafana 會提供⼀些經常使用的監控面板,包含了集羣綜合信息,節點,工做負載,Pod 等。當您後續進行了集羣關聯後,被關聯集羣的數據就能夠在默認監控面板中查看。
實例建立完成後,您須要須要監控的集羣進行關聯。關聯以後,您就能夠在集羣中經過建立 SerivceMonitor,PodMonitor 等進行採集配置。
TKE 的標準集羣以及彈性集羣須要與該實例 Prometheus 所屬同一個 VPC 網絡,邊緣集羣則不受這個限制。
雲原生監控爲用戶提供了與 Prometheus Operator 兼容的能力,您能夠修改 Prometheus Operator 所定義的採集相關的 CRD,例如 Prometheus CRD,ServiceMonitor,PodMonitor 等。具體能夠參考【prometheus operator】
當成功關聯集羣后,會在被關聯集羣的 prom-xxx 命名空間下建立⼀個名如【tke-cls-xxx】的 Prometheus CRD 資源。能夠經過修改此資源來修改全局採集配置,額外的 labels 等等。
雲原⽣監控⽀持建立【ServiceMonitor】,您能夠經過控制檯建立,也能夠直接在集羣⾥建立 ServiceMonitor。
選擇該集羣中的任意 service 自動聚和成 Yaml。
雲原監控支持建立【PodMonitor】,您能夠經過控制檯建立,也能夠直接在集羣⾥建立 PodMonitor。
雲原⽣監控⽀持直接建立 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】組件。
將添加如下采集項:
將添加如下聚合規則:
您能夠經過控制檯【查看 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=""
prometheus.tke.tencent.cloud.com/notification-inject="渠道id"
模板一共分紅兩種類型,聚合規則和告警策略模板、數據採集模板。用於管理多集羣 prometheus 配置,並支持一鍵同步升級等功能。
您能夠經過控制檯來建立模板,既能夠複製已有模板,也能夠建立一個空模板,而後添加自定義配置。
其中聚合規則和告警策略模板、數據採集等配置寫法保持一致。
名稱:模板名稱。
類型:默認模板只容許進行復制,不容許編輯和刪除。
關聯 Prometheus 實例數目:模板綁定了 Prometheus 實例的數目。
關聯 Prometheus Agent 數目:模板綁定了 Prometheus 實例的數目。
告警和聚合模板的關聯實例列表,在這個列表中,可以對綁定的多個 Prometheus 實例進行同步告警策略和聚合規則。
支持同時關聯多個地域的 Prometheus 實例或者多個地域的集羣,從而達到一鍵同步,管理多個集羣的效果。
若是對模板解除關聯則全部模板相關配置被清除且不可恢復。
本文詳細介紹了雲原生監控服務的基本功能和使用方式,在原有監控、採集、存儲、告警、圖表等能力的基礎上再增長了模板功能,使得支持對多集羣架構服務進行監控。