天天看點

Prometheus 監控工具詳細介紹與安裝

前言

本篇文章介紹 k8s叢集中部署 prometheus、grafana、alertmanager,并且配置 prometheus 的動态、靜态服務發現,實作對容器、實體節點、service、pod 等資源名額監控,并在Grafana 的 web界面展示 prometheus 的監控名額,然後通過配置自定義告警規則,通過 alertmanager 實作 qq、釘釘、微信報警。

Prometheus 監控工具介紹

Prometheus是一個最初在SoundCloud上建構的開源系統監視和警報工具包。

自2012年成立以來,許多公司群組織都采用了Prometheus,該項目擁有一個非常活躍的開發人員和使用者社群。它現在是一個獨立的開源項目,可以獨立于任何公司進行維護。為了強調這一點,并澄清項目的治理結構,Prometheus 于2016年加入 雲計算本地計算基金會,作為繼Kubernetes之後的第二個托管項目。

​​https://prometheus.io​​

​​https://github.com/prometheus​​

特征

Prometheus的主要特點是:

  • 多元資料模型:由度量名稱和鍵值對辨別的時間序列資料
  • 支援多種exporter采集資料
  • PromQL:一種靈活的查詢語言,可以利用多元資料完成複雜的查詢
  • 不依賴分布式存儲,單個伺服器節點可直接工作(不需要安裝資料庫,直接使用即可,内置內建了資料庫不需要重新的部署)
  • 基于HTTP的pull方式采集時間序列資料
  • 推送時間序列資料通過PushGateway元件支援,目标主機上報資料到PushGateway,普羅米修斯從PushGateway拉取資料,這個是可以跨網段的。
  • 通過服務發現或靜态配置發現目标
  • 多種圖形模式及儀表盤支援(grafana)
  • 高效的存儲,每個采集資料占用3.5bytes左右,300萬的時間序列,30s的時間間隔,保留60天,消耗磁盤大約200G
  • 做高可用,對資料進行異地備份。聯邦叢集,部署多套普羅米修斯,每套普羅米修斯可以在不同的機房,然後将這些普羅米修斯彙總到一個普羅米修斯,那麼就可以将各個地方的資料,整體收集上來了。

 Prometheus元件與架構

Prometheus 監控工具詳細介紹與安裝

                                                                                                                                                                                            Prometheus 監控工具架構圖 

Prometheus生态系統由多個元件組成,其中許多元件是可選的:

  1. 主要的Prometheus server,用于存儲時間序列資料。
  2. 用于檢測應用程式代碼的用戶端庫。
  3. 用于支援short-lived工作的推送網關(push gateway)。
  4. 針對HAProxy,StatsD,Graphite等服務的exporters。
  5. 一個alertmanager處理警報管理器。
  6. 各種支援工具

 大多數Prometheus元件都是用Go編寫的,是以很容易建構和部署為靜态二進制檔案。

具體元件的作用:

• Prometheus Server:收集名額和存儲時間序列資料,并提供查詢接口(采集,存儲,查詢)

• ClientLibrary:用戶端庫

• Push Gateway:短期存儲名額資料。主要用于臨時性的任務,各個目标主機可以上報資料到pushgateway,,然後prometheus server統一從pushgateway拉取資料

• Exporters:采集已有的第三方服務監控名額并暴露metrics(類似于zabbix agent,但是exporter有很多種,針對不同的監控名額)

• Alertmanager:從prometheus server端收到alters之後,會進行去重,分組,并且路由到接收方,發出報警,常見的接收方式有:電子郵件,微信,釘釘

• Web UI:簡單的Web控制台

普羅米修斯服務端是内置了TSDB的資料庫,是存儲在本地的檔案系統當中。存儲了采集被監控端資料名額。

擷取名額有兩種方式:

  • 一種直接是從pushgateway這裡擷取被監控名額,這是一個獨立的元件,主要完成短周期任務暴露的名額,比如定時任務。(短周期任務不是每分鐘都有的名額,可能在運作任務的時候才會産生名額。是以可以将臨時的名額彙總到pushgateway,然後有pushgateway統一的暴露給服務端去采集)
  • 另外一種就是主要使用的,持久性的應用,比如nginx,mysql還要微服務jar包,這些都屬于持久性運作任務的。

使用這種任務的監控就是采用exporter方式了。會配置exporter這樣一個元件,主要是用來采集名額暴露給服務端。

Prometheus 根據配置的作業,直接從資料源pull拉取或者通過中間推送網關(push gateway),擷取路徑成本Metrics。它在本地存儲所有擷取的樣本,并在此資料上運作規則,以從現有資料聚合和記錄新的時間序列,或者生成警報。Grafana或其他API使用者可用于可視化收集的資料。

服務端采集好之後就會存儲在tsdb資料庫當中,可以通過其ui去檢視,因為其通過了http服務就可以通路其ui了。在ui上可以通過promql完成資料的查詢。(export--->prometheus(TSDB)---->promsql)

告警是由altermanager提供的,在普羅米修斯這裡定義告警規則,普羅米修斯這裡會周期的評估目前采集的名額是否觸發了告警規則,如果觸發了會将事件推送給altermanger。altermanger會根據自己相關的邏輯處理後發給接收人,提供email webhook,是以告警是由單獨的元件完成的。(告警規則在普羅米修斯裡面定義,觸發了告警推送給altermanager)

