Prometheus:普羅米修斯,這名就有一種高大上的感覺。那麼普羅米修斯到底是幹嘛的呢?一句話總結:Prometheus 是一個開源的服務監控系統和時間序列資料庫。
抓住三個詞,即 開源,監控,時間序列資料庫。
開源: 意味著我們可以免費使用,有問題可以給社群提 Issues 尋求幫助,也可以自己提一些新功能或者 Bug 修復的 PR,共建強大的生態圈。
監控: 意味著普羅米修斯可以用於監控場景,監控我們的伺服器,監控我們的資料庫,監控我們的應用程式,它都用的上。
時間序列資料庫: 維基百科上對於時間序列的定義是‘一系列資料點按照時間順序排列’,其實就是根據時間點儲存的資訊,這些資訊是不可變的。目前在監控場景用的比較多。
對比一些老牌的監控,比如 zabbix,Prometheus 近幾年在容器監控方面表現的非常突出,人家就是幹這個事情的。對於新的監控選型,我覺得大家可以嘗試下 Prometheus。
雖然監控這個工作屬於運維這塊的,理應要有專業的運維工程師來做。我認為作為一個後端開發,也必須要懂得一些監控相關的知識和技能儲備。萬一你去了創業公司,很可能什麼工作都是你來做。
Prometheus 中的一些概念Prometheus ServerPrometheus Server 是 Prometheus 元件中的核心部分,負責實現對監控資料的獲取,儲存以及查詢。
ExporterExporter 將監控的資料採集起來,透過 HTTP 服務的形式暴露出去,Prometheus Server
會定時去拉取這些暴露的資料進行監控。
官方已經提供了很多的 Exporter,比如 Mysql 等。下載地址:https://prometheus.io/download/
如果是監控我們的應用程式,可以在程式中整合官方的 SDK,自己埋點暴露出需要監控的指標即可。
PushGatewayPushGateway 作為一個獨立的服務,大部分場景下我們用的是 pull 模式,也就是 Prometheus Server 去拉取 Exporter 提供的資料,如果想使用 push 模式的話,可以將資料 push 給 PushGateway,由 PushGateway 統一提供資料給 Server。
Service Discovery服務發現是一個特別重要的功能,特別是在微服務場景下監控顯得尤為重要。如果沒有服務發現的功能,那麼每啟動一個服務就需要去修改 Prometheus 的配置檔案增加對應的配置。
有了服務發現的功能,可以動態的去發現服務資訊,無需手動修改配置。官方推薦用 Consul 作為服務發現,像我們用 Nacos 的話,目前是不支援的,還需要想辦法進行處理,比如定時拉取資訊同步到檔案中。
三劍客Prometheus 目前的標配都是和 Grafana,AlertManage 一起使用的,三劍客。跟 ELK 是一樣的,正所謂三個臭皮匠賽過諸葛亮。
Prometheus負責拉取監控資料,儲存。
Grafana負責展示各種監控指標,透過圖形化的方式。
Prometheus 負責賺錢養家,Grafana 負責美貌如花。
AlertManage負責異常告警,可以對接釘釘等多種訊息通知。
生態系統組成體驗下 Prometheus 的魅力最近閒來無事,我也打算學習下 Prometheus。一是為了擴充自己的知識面,二也是看看能不能將其在工作中使用起來。
對於主機,資料庫相關的監控,很多公司都在雲上面,雲平臺本身就提供了很好的監控告警體系,也沒必要再用 Prometheus 去搞一套了。
其他場景也是可以使用的,比如指標監控,監控應用的一些指標。也可以用於業務指標監控,總之玩法很多,就看你怎麼玩。
自己學習體驗的話直接用 Docker 拉映象建立吧,簡單,快速,方便。
部署 Prometheusdocker 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 自己的監控,它本身也是一個服務,也會暴露出一些指標資訊。
一個是機器的監控任務,目標需要配置 IP+PORT,對應的機器上要裝 node_export 才行,透過 node_export 將機器的指標資料暴露,Prometheus 才能拉取到進行監控。
部署 Grafanadocker 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 的主頁,然後在設定裡面建立一個數據源,指向 Prometheus 的地址。
然後匯入一個你喜歡的圖表進行關聯即可,圖表可以去https://grafana.com/grafana/dashboards?search=node進行搜尋,比如搜 node 就會展示所有 node_export 相關的圖表,每個圖表有一個編號,直接根據編號 load 即可,需要聯網。
機器監控效果
後續其他的一些操作,等我體驗後再給大家分享踩坑記錄。