一、Prometheus奏夫、Grafana介紹
Prometheus(普羅米修斯)是一套開源的監(jiān)控&報(bào)警&時(shí)間序列數(shù)據(jù)庫(kù)的組合刮吧,起始是由SoundCloud公司開發(fā)的移必。隨著發(fā)展承边,越來(lái)越多公司和組織接受采用Prometheus遭殉,社會(huì)也十分活躍,他們便將它獨(dú)立成開源項(xiàng)目博助,并且有公司來(lái)運(yùn)作险污。Google SRE的書內(nèi)也曾提到跟他們BorgMon監(jiān)控系統(tǒng)相似的實(shí)現(xiàn)是Prometheus。現(xiàn)在最常見的Kubernetes容器管理系統(tǒng)中富岳,通常會(huì)搭配Prometheus進(jìn)行監(jiān)控罗心。
Prometheus基本原理是通過HTTP協(xié)議周期性抓取被監(jiān)控組件的狀態(tài),這樣做的好處是任意組件只要提供HTTP接口就可以接入監(jiān)控系統(tǒng)城瞎,不需要任何SDK或者其他的集成過程。這樣做非常適合虛擬化環(huán)境比如VM或者Docker 疾瓮。
Prometheus應(yīng)該是為數(shù)不多的適合Docker脖镀、Mesos、Kubernetes環(huán)境的監(jiān)控系統(tǒng)之一。
輸出被監(jiān)控組件信息的HTTP接口被叫做exporter 蜒灰。目前互聯(lián)網(wǎng)公司常用的組件大部分都有exporter可以直接使用弦蹂,比如Varnish、Haproxy强窖、Nginx凸椿、MySQL、Linux 系統(tǒng)信息 (包括磁盤翅溺、內(nèi)存脑漫、CPU、網(wǎng)絡(luò)等等)咙崎,具體支持的源看:https://github.com/prometheus优幸。
與其他監(jiān)控系統(tǒng)相比,Prometheus的主要特點(diǎn)是:
1.一個(gè)多維數(shù)據(jù)模型(時(shí)間序列由指標(biāo)名稱定義和設(shè)置鍵/值尺寸)褪猛;
2.非常高效的存儲(chǔ)网杆,平均一個(gè)采樣數(shù)據(jù)占~3.5bytes左右,320萬(wàn)的時(shí)間序列伊滋,每30秒采樣碳却,保持60天,消耗磁盤大概228G笑旺;
3.一種靈活的查詢語(yǔ)言昼浦;
4.不依賴分布式存儲(chǔ),單個(gè)服務(wù)器節(jié)點(diǎn)燥撞;
5.時(shí)間集合通過HTTP上的PULL模型進(jìn)行座柱;
6.通過中間網(wǎng)關(guān)支持推送時(shí)間;
7.通過服務(wù)發(fā)現(xiàn)或靜態(tài)配置發(fā)現(xiàn)目標(biāo)物舒;
8.多種模式的圖形和儀表板支持色洞。
Grafana是一個(gè)跨平臺(tái)的開源的度量分析和可視化工具,可以通過將采集的數(shù)據(jù)查詢?nèi)缓罂梢暬恼故竟诳瑁⒓皶r(shí)通知火诸。它主要有以下六大特點(diǎn):
1、展示方式:快速靈活的客戶端圖表荠察,面板插件有許多不同方式的可視化指標(biāo)和日志置蜀,官方庫(kù)中具有豐富的儀表盤插件,比如熱圖悉盆、折線圖盯荤、圖表等多種展示方式;
2焕盟、數(shù)據(jù)源:Graphite秋秤,InfluxDB,OpenTSDB,Prometheus灼卢,Elasticsearch绍哎,CloudWatch和KairosDB等;
3鞋真、通知提醒:以可視方式定義最重要指標(biāo)的警報(bào)規(guī)則崇堰,Grafana將不斷計(jì)算并發(fā)送通知,在數(shù)據(jù)達(dá)到閾值時(shí)通過Slack涩咖、PagerDuty等獲得通知海诲;
4、混合展示:在同一圖表中混合使用不同的數(shù)據(jù)源抠藕,可以基于每個(gè)查詢指定數(shù)據(jù)源饿肺,甚至自定義數(shù)據(jù)源;
5盾似、注釋:使用來(lái)自不同數(shù)據(jù)源的豐富事件注釋圖表敬辣,將鼠標(biāo)懸停在事件上會(huì)顯示完整的事件元數(shù)據(jù)和標(biāo)記;
6零院、過濾器:Ad-hoc過濾器允許動(dòng)態(tài)創(chuàng)建新的鍵/值過濾器溉跃,這些過濾器會(huì)自動(dòng)應(yīng)用于使用該數(shù)據(jù)源的所有查詢。
二告抄、安裝Prometheus
安裝過程中涉及的yaml文件獲取地址:
鏈接: https://pan.baidu.com/s/12W5DGlVZqWYtMKVxgfR6GA 提取碼: 8uw8
1.在kubernetest集群中創(chuàng)建namespace
apiVersion: v1
kind: Namespace
metadata:
name: ns-monitor
labels:
name: ns-monitor
kubectl apply -f namespace.yaml
2.安裝node-exporter
在kubernetest集群中部署node-exporter撰茎,Node-exporter用于采集kubernetes集群中各個(gè)節(jié)點(diǎn)的物理指標(biāo),比如:Memory打洼、CPU等龄糊。可以直接在每個(gè)物理節(jié)點(diǎn)是直接安裝募疮,這里我們使用DaemonSet部署到每個(gè)節(jié)點(diǎn)上炫惩,使用 hostNetwork: true 和 hostPID: true 使其獲得Node的物理指標(biāo)信息,配置tolerations使其在master節(jié)點(diǎn)也啟動(dòng)一個(gè)pod阿浓。
kubectl apply -f node-exporter.yaml
檢驗(yàn)node-exporter是否成功運(yùn)行
[root@master1 ~]# kubectl get pod -n ns-monitor
NAME READY STATUS
grafana-677d945674-56m5n 1/1 Running
node-exporter-vkpt2 1/1 Running
node-exporter-zkh9s 1/1 Running
prometheus-6c9574d5ff-292bq 1/1 Running
[root@master1 ~]# kubectl get svc -n ns-monitor
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
grafana-service NodePort 10.96.101.190 <none> 3000:32405/TCP
node-exporter-service NodePort 10.107.147.241 <none> 9100:31672/TCP
prometheus-service NodePort 10.97.249.230 <none> 9090:30437/TCP
瀏覽器訪問: http://主機(jī)ip:31672/metrics
image.png
3.部署Prometheus pod
prometheus.yaml 中包含rbac認(rèn)證他嚷、ConfigMap等。
kubectl apply -f prometheus.yaml
檢驗(yàn)是否正常運(yùn)行
[root@master1 ~]# kubectl get pod -n ns-monitor
NAME READY STATUS
grafana-677d945674-56m5n 1/1 Running
node-exporter-vkpt2 1/1 Running
node-exporter-zkh9s 1/1 Running
prometheus-6c9574d5ff-292bq 1/1 Running
[root@master1 ~]# kubectl get svc -n ns-monitor
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
grafana-service NodePort 10.96.101.190 <none> 3000:32405/TCP
node-exporter-service NodePort 10.107.147.241 <none> 9100:31672/TCP
prometheus-service NodePort 10.97.249.230 <none> 9090:30437/TCP
瀏覽器訪問: http://主機(jī)ip:30437/graph
image.png
4.在kubernetest中部署grafana
kubectl apply -f grafana.yaml
檢驗(yàn)是否正常運(yùn)行
[root@master1 ~]# kubectl get pod -n ns-monitor
NAME READY STATUS
grafana-677d945674-56m5n 1/1 Running
node-exporter-vkpt2 1/1 Running
node-exporter-zkh9s 1/1 Running
prometheus-6c9574d5ff-292bq 1/1 Running
[root@master1 ~]# kubectl get svc -n ns-monitor
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
grafana-service NodePort 10.96.101.190 <none> 3000:32405/TCP
node-exporter-service NodePort 10.107.147.241 <none> 9100:31672/TCP
prometheus-service NodePort 10.97.249.230 <none> 9090:30437/TCP
瀏覽器訪問: http://主機(jī)ip:32405/graph/login 默認(rèn)用戶名和密碼:admin/admin
image.png
5.配置grafana數(shù)據(jù)源
把prometheus配置成數(shù)據(jù)源 :http://prometheus-service.ns-monitor:9090(下圖中的url填寫這個(gè))
image.png
image.png
image.png
6.導(dǎo)入Dashboard
把 kubernetes的Dashboard的模板導(dǎo)入進(jìn)來(lái)芭毙,直接把JSON格式內(nèi)容復(fù)制進(jìn)來(lái)筋蓖。
image.png
image.png
image.png
效果圖
image.png
image.png