如何優雅地使用雲原生 Prometheus 監控集羣

作者陳凱燁,騰訊雲前端開發工程師。負責 TKE 集羣,彈性集羣和雲原生監控等模塊控制檯開發。

概述

Prometheus 是一套開源的系統監控報警框架。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成爲受歡迎度僅次於 Kubernetes 的項目。

2020年11月20日,騰訊云云原生 Prometheus 服務正式開始免費公測。針對容器集羣監控場景,提供了一整套包括監控、採集、存儲、告警、圖表等能力的監控服務。通過獨立部署與被監控對象解耦合,使得不受監控對象性能、穩定性、可靠性等因素的影響,託管模式使得用戶無需部署運維 Prometheus 監控實例,解放了運維人力,而新推出的模板功能可以解決在多個集羣之間粘貼複製配置的重複性工作問題,實現一鍵同步多個集羣配置,使得整個流程更專業、更可靠。本文會詳細介紹雲原生監控服務的基本功能以及使用方式。

騰訊雲容器團隊的雲原生監控服務,產品目前已正式公測,歡迎讀者試用(傳送門:https://console.cloud.tencent.com/tke2/prometheus )。

基本功能

實例管理

創建實例

  1. 登錄容器服務控制檯,選擇左側導航欄中的【雲原⽣監控】
  2. 點擊⻚⾯上⽅的【新建】按鈕,進⼊【創建監控實例】⻚⾯。如下圖所示:
    1
  3. 在【創建監控實例⻚⾯】,根據提示設置集羣信息。如下圖所示:
    2
  • 地域: 選擇您希望部署該實例的地域,實例創建後 地域⽆法修改,建議您根據所在地理位置選擇靠近業務的地域,可降低訪問延遲,提高數據上報速度。

  • ⽹絡:需選擇當前地域下已有的私有網絡和子網,創建後不可修改。若在該地域下沒有 vpc 資源可跳轉到私有⽹絡控制檯新建 vpc。實例默認情況下只能監控本 vpc 網絡的集羣,若您希望監控其他 vpc 集羣,您需要使⽤雲聯⽹等服務進⾏ vpc ⽹絡打通。

  • 數據存儲時間:選擇數據存儲時間,可選 15天/ 3個⽉/ 6個⽉/⼀年。實例創建成功後將⾃動爲您創建對象存儲 COS 存儲桶並按照實際資源使⽤情況計費。詳情請參見對象存儲計費概述。

  • Grafana組件:此處需要設置登錄用戶名和密碼用於 Grafana 登陸。Grafana 默認只支持 vpc 內訪問,實例創建後,您可以根據業務需要開通 Grafana 外網訪問。

  • AlertManger:您可通過添加⾃定義的 AlertManger 地址,將實例產⽣的告警發往自建的 AlertManger。

基礎信息

實例創建完成後,將處於運行中狀態,您可點擊實例查看其基本信息。除了創建時指定的⼀些信息外,還包含⼀些創建完成後提供的信息:

3

  • 對象存儲桶:雲原⽣監控使⽤對象存儲在進⾏數據持久化存儲,實例將在您賬號下創建⼀個對象存儲的桶⽤於存儲數據。
  • 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 等。當您後續進行了集羣關聯後,被關聯集羣的數據就可以在默認監控面板中查看。

4

5

多集羣管理

關聯集羣

實例創建完成後,您需要需要監控的集羣進行關聯。關聯之後,您就可以在集羣中通過創建 SerivceMonitor,PodMonitor 等進行採集配置。

6

7

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 等等。
8

ServiceMonitor

雲原⽣監控⽀持創建【ServiceMonitor】,您可以通過控制檯創建,也可以直接在集羣⾥創建 ServiceMonitor。
9
10
選擇該集羣中的任意 service 自動聚和成 Yaml。


PodMonitor

雲原監控支持創建【PodMonitor】,您可以通過控制檯創建,也可以直接在集羣⾥創建 PodMonitor。
11
12

Rawjob

雲原⽣監控⽀持直接創建 Prometheus 原⽣的 job,您可以通過控制檯創建,也可以通過修改集羣中 prom-xxx 命名空間下的 promtheus-config secret 來達到同樣效果
13

最終配置

您可以在控制檯的集羣數據採集配置右上⻆看到最終⽣成的 Prometheus 配置⽂件
14
您也可以在被關聯集羣的 prom-xxx 命名空間下,通過查看 prometheus-tke-cls-xxx 的 secret 來查看最終配置
15


掛載⽂件到採集器

在配置採集項的時候,您可能需要爲配置提供⼀些⽂件,例如證書,您可以通過以下⽅式向採集器掛載⽂件,⽂件的更新會實時同步到採集器內:

  • 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】組件。

將添加以下采集項:

16

17

將添加以下聚合規則:

18

查看 targets

您可以通過控制檯【查看 targets ⽬標】來查看當前所有被監控的對象的狀態。

19

20

聚合規則

簡介

聚合規則⽤於使⽤ PromQL 來⽣成新的指標,聚合規則將以 30 秒爲週期進⾏計算。

創建聚合規則

21

告警

簡介

告警規則⽤於定義告警,告警規則將以 30 秒爲週期進⾏計算。

創建告警規則

您可以通過控制檯來創建告警規則,⼀個告警可以配置多條規則:
22

  • 名稱:爲⽤戶⾃定義告警名稱

  • 規則名稱:⽤於識別規則,可通過該名稱在 Grafana 中查看其告警狀態

  • PromQL:規則語句

  • Labels:在發送告警時將額外帶上,這⾥的 Labels ⽆法在告警內容中引⽤

  • 告警內容:⽤於⽣成告警內容的模板,您可以使⽤ {{$value}} 來引⽤告警觸發時的值,也可以使⽤ {{$labels.label-name}} 來引⽤某個 label 的值

  • 持續時間:當規則處於告警狀態時間⼤於該值時纔會觸發告警,配置告警規則時,您還需要配置對應的告警渠道信息

查看告警歷史

您可以在告警歷史界⾯查詢告警歷史記錄,默認查詢近 24 ⼩時的告警記錄,您可以通過時間篩選來查詢⽬標範圍內的記錄,您可以通過通過右邊搜索欄進⾏模糊過濾。

23

在集羣內創建聚合或告警規則

您可以通過在集羣內直接創建【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。
    24
    因此,若您想使⽤集羣內告警規則,您需要在控制檯⾄少創建⼀起告警。


模板功能

簡介

模板一共分成兩種類型,聚合規則和告警策略模板、數據採集模板。用於管理多集羣 prometheus 配置,並支持一鍵同步升級等功能。

創建模板

您可以通過控制檯來創建模板,既可以複製已有模板,也可以創建一個空模板,然後添加自定義配置。
25
26

其中聚合規則和告警策略模板、數據採集等配置寫法保持一致。

  • 名稱:模板名稱。

  • 類型:默認模板只允許進行復制,不允許編輯和刪除。

  • 關聯 Prometheus 實例數目:模板綁定了 Prometheus 實例的數目。

  • 關聯 Prometheus Agent 數目:模板綁定了 Prometheus 實例的數目。

  • 版本:代表當前模板的版本。

關聯實例列表

27

告警和聚合模板的關聯實例列表,在這個列表中,能夠對綁定的多個 Prometheus 實例進行同步告警策略和聚合規則。

關聯實例

28
29

支持同時關聯多個地域的 Prometheus 實例或者多個地域的集羣,從而達到一鍵同步,管理多個集羣的效果。

30

如果對模板解除關聯則所有模板相關配置被清除且不可恢復。

總結

本文詳細介紹了雲原生監控服務的基本功能和使用方式,在原有監控、採集、存儲、告警、圖表等能力的基礎上再增加了模板功能,使得支持對多集羣架構服務進行監控。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章