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

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

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

機器監(jiān)控效果
