天天CRUD的我,也想玩玩高大上的Prometheus
Prometheus:普羅米修斯,這名就有一種高大上的感覺。那么普羅米修斯到底是干嘛的呢?一句話總結(jié):Prometheus 是一個(gè)開源的服務(wù)監(jiān)控系統(tǒng)和時(shí)間序列數(shù)據(jù)庫(kù)。
抓住三個(gè)詞,即 開源,監(jiān)控,時(shí)間序列數(shù)據(jù)庫(kù)。
開源: 意味著我們可以免費(fèi)使用,有問題可以給社區(qū)提 Issues 尋求幫助,也可以自己提一些新功能或者 Bug 修復(fù)的 PR,共建強(qiáng)大的生態(tài)圈。
監(jiān)控: 意味著普羅米修斯可以用于監(jiān)控場(chǎng)景,監(jiān)控我們的服務(wù)器,監(jiān)控我們的數(shù)據(jù)庫(kù),監(jiān)控我們的應(yīng)用程序,它都用的上。
時(shí)間序列數(shù)據(jù)庫(kù): 維基百科上對(duì)于時(shí)間序列的定義是‘一系列數(shù)據(jù)點(diǎn)按照時(shí)間順序排列’,其實(shí)就是根據(jù)時(shí)間點(diǎn)存儲(chǔ)的信息,這些信息是不可變的。目前在監(jiān)控場(chǎng)景用的比較多。
對(duì)比一些老牌的監(jiān)控,比如 zabbix,Prometheus 近幾年在容器監(jiān)控方面表現(xiàn)的非常突出,人家就是干這個(gè)事情的。對(duì)于新的監(jiān)控選型,我覺得大家可以嘗試下 Prometheus。
雖然監(jiān)控這個(gè)工作屬于運(yùn)維這塊的,理應(yīng)要有專業(yè)的運(yùn)維工程師來做。我認(rèn)為作為一個(gè)后端開發(fā),也必須要懂得一些監(jiān)控相關(guān)的知識(shí)和技能儲(chǔ)備。萬一你去了創(chuàng)業(yè)公司,很可能什么工作都是你來做。
Prometheus 中的一些概念
Prometheus Server
Prometheus Server 是 Prometheus 組件中的核心部分,負(fù)責(zé)實(shí)現(xiàn)對(duì)監(jiān)控?cái)?shù)據(jù)的獲取,存儲(chǔ)以及查詢。
Exporter
Exporter 將監(jiān)控的數(shù)據(jù)采集起來,通過 HTTP 服務(wù)的形式暴露出去,Prometheus Server
會(huì)定時(shí)去拉取這些暴露的數(shù)據(jù)進(jìn)行監(jiān)控。
官方已經(jīng)提供了很多的 Exporter,比如 Mysql 等。下載地址:https://prometheus.io/download/
如果是監(jiān)控我們的應(yīng)用程序,可以在程序中集成官方的 SDK,自己埋點(diǎn)暴露出需要監(jiān)控的指標(biāo)即可。
PushGateway
PushGateway 作為一個(gè)獨(dú)立的服務(wù),大部分場(chǎng)景下我們用的是 pull 模式,也就是 Prometheus Server 去拉取 Exporter 提供的數(shù)據(jù),如果想使用 push 模式的話,可以將數(shù)據(jù) push 給 PushGateway,由 PushGateway 統(tǒng)一提供數(shù)據(jù)給 Server。
Service Discovery
服務(wù)發(fā)現(xiàn)是一個(gè)特別重要的功能,特別是在微服務(wù)場(chǎng)景下監(jiān)控顯得尤為重要。如果沒有服務(wù)發(fā)現(xiàn)的功能,那么每啟動(dòng)一個(gè)服務(wù)就需要去修改 Prometheus 的配置文件增加對(duì)應(yīng)的配置。
有了服務(wù)發(fā)現(xiàn)的功能,可以動(dòng)態(tài)的去發(fā)現(xiàn)服務(wù)信息,無需手動(dòng)修改配置。官方推薦用 Consul 作為服務(wù)發(fā)現(xiàn),像我們用 Nacos 的話,目前是不支持的,還需要想辦法進(jìn)行處理,比如定時(shí)拉取信息同步到文件中。
三劍客
Prometheus 目前的標(biāo)配都是和 Grafana,AlertManage 一起使用的,三劍客。跟 ELK 是一樣的,正所謂三個(gè)臭皮匠賽過諸葛亮。
- Prometheus
負(fù)責(zé)拉取監(jiān)控?cái)?shù)據(jù),存儲(chǔ)。
- Grafana
負(fù)責(zé)展示各種監(jiān)控指標(biāo),通過圖形化的方式。
Prometheus 負(fù)責(zé)賺錢養(yǎng)家,Grafana 負(fù)責(zé)美貌如花。
- AlertManage
負(fù)責(zé)異常告警,可以對(duì)接釘釘?shù)榷喾N消息通知。
生態(tài)系統(tǒng)組成

