因爲容器化和微服務的大力發展,Kubernetes基本已經統一了容器管理方案,當咱們使用Kubernetes來進行容器化管理的時候,全面監控Kubernetes也就成了咱們第一個須要探索的問題。咱們須要監控kubernetes的ingress、service、deployment、pod......等等服務,以達到隨時掌握Kubernetes集羣的內部情況。git
此文章是Prometheus監控系列的第一篇,目的也很明確,旨在於尋找一套可以勝任kubernetes集羣監控的架構。github
一、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
Google乾兒子,大廠維護,並且最重要的一點是完美支持Kubernetes
Prometheus對於應用層的監控,定義了一個良好的規範,只須要應用提供接口獲取日誌就能夠了
基礎設施層:監控各個主機服務器資源(包括Kubernetes的Node和非Kubernetes的Node),如CPU,內存,網絡吞吐和帶寬佔用,磁盤I/O和磁盤使用等指標。
中間件層:監控獨立部署於Kubernetes集羣以外的中間件,例如:MySQL、Redis、RabbitMQ、ElasticSearch、Nginx等。
Kubernetes集羣:監控Kubernetes集羣自己的關鍵指標
Kubernetes集羣上部署的應用:監控部署在Kubernetes集羣上的應用
基於以上三點,因此最終選擇使用Prometheus來監控Kubernetes集羣。
在具體討論Prometheus監控架構以前,再來看幾個實際的問題
若是有多個Kubernetes集羣,怎麼作?
多個Kubernetes集羣的監控數據怎麼處理?
告警應該怎麼集中並去重?
好在這些問題對Prometheus來講都不是難事,最終,咱們採起 Prometheus + kube-state-metrics + Alertmanager + Grafana 架構來作Kubernetes集羣監控。監控系統具體架構以下
使用這個架構,那上面所提到的三個問題將再也不是問題。
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、微信、釘釘、短信等方式。其實不止告警時會發送消息,還有其餘地方也會用到消息發送。