Prometheus 學(xué)習(xí)筆記

什么是 Prometheus

Prometheus 是開(kāi)源監(jiān)控告警解決方案确镊,CNCF(Cloud Native Computing Foundation) 成員。

主要特點(diǎn)

  • 一個(gè)帶時(shí)序數(shù)據(jù)庫(kù)(TSDB)的監(jiān)控系統(tǒng)伦仍。
  • 提供計(jì)量數(shù)據(jù)查詢功能迎变,實(shí)現(xiàn)了類似于 SQL 的查詢語(yǔ)法PromQL脓魏。
  • 采用 http 協(xié)議田炭,使用 pull 模式近她,拉取數(shù)據(jù),并將其保存在TSDB 中竟宋。
  • 監(jiān)控目標(biāo)提完,可以采用服務(wù)發(fā)現(xiàn)或靜態(tài)配置的方式。
  • 提供告警功能丘侠,能根據(jù)已定義的告警規(guī)則向外輸出告警徒欣。
  • 雖然它自己實(shí)現(xiàn)了一個(gè)面板,但還比較簡(jiǎn)陋∥献郑現(xiàn)在主流的做法是將它和 Grafana 結(jié)合打肝,由 Grafana 提供面板脂新。

它不是什么:

  • 它不處理日志或跟蹤(tracing),只處理計(jì)量數(shù)據(jù)粗梭。
  • 它本身不是專門的具有良好擴(kuò)展性的持久存儲(chǔ)争便。它自身的存儲(chǔ),被設(shè)計(jì)為用于短時(shí)間保存數(shù)據(jù)断医。

核心組件

  • Prometheus Server滞乙, 主要用于抓取數(shù)據(jù)和存儲(chǔ)時(shí)序數(shù)據(jù),另外還提供查詢和 Alert Rule 配置管理鉴嗤。
  • client libraries酷宵,用于對(duì)接 Prometheus Server, 可以查詢和上報(bào)數(shù)據(jù)。
  • push gateway 躬窜,用于批量浇垦,短期的監(jiān)控?cái)?shù)據(jù)的匯總節(jié)點(diǎn),主要用于業(yè)務(wù)數(shù)據(jù)匯報(bào)等荣挨。
  • 各種匯報(bào)數(shù)據(jù)的 exporters 男韧,例如匯報(bào)機(jī)器數(shù)據(jù)的 node_exporter, 匯報(bào) MongoDB 信息的 MongoDB exporter 等等。
  • 用于告警通知管理的 alertmanager 默垄。

基礎(chǔ)架構(gòu)

官方的架構(gòu)圖

architecture.png