普羅米修斯實作了服務的發現,也就是可以自動的找到被監控端,這個需要在普羅米修斯的配置檔案裡面去配置。有了服務發現就不要一個一個的去配置了,讓被監控端自動納入監控。

普羅米修斯從目标主機拉取資料的時候有兩種方式,一種是靜态的,也就是我們部署exporter,靜态的采集名額,也可以配置服務發現,自動的發現名額資料。通過服務發現和exporter采集到的資料的方式都是采用了預設的pull方式拉取名額的,也可以使用pushgateway上報到prometheus當中,通過在目标主機上面寫腳本的方式。

監控名額資料模型

資料模型:

• Prometheus将所有資料存儲為時間序列(存儲的時候都會記錄時間,并且存儲到時序的資料庫裡面,也就是内置的TSDB)

• 具有相同度量名稱以及标簽屬于同一個名額(名額名稱是一樣,但是标簽是不一樣的)

• 每個時間序列都由度量标準名稱和一組鍵值對(稱為标簽)唯一辨別,

通過标簽查詢指定名額。

名額格式  名額名稱加上多個标簽

<metric name>{<label name>=<label value>,...}      

再配置被監控端這裡要配置監控誰,在配置被監控端,必須要暴露名額出來,這種名額以https的方式給暴露出來,暴露出來之後在配置檔案當中配置被監控端,最後就會被普羅米修斯給采集到,如果以上正确配置

在普羅米修斯的圖形界面targets可以看到被監控端,也可以通過名額名稱檢視采集的資料了。

Prometheus 監控工具詳細介紹與安裝

這個就相當于資料庫,可以提供promql來查詢資料,并且通過圖表繪制出來

Prometheus 監控工具詳細介紹與安裝

Prometheus 部署

• 二進制部署

https://prometheus.io/docs/prometheus/latest/getting_started/     下載下傳位址

• Docker部署

​​https://prometheus.io/docs/prometheus/latest/installation/​​

通路位址:​​http://IP:9090​​

Prometheus 監控工具詳細介紹與安裝
[root@localhost ~]# ls
anaconda-ks.cfg  prometheus-2.23.0.linux-amd64.tar.gz
[root@localhost ~]# mv prometheus-2.23.0.linux-amd64 /usr/local/prometheus
[root@localhost ~]# cd /usr/local/prometheus/
[root@localhost prometheus]# ls
console_libraries  consoles  LICENSE  NOTICE  prometheus  prometheus.yml  promtool      

prometheus 主程式

promtool 檢查普羅米修斯的工具,主要是用于檢查普羅米修斯配置檔案的文法

Prometheus啟動

./premetheus -h 指令行常用參數:

• --config.file="prometheus.yml" # 指定配置檔案

• --web.listen-address= "0.0.0.0:9090" # 監聽位址和端口

• --log.level=info # 日志級别

• --alertmanager.timeout=10s # 與報警元件的逾時時間

• --storage.tsdb.path="data/ " # 資料目錄

• --storage.tsdb.retention.time=15d # 資料儲存時間,預設15天(到時候會在普羅米修斯目錄下生成data目錄用來儲存資料,資料存儲時間是15天,會定期的删除,也可以自己設定儲存一個月)

 直接啟動,檢視監聽端口

[root@localhost prometheus]# ./prometheus      

可以看到監聽的端口是9090 

[root@localhost ~]# netstat -tpln | grep pr

tcp6       0      0 :::9090                 :::*                    LISTEN      26554/./prometheus      

浏覽器上通路你的主機IP加端口即可

Prometheus 監控工具詳細介紹與安裝

Alters 如果你在這配置了告警,那麼這裡會顯示告警資訊

Prometheus 監控工具詳細介紹與安裝

Graph 根據普羅米修斯的查詢語言會給你繪制一個圖,這裡主要是用于編寫promq表達式相關的調試

Status 檢視運作狀态。在status裡面的tragets裡面是普羅米修斯監控的目标,預設把自己也監控了,service discovery服務發現可以加入被監控端。這裡也可以看到告警規則,Configuration 檢視普羅米修斯的配置檔案内容

Prometheus 監控工具詳細介紹與安裝
[root@localhost ~]# cd /usr/local/prometheus/
[root@localhost prometheus]# ls
console_libraries  consoles  data  LICENSE  NOTICE  prometheus  prometheus.yml  promtool
[root@localhost prometheus]# cd data/
[root@localhost data]# ls
01ETPMX68HCBK9BN6DA4KPNPNK  chunks_head  lock  queries.active  wal      

使用系統的服務systemd管理來管理普羅米修斯

[root@localhost prometheus]# cat /usr/lib/systemd/system/prometheus.service
[Unit]
Description=prometheus #描述普羅米修斯,可以寫任意内容

[Service]   #啟動普羅米修斯具體路徑,如果需要什麼參數都可以在後面加上
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target      
[root@localhost prometheus]# systemctl daemon-reload
[root@localhost prometheus]# systemctl start prometheus
[root@localhost prometheus]# systemctl enable prometheus      
[root@localhost ~]# ps -ef | grep prome
root      63071      1  0 10:08 ?        00:00:12 /usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml
root      63472  62981  0 10:39 pts/0    00:00:00 grep --color=auto prome
[root@localhost ~]# kill -HUP 63071       

繼續閱讀