1. 程式人生 > >Kubernetes 系列(五):Prometheus監控框架簡介

Kubernetes 系列(五):Prometheus監控框架簡介

viso 良好的 尋找 方案 msg list heap sql set

由於容器化和微服務的大力發展,Kubernetes基本已經統一了容器管理方案,當我們使用Kubernetes來進行容器化管理的時候,全面監控Kubernetes也就成了我們第一個需要探索的問題。我們需要監控kubernetes的ingress、service、deployment、pod......等等服務,以達到隨時掌握Kubernetes集群的內部狀況。

此文章是Prometheus監控系列的第一篇,目的也很明確,旨在於尋找一套能夠勝任kubernetes集群監控的架構。

k8s監控方案調研

1、cAdvisor + InfluxDB + Grafana

2、Heapster + InfluxDB + Grafana

3、Promethus + kube-state-metrics + Grafana

  • Grafana: 開源DashBoard,後端支持多種數據庫,如:Influxdb、Prometheus...,插件也比較多,功能強大。非常適合用於做展示。

  • InfluxDB: 開源時間序列數據庫,性能高效

  • cAdvisor: 來自 Google 的容器監控工具,也是 Kubelet 內置的容器資源收集工具。它會自動收集本機容器 CPU、內存、網絡和文件系統的資源占用情況,並對外提供 cAdvisor 原生的 API。隨 kubelet 啟動 --cadvisor-port = 1

技術分享圖片

  • Heapster: 由於 cAdvisor 只提供了單機的容器資源占用情況,而 Heapster 則提供了整個集群的資源監控(kubernetes 1.11 之前,hpa都是從heapster獲取數據),並支持持久化數據存儲到 InfluxDB

技術分享圖片

  • Promethues: 提供強大的數據采集、數據存儲、數據展示、告警等,天生完美支持kubernetes,CNCF基金會的第二個成員,第一個是Kubernetes。而且Prometheus裏面很多思想都來源於Google內部的監控系統Borgmon,可以說是Google的幹兒子。

技術分享圖片

    • kube-state-metrics在這裏作為prometheus的一個exporter來使用,提供deployment、daemonset、cronjob等服務的監控數據,由kubernestes官方提供,與prometheus緊密結合。 更多關於kube-state-metrics的信息:https://github.com/kubernetes/kube-state-metrics

Prometheus優勢

Prometheus和kubernetes相親相愛

Google幹兒子,大廠維護,而且最重要的一點是完美支持Kubernetes

規範定義

Prometheus對於應用層的監控,定義了一個良好的規範,只需要應用提供接口獲取日誌就可以了

Prometheus可以在各個層面實現監控,如下

  • 基礎設施層:監控各個主機服務器資源(包括Kubernetes的Node和非Kubernetes的Node),如CPU,內存,網絡吞吐和帶寬占用,磁盤I/O和磁盤使用等指標。

  • 中間件層:監控獨立部署於Kubernetes集群之外的中間件,例如:MySQL、Redis、RabbitMQ、ElasticSearch、Nginx等。

  • Kubernetes集群:監控Kubernetes集群本身的關鍵指標

  • Kubernetes集群上部署的應用:監控部署在Kubernetes集群上的應用

基於以上三點,所以最終選擇使用Prometheus來監控Kubernetes集群。

Kubernetes集群監控架構

在具體討論Prometheus監控架構之前,再來看幾個實際的問題

  1. 如果有多個Kubernetes集群,怎麽做?

  2. 多個Kubernetes集群的監控數據怎麽處理?

  3. 告警應該怎麽集中並去重?

好在這些問題對Prometheus來說都不是難事,最終,我們采取 Prometheus + kube-state-metrics + Alertmanager + Grafana 架構來做Kubernetes集群監控。監控系統具體架構如下

技術分享圖片

使用這個架構,那上面所提到的三個問題將不再是問題。

詳解

K8s集群:

k8s集群-1/-2/-3為需要被監控的集群,就是業務集群。每個集群內部都部署了一個Prometheus,主要由兩部分組成 prometheus-server + kube-state-metrics。

prometheus-server:使用一個帶RBAC權限的賬號采集集群中現有監控信息(其實是從cadvisor獲取)和節點信息。

kube-state-metrics:這裏作為prometheus的exporter使用。因為prometheus不能獲取集群中Deployment, Job, CronJob的監控信息。 部署kube-state-metrics的時候,svc一定要帶一個annotations:prometheus.io/scrape: ‘true‘(這非常重要

監控匯總

監控匯總其實就是一個Prometheus-server,用於將各個散落在各地的監控數據匯總起來,統一管理。

核心思想是利用Prometheus的federation機制,從其他集群pull數據。這樣其他集群的prometheus只需要短暫存儲數據,匯總之後再做長期存儲;同時還可以統一做告警判斷和數據展示。

展示面板

展示面板就是一個Grafana,支持使用Prometheus做為數據源進行繪圖展示。

告警處理

告警是利用Prometheus官方提供的Altermanager模塊。Alermanager模塊從Prometheus-Server接收告警信息,然後進行匯總、屏蔽、告警...等等操作。Alertmanager告警途徑支持有email、wechat、webhook、slack等等,非常豐富。但是這裏使用的是自身開發的Send_msg模塊。

消息發送

自主開發的消息發送模塊,集成email、微信、釘釘、短信等方式。其實不止告警時會發送消息,還有其他地方也會用到消息發送。

文章來源:https://mp.weixin.qq.com/s/iBQzN3DtIPa3wZ96d5Uvng

Kubernetes 系列(五):Prometheus監控框架簡介