關(guān)于架構(gòu)的說(shuō)明:

  • 左側(cè)是被監(jiān)控的對(duì)象(target)此虑,將監(jiān)控?cái)?shù)據(jù)采集的端點(diǎn)通過(guò)HTTP服務(wù)的形式暴露給Prometheus Server,Prometheus Server通過(guò)訪問(wèn)該Exporter提供的Endpoint端點(diǎn)口锭,即可獲取到需要采集的監(jiān)控?cái)?shù)據(jù)朦前。它一般分為2類:
    • 直接采集:直接內(nèi)置了對(duì)Prometheus監(jiān)控的支持,比如cAdvisor鹃操,Kubernetes韭寸,Etcd,Gokit等荆隘,都直接內(nèi)置了用于向Prometheus暴露監(jiān)控?cái)?shù)據(jù)的端點(diǎn)恩伺。
    • 間接采集:間接采集,原有監(jiān)控目標(biāo)并不直接支持Prometheus椰拒,因此我們需要通過(guò)Prometheus提供的Client Library編寫該監(jiān)控目標(biāo)的監(jiān)控采集程序晶渠。例如: Mysql Exporter,JMX Exporter燃观,Consul Exporter等褒脯。
  • 左上是PushGateway:由于Prometheus數(shù)據(jù)采集基于Pull模型進(jìn)行設(shè)計(jì),因此在網(wǎng)絡(luò)環(huán)境的配置上必須要讓Prometheus Server能夠直接與Exporter進(jìn)行通信缆毁。 當(dāng)這種網(wǎng)絡(luò)需求無(wú)法直接滿足時(shí)番川,就可以利用PushGateway來(lái)進(jìn)行中轉(zhuǎn)。可以通過(guò)PushGateway將內(nèi)部網(wǎng)絡(luò)的監(jiān)控?cái)?shù)據(jù)主動(dòng)Push到Gateway當(dāng)中爽彤。而Prometheus Server則可以采用同樣Pull的方式從PushGateway中獲取到監(jiān)控?cái)?shù)據(jù)。還有一種情況是生存周期很短的job缚陷,server 每次去pull 都抓不到數(shù)據(jù)适篙,這時(shí)候需要它主動(dòng)push 到一個(gè)中間位置(gateway)。
  • 中下部分是 Prometheus(開(kāi)源項(xiàng)目地址)箫爷。它是監(jiān)控系統(tǒng)的中心嚷节,負(fù)責(zé)策略數(shù)據(jù)收集、存儲(chǔ)虎锚、告警硫痰、查詢等。
  • 中上部分是服務(wù)發(fā)現(xiàn)窜护,用于動(dòng)態(tài)對(duì)象的監(jiān)控效斑。在很多現(xiàn)代系統(tǒng)中,被監(jiān)控對(duì)象不是靜態(tài)的柱徙,比如 K8S 中的Pod缓屠。對(duì)于動(dòng)態(tài)目標(biāo),按照靜態(tài)目標(biāo)那種監(jiān)控方式就很難了护侮,因此 Prometheus 提供了服務(wù)發(fā)現(xiàn)功能敌完。它能動(dòng)態(tài)地發(fā)現(xiàn)被監(jiān)控的對(duì)象,然后對(duì)它們做監(jiān)控羊初。
  • 右上是 AlertManager(開(kāi)源項(xiàng)目地址 )滨溉。它接受 Prometheus 根據(jù)所配置的告警規(guī)則發(fā)過(guò)來(lái)的告警,然后做去重长赞、分組和路由等處理晦攒,然后發(fā)給外部的接口組件,比如 PageDuty得哆、郵件系統(tǒng)等勤家。(告警部分也可以在Grafana部分完成)
  • 右下是 Grafana(開(kāi)源項(xiàng)目地址 )。它以Prometheus 為后端(它支持對(duì)接很多種后端)柳恐,根據(jù)配置伐脖,從中獲取數(shù)據(jù),然后以非常漂亮的界面(Dashboard)將數(shù)據(jù)呈現(xiàn)出來(lái)乐设。

Prometheus vs Zabbix

Zabbix Prometheus
更適合監(jiān)控物理機(jī)環(huán)境讼庇。 更適合云環(huán)境的監(jiān)控,對(duì) OpenStack近尚,Kubernetes 有更好的集成蠕啄。
安裝簡(jiǎn)單,zabbix-server 一個(gè)軟件包中包括了所有的服務(wù)端功能。 安裝相對(duì)復(fù)雜歼跟,監(jiān)控和媳、告警和界面都分屬于不同的組件。
圖形化界面比較成熟哈街,界面上基本上能完成全部的配置操作留瞳。 界面相對(duì)較弱,很多配置需要修改配置文件骚秦。

最核心的一點(diǎn)她倘,Prometheus對(duì)云環(huán)境支持更好,如果監(jiān)控物理機(jī)還是用Zabbix作箍。

OpenShift 提供了基于 Prometheus + Grafana 的監(jiān)控系統(tǒng)硬梁。針對(duì)每個(gè)需要被監(jiān)控的目標(biāo)(target),都利用了Prometheus提供的某個(gè)功能來(lái)實(shí)現(xiàn)對(duì)它的監(jiān)控胞得。也就是說(shuō)荧止,有現(xiàn)成的解決方案,不需要我們單獨(dú)配置阶剑。

安裝

Prometheus基于Golang編寫罩息,編譯后的軟件包,不依賴于任何的第三方依賴个扰。用戶只需要下載對(duì)應(yīng)平臺(tái)的二進(jìn)制包瓷炮,解壓并且添加基本的配置即可正常啟動(dòng)Prometheus Server。

