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

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

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

k8s監控方案調研

一、cAdvisor + InfluxDB + Grafanaweb

二、Heapster + InfluxDB + Grafana數據庫

三、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

相關文章
相關標籤/搜索