使用 Prometheus Operator 構建 Kubernetes 監控系統

本文主要介紹使用 Prometheus 監控 Kubernetes 的最佳實踐,藉助 Prometheus Operator 和 Helm 快速完成 Kubernetes 集羣的監控。

Prometheus Operator 是 SRE 的一種實踐,一種新的軟件類型,大大簡化了在 Kubernetes 上部署、管理和運行 Prometheus 和 Alertmanager 集羣,同時還保持 Kubernetes 原生配置項,和 Kubernetes 無縫貼合。

什麼是 Prometheus?

Prometheus 是由 SoundCloud 開源的監控告警解決方案,從 2012 年開始編寫代碼,再到 2015 年 github 上開源以來,已經吸引了 9k+ 關注,以及很多大公司的使用;2016 年 Prometheus 成爲繼 k8s 後,第二名 CNCF(Cloud Native Computing Foundation) 成員。

作爲新一代開源解決方案,很多理念與 Google SRE 運維之道不謀而合。比如 Operator 的概念:將複雜運維工作固化到 Operator 軟件實體中。

Prometheus 主要功能

  • 多維 數據模型(時序由 metric 名字和 k/v 的 labels 構成)。
  • 靈活的查詢語句(PromQL)。
  • 無依賴存儲,支持 local 和 remote 不同模型。
  • 採用 http 協議,使用 pull 模式,拉取數據,簡單易懂。
  • 監控目標,可以採用服務發現或靜態配置的方式。
  • 支持多種統計數據模型,圖形化友好。

Prometheus 核心組件

Prometheus 架構

在這裏插入圖片描述
從架構圖也可以看出 Prometheus 的主要模塊包含,Server, Exporters, Pushgateway, PromQL, Alertmanager, WebUI 等。
各組件之間的協同邏輯:

  1. Prometheus server 定期從靜態配置的 targets 或者服務發現的 targets 拉取數據。
  2. 當新拉取的數據大於配置內存緩存區的時候,Prometheus 會將數據持久化到磁盤(如果使用 remote storage 將持久化到雲端)。
  3. Prometheus 可以配置 rules,然後定時查詢數據,當條件觸發的時候,會將 alert 推送到配置的 Alertmanager。
  4. Alertmanager 收到警告的時候,可以根據配置,聚合,去重,降噪,最後發送警告。
  5. 可以使用 API,Prometheus Console 或者 Grafana 查詢和聚合數據。

什麼是 Operator?

Operator 是 CoreOs 提出的一個概念,也是 SRE 的一種實踐,通過開發軟件的方式將複雜運維工作固化到 Operator 中。
Operator 是一種新的基於 Kubernetes 平臺的軟件類型,主要解決 Kubernetes 中某些複雜應用的運維部書工作,利用 Kubernetes 的 Resources 和 Controllers 兩種資源對象實現 Operator,Resources 描述期望的目標狀態,Controllers 負責達成期望目標的具體實現邏輯。
在這裏插入圖片描述

Prometheus Operator 介紹

Prometheus 是一套開源的系統監控、報警、時間序列數據庫的組合,而 Prometheus Operator 是 CoreOS 開源的一套用於管理在 Kubernetes 集羣上的 Prometheus 控制器,它是爲了簡化在 Kubernetes 上部署、管理和運行 Prometheus 和 Alertmanager 集羣,同時還保持 Kubernetes 原生配置項,和 Kubernetes 無縫貼合。
在這裏插入圖片描述

  • Operator: Operator 資源會根據自定義資源(Custom Resource Definition / CRDs)來部署和管理 Prometheus Server,同時監控這些自定義資源事件的變化來做相應的處理,是整個系統的控制中心。
  • Prometheus: Prometheus 資源是聲明性地描述 Prometheus 部署的期望狀態。
  • Prometheus Server: Operator 根據自定義資源 Prometheus 類型中定義的內容而部署的 Prometheus Server 集羣,這些自定義資源可以看作是用來管理 Prometheus Server 集羣的 StatefulSets 資源。
  • ServiceMonitor: ServiceMonitor 也是一個自定義資源,它描述了一組被 Prometheus 監控的 targets 列表。該資源通過 Labels 來選取對應的 Service Endpoint,讓 Prometheus Server 通過選取的 Service 來獲取 Metrics 信息。
  • Service: kubernetes 的 service 資源,提供 metrics 接口,供 Prometheus 抓取。
  • Alertmanager: Alertmanager 也是一個自定義資源類型,由 Operator 根據資源描述內容來部署 Alertmanager 集羣。

Helm 部署 Prometheus Operator

使用 GitHub 提供的 prometheus-operator Chart 部署,該 Chart 提供了一套完整的 Prometheus 監控棧,不需要其他任何安裝部署操作,一個 Chart 3 分鐘搞定一切工作。

helm install --name kube-prometheus stable/prometheus-operator --namespace monitoring

測試訪問:
Grafana UI

kubectl port-forward <grafna pod> --address 0.0.0.0 -n monitoring 3000:3000

在這裏插入圖片描述
Prometheus UI

kubectl port-forward <prometheus pod> --address 0.0.0.0 -n monitoring 9090:9090

在這裏插入圖片描述

參考文檔

https://coreos.com/blog/the-prometheus-operator.html
https://github.com/coreos/kube-prometheus
https://github.com/coreos/prometheus-operator
https://blog.csdn.net/aixiaoyang168/article/details/81661459
https://blog.51cto.com/3241766/2450776
https://www.chenshaowen.com/blog/quickly-deploy-prometheus-using-helm-and-operator.html

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