我用二進(jìn)制方式递宅,在CentOS測(cè)試娘香,下載地址從官網(wǎng)獲取

$ wget https://github.com/prometheus/prometheus/releases/download/v2.12.0-rc.0/prometheus-2.12.0-rc.0.linux-amd64.tar.gz
$ tar zxf prometheus-2.12.0-rc.0.linux-amd64.tar.gz
$ cd prometheus-2.12.0-rc.0.linux-amd64
$ ./prometheus --config.file=prometheus.yml
level=info ts=2019-08-15T07:14:35.171Z caller=main.go:293 msg="no time or size retention was set so using the default time retention" duration=15d
level=info ts=2019-08-15T07:14:35.171Z caller=main.go:329 msg="Starting Prometheus" version="(version=2.12.0-rc.0, branch=HEAD, revision=eaf81808d5aa19ee4b9b8980ac5feeaec51408ac)"
...

查看

當(dāng) Prometheus 啟動(dòng)后,通過(guò)瀏覽器來(lái)訪問(wèn) http://IP:9090办龄,將看到如下頁(yè)面

1565855140014.png
                                                                                                                                                                                                                                                                                                                                                                                                               我們現(xiàn)在可以使用 `PromQL` (Prometheus Query Language)來(lái)查看烘绽,如果不知道怎么寫,可以查看 `http://IP:9090/metrics` 選擇一個(gè)metric 填進(jìn)去(也可以從Execute按鈕旁邊的下拉菜單選一個(gè))俐填。
1565855471420.png

還可以選旁邊的Graph(如下圖)看圖形界面安接。

1565855577724.png

如果要查詢99%的情況下如何,查詢語(yǔ)句改成

prometheus_target_interval_length_seconds{quantile="0.99"}

在console 的value 部分可以看到結(jié)果英融。

通過(guò)PromQL可以輕松回答類似于以下問(wèn)題:

  • 在過(guò)去一段時(shí)間中95%應(yīng)用延遲時(shí)間的分布范圍盏檐?
  • 預(yù)測(cè)在4小時(shí)后,磁盤空間占用大致會(huì)是什么情況驶悟?
  • CPU占用率前5位的服務(wù)有哪些胡野?(過(guò)濾)

更多的PromQL用法,參考這里痕鳍。

配置一個(gè)數(shù)據(jù)源(Go client library target)

去一個(gè)新VM(10.0.0.5)

Pometheus鼓勵(lì)用戶監(jiān)控服務(wù)的內(nèi)部狀態(tài)硫豆,基于Prometheus豐富的Client庫(kù)龙巨,用戶可以輕松的在應(yīng)用程序中添加對(duì)Prometheus的支持,從而讓用戶可以獲取服務(wù)和應(yīng)用內(nèi)部真正的運(yùn)行狀態(tài)熊响。這本質(zhì)上是白盒監(jiān)控旨别。

安裝Go 編譯器并配置

$ wget https://dl.google.com/go/go1.12.8.linux-amd64.tar.gz
$ sudo tar zxf go1.12.8.linux-amd64.tar.gz -C /usr/local
$ export PATH=$PATH:/usr/local/go/bin
$ export GOPATH=/usr/local/go

下載Go client lib,運(yùn)行幾個(gè)測(cè)試

$ git clone https://github.com/prometheus/client_golang.git
$ cd client_golang/examples/random
$ sudo /usr/local/go/bin/go get -d
$ sudo /usr/local/go/bin/go build
$ ./random -listen-address=:8080 &
$ ./random -listen-address=:8081 &
$ ./random -listen-address=:8082 &

服務(wù)器端查看新的數(shù)據(jù)源(target)

更新 prometheus.yml 文件的scrape_configs 部分汗茄,加上新的target

scrape_configs:
  - job_name:       'example-random'
    scrape_interval: 5s

    static_configs:
      - targets: ['10.0.0.5:8080', '10.0.0.5:8081']
        labels:
          group: 'production'

      - targets: ['10.0.0.5:8082']
        labels:
          group: 'canary'