體驗(yàn)下 Prometheus 的魅力
最近閑來無事,我也打算學(xué)習(xí)下 Prometheus。一是為了擴(kuò)充自己的知識(shí)面,二也是看看能不能將其在工作中使用起來。
對(duì)于主機(jī),數(shù)據(jù)庫(kù)相關(guān)的監(jiān)控,很多公司都在云上面,云平臺(tái)本身就提供了很好的監(jiān)控告警體系,也沒必要再用 Prometheus 去搞一套了。
其他場(chǎng)景也是可以使用的,比如指標(biāo)監(jiān)控,監(jiān)控應(yīng)用的一些指標(biāo)。也可以用于業(yè)務(wù)指標(biāo)監(jiān)控,總之玩法很多,就看你怎么玩。
自己學(xué)習(xí)體驗(yàn)的話直接用 Docker 拉鏡像創(chuàng)建吧,簡(jiǎn)單,快速,方便。
部署 Prometheus
- docker run -d -p 9090:9090 -v /Users/yinjihuan/Downloads/prometheus/prometheus.yml:/etc/Prometheus/Prometheus.yml prom/prometheus
Prometheus.yml
- global:
- scrape_interval: 15s
- external_labels:
- monitor: 'codelab-monitor'
- scrape_configs:
- - job_name: 'prometheus'
- scrape_interval: 5s
- static_configs:
- - targets: ['localhost:9090']
- - job_name: beta_node
- static_configs:
- - targets: ['10.111.83.8:9100']
定義了兩個(gè)任務(wù),一個(gè)是 Prometheus 自己的監(jiān)控,它本身也是一個(gè)服務(wù),也會(huì)暴露出一些指標(biāo)信息。
一個(gè)是機(jī)器的監(jiān)控任務(wù),目標(biāo)需要配置 IP+PORT,對(duì)應(yīng)的機(jī)器上要裝 node_export 才行,通過 node_export 將機(jī)器的指標(biāo)數(shù)據(jù)暴露,Prometheus 才能拉取到進(jìn)行監(jiān)控。
部署 Grafana
- docker run -d -p 3000:3000 --name=grafana -v /Users/yinjihuan/Downloads/Grafana-storage:/var/lib/grafana grafana/grafana
部署 node_export
從官網(wǎng)下載對(duì)應(yīng)的 node_export:https://prometheus.io/download/#node_exporter
解壓后直接啟動(dòng)即可,nohup ./node_exporter & 啟動(dòng),默認(rèn)端口 9100。此機(jī)器 IP 就是上面 beta_node 中的 IP10.111.83.8。
配置 Grafana 圖表
訪問 localhost:3000 就是 Grafana 的主頁(yè),然后在設(shè)置里面創(chuàng)建一個(gè)數(shù)據(jù)源,指向 Prometheus 的地址。

然后導(dǎo)入一個(gè)你喜歡的圖表進(jìn)行關(guān)聯(lián)即可,圖表可以去https://grafana.com/grafana/dashboards?search=node進(jìn)行搜索,比如搜 node 就會(huì)展示所有 node_export 相關(guān)的圖表,每個(gè)圖表有一個(gè)編號(hào),直接根據(jù)編號(hào) load 即可,需要聯(lián)網(wǎng)。

機(jī)器監(jiān)控效果