重啟Prometheus秸弛,網(wǎng)頁(yè)查看,能找到新的機(jī)器剔难。

1565936113808.png

選擇 Status-> Targets 查看胆屿,更直觀一些

1565938394235.png

手工把target的進(jìn)程停掉奥喻,再查看偶宫,它們是DOWN的狀態(tài)。

1565938185143.png

配置規(guī)則(rules)把收集到的數(shù)據(jù)放到新的時(shí)序中

rules 存在的意義是跟 alert manager 結(jié)合著使用环鲤。rules 定義了什么條件下報(bào)警纯趋,而所謂計(jì)算警報(bào)規(guī)則,其實(shí)就是周期性地執(zhí)行一段 PromQL冷离,得到的查詢結(jié)果就是警報(bào)吵冒,具體查詢語(yǔ)句參考: https://prometheus.io/docs/prometheus/latest/querying/basics/

alert manager 定義了怎么報(bào)警(分組,抑制西剥,靜默)->不同接受者(郵件痹栖,微信,Jenkins)

創(chuàng)建新的規(guī)則文件 prometheus.rules.yml

groups:
- name: example
  rules:
  - record: job_service:rpc_durations_seconds_count:avg_rate5m
    expr: avg(rate(rpc_durations_seconds_count[5m])) by (job, service)

修改主配置文件 prometheus.yml 讓它讀取規(guī)則

rule_files:
  - "prometheus.rules.yml"

重啟瞭空,新的時(shí)序 job_service:rpc_durations_seconds_count:avg_rate5m可以查詢了揪阿。

網(wǎng)頁(yè)的Rules 也可以看到:

1565939821599.png

配置Node Exporter

這是最常見(jiàn)的組件,在vm 上安裝咆畏,負(fù)債監(jiān)控常規(guī)數(shù)據(jù)(CPU,Memory南捂,network,disk 等)

在Prometheus的架構(gòu)設(shè)計(jì)中,Prometheus Server并不直接服務(wù)監(jiān)控特定的目標(biāo)旧找,其主要任務(wù)負(fù)責(zé)數(shù)據(jù)的收集溺健,存儲(chǔ)并且對(duì)外提供數(shù)據(jù)查詢支持。因此為了能夠能夠監(jiān)控到某些東西钮蛛,如主機(jī)的CPU使用率鞭缭,我們需要使用到Exporter。Prometheus周期性的從Exporter暴露的HTTP服務(wù)地址(通常是/metrics)拉取監(jiān)控樣本數(shù)據(jù)魏颓。

客戶端安裝運(yùn)行

Node Exporter同樣采用Golang編寫缚去,并且不存在任何的第三方依賴,只需要下載琼开,解壓即可運(yùn)行易结。文件來(lái)源(Prometheus downloads page

$ wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
$ tar zxf node_exporter-0.18.1.linux-amd64.tar.gz
$ cd node_exporter-0.18.1.linux-amd64/
$ ./node_exporter &
$ curl http://localhost:9100/metrics

服務(wù)器端配置

為了能夠讓Prometheus Server能夠從當(dāng)前node exporter獲取到監(jiān)控?cái)?shù)據(jù),這里需要修改Prometheus配置文件 prometheus.yml

scrape_configs:
- job_name: 'node'
  static_configs:
  - targets: ['10.0.0.5:9100']

重啟服務(wù)。

$ ./prometheus --config.file=./prometheus.yml

網(wǎng)頁(yè)查看

1566200801839.png

Targets 中搞动,也能找到新的node

1566200896478.png

與Grafana集成

Prometheus 自帶的 Web 界面比較簡(jiǎn)單躏精,因?yàn)樗哪康氖菫榱思皶r(shí)查詢數(shù)據(jù),方便 PromeQL 調(diào)試鹦肿。

而在大多數(shù)場(chǎng)景下引入監(jiān)控系統(tǒng)通常還需要構(gòu)建可以長(zhǎng)期使用的監(jiān)控?cái)?shù)據(jù)可視化面板(Dashboard)矗烛。這時(shí)用戶可以考慮使用第三方的可視化工具如Grafana,Grafana是一個(gè)開(kāi)源的可視化平臺(tái)箩溃,并且提供了對(duì)Prometheus的完整支持瞭吃。

Grafana安裝

安裝方式參考官網(wǎng) official Grafana documentation.

wget https://dl.grafana.com/oss/release/grafana-6.3.3-1.x86_64.rpm 
sudo yum localinstall grafana-6.3.3-1.x86_64.rpm 

啟動(dòng)服務(wù)

$ sudo systemctl daemon-reload
$ sudo systemctl start grafana-server
$ sudo systmctl status grafana-server

網(wǎng)頁(yè)配置Prometheus源

訪問(wèn)http://localhost:3000就可以進(jìn)入到Grafana的界面中,默認(rèn)情況下使用賬戶admin/admin進(jìn)行登錄涣旨。在Grafana首頁(yè)中顯示默認(rèn)的使用向?qū)峒埽ǎ喊惭b、添加數(shù)據(jù)源霹陡、創(chuàng)建Dashboard和蚪、邀請(qǐng)成員、以及安裝應(yīng)用和插件等主要流程:

1565941162697.png
1565941235246.png
1566180458181.png

生成Dashboard

回首頁(yè)烹棉,再創(chuàng)建 Dashboard

1565941675253.png

Dashboard 中新的panel攒霹,使用query 方式,來(lái)源是Prometheus浆洗,metrics 是我們之前用過(guò)的 prometheus_target_interval_length_seconds

1565942462384.png

類似的方法催束,我們?cè)偬砑? job_service:rpc_durations_seconds_count:avg_rate5m

最后得到:

1565942690483.png

導(dǎo)入Dashboard

上面的方法,每個(gè)metrics都要自己填寫伏社,panel的排列也要自己調(diào)整抠刺,很麻煩。更簡(jiǎn)單的方式就是使用別人現(xiàn)成的模板洛口,模板可以從Grafana官網(wǎng)去找矫付,

1566203408160.png

針對(duì)Node Exporter 從上面的頁(yè)面找到Dashboard ID,用于之后的導(dǎo)入第焰。

1566203123822.png
1566204442804.png

看起來(lái)很專業(yè)的監(jiān)控圖表就出現(xiàn)了买优。


1566203704016.png

參考文檔

Prometheus實(shí)戰(zhàn)

Prometheus Getting Start

Prometheus 對(duì)比 Zabbix

Prometheus 入門與實(shí)踐

https://www.cnblogs.com/sammyliu/p/10155442.html
https://yunlzheng.gitbook.io/prometheus-book/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市挺举,隨后出現(xiàn)的幾起案子杀赢,更是在濱河造成了極大的恐慌,老刑警劉巖湘纵,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脂崔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡梧喷,警方通過(guò)查閱死者的電腦和手機(jī)砌左,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門脖咐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人汇歹,你說(shuō)我怎么就攤上這事屁擅。” “怎么了产弹?”我有些...
    開(kāi)封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵派歌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我痰哨,道長(zhǎng)胶果,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任斤斧,我火速辦了婚禮早抠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘折欠。我一直安慰自己贝或,他們只是感情好吼过,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布锐秦。 她就那樣靜靜地躺著,像睡著了一般盗忱。 火紅的嫁衣襯著肌膚如雪酱床。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天趟佃,我揣著相機(jī)與錄音扇谣,去河邊找鬼。 笑死闲昭,一個(gè)胖子當(dāng)著我的面吹牛罐寨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播序矩,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鸯绿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了簸淀?” 一聲冷哼從身側(cè)響起瓶蝴,我...
    開(kāi)封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎租幕,沒(méi)想到半個(gè)月后舷手,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡劲绪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年男窟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盆赤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡歉眷,死狀恐怖弟劲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情姥芥,我是刑警寧澤兔乞,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站凉唐,受9級(jí)特大地震影響庸追,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜台囱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一淡溯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧簿训,春花似錦咱娶、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至的榛,卻和暖如春琼了,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背夫晌。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工雕薪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晓淀。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓所袁,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親凶掰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子燥爷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容