天天看點

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

本文主要介紹的是Prometheus采集資料,通過Grafana加上PromQL語句實作資料可視化以及通過Alertmanage實作告警推送功能。溫馨提示,本篇文章特長,2w多的文字加上幾十張圖檔,建議收藏觀看。

Prometheus 是一套開源的系統監控報警架構。它啟發于 Google 的 borgmon 監控系統,由工作在 SoundCloud 的 google 前員工在 2012 年建立,作為社群開源項目進行開發,并于 2015 年正式釋出。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成為受歡迎度僅次于 Kubernetes 的項目。

作為新一代的監控架構,Prometheus 具有以下特點:

強大的多元度資料模型: 時間序列資料通過 metric 名和鍵值對來區分。 所有的 metrics 都可以設定任意的多元标簽。

資料模型更随意,不需要刻意設定為以點分隔的字元串。 可以對資料模型進行聚合,切割和切片操作。

支援雙精度浮點類型,标簽可以設為全unicode。 靈活而強大的查詢語句(PromQL):在同一個查詢語句,可以對多個 metrics進行乘法、加法、連接配接、取分數位等操作。

易于管理: Prometheus server是一個單獨的二進制檔案,可直接在本地工作,不依賴于分布式存儲。 高效:平均每個采樣點僅占 3.5 bytes,且一個 Prometheus server 可以處理數百萬的 metrics。 使用 pull模式采集時間序列資料,這樣不僅有利于本機測試而且可以避免有問題的伺服器推送壞的 metrics。 可以采用 push gateway 的方式把時間序列資料推送至 Prometheus server 端。 可以通過服務發現或者靜态配置去擷取監控的 targets。

有多種可視化圖形界面。 易于伸縮。 需要指出的是,由于資料采集可能會有丢失,是以 Prometheus 不适用對采集資料要 100%

準确的情形。但如果用于記錄時間序列資料,Prometheus 具有很大的查詢優勢,此外,Prometheus 适用于微服務的體系架構。

示例圖:

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
在選擇Prometheus作為監控工具前,要明确它的适用範圍,以及不适用的場景。 Prometheus在記錄純數值時間序列方面表現非常好。它既适用于以伺服器為中心的監控,也适用于高動态的面向服務架構的監控。 在微服務的監控上,Prometheus對多元度資料采集及查詢的支援也是特殊的優勢。 Prometheus更強調可靠性,即使在故障的情況下也能檢視系統的統計資訊。權衡利弊,以可能丢失少量資料為代價確定整個系統的可用性。是以,它不适用于對資料準确率要求100%的系統,比如實時計費系統(涉及到錢)。

Prometheus Server:

Prometheus Server是Prometheus元件中的核心部分,負責實作對監控資料的擷取,存儲以及查詢。 Prometheus Server可以通過靜态配置管理監控目标,也可以配合使用Service Discovery的方式動态管理監控目标,并從這些監控目标中擷取資料。其次Prometheus Server需要對采集到的監控資料進行存儲,Prometheus Server本身就是一個時序資料庫,将采集到的監控資料按照時間序列的方式存儲在本地磁盤當中。最後Prometheus Server對外提供了自定義的PromQL語言,實作對資料的查詢以及分析。 Prometheus Server内置的Express Browser UI,通過這個UI可以直接通過PromQL實作資料的查詢以及可視化。 Prometheus Server的聯邦叢集能力可以使其從其他的Prometheus Server執行個體中擷取資料,是以在大規模監控的情況下,可以通過聯邦叢集以及功能分區的方式對Prometheus Server進行擴充。

Exporters:

Exporter将監控資料采集的端點通過HTTP服務的形式暴露給Prometheus Server,Prometheus Server通過通路該Exporter提供的Endpoint端點,即可擷取到需要采集的監控資料。 一般來說可以将Exporter分為2類: 直接采集:這一類Exporter直接内置了對Prometheus監控的支援,比如cAdvisor,Kubernetes,Etcd,Gokit等,都直接内置了用于向Prometheus暴露監控資料的端點。 間接采集:間接采集,原有監控目标并不直接支援Prometheus,是以我們需要通過Prometheus提供的Client Library編寫該監控目标的監控采集程式。例如: Mysql Exporter,JMX Exporter,Consul Exporter等。

PushGateway:

在Prometheus Server中支援基于PromQL建立告警規則,如果滿足PromQL定義的規則,則會産生一條告警,而告警的後續處理流程則由AlertManager進行管理。在AlertManager中我們可以與郵件,Slack等等内置的通知方式進行內建,也可以通過Webhook自定義告警處理方式。

Service Discovery:

服務發現在Prometheus中是特别重要的一個部分,基于Pull模型的抓取方式,需要在Prometheus中配置大量的抓取節點資訊才可以進行資料收集。有了服務發現後,使用者通過服務發現和注冊的工具對成百上千的節點進行服務注冊,并最終将注冊中心的位址配置在Prometheus的配置檔案中,大大簡化了配置檔案的複雜程度, 也可以更好的管理各種服務。 在衆多雲平台中(AWS,OpenStack),Prometheus可以 通過平台自身的API直接自動發現運作于平台上的各種服務,并抓取他們的資訊Kubernetes掌握并管理着所有的容器以及服務資訊,那此時Prometheus隻需要與Kubernetes打交道就可以找到所有需要監控的容器以及服務對象. Consul(官方推薦)等服務發現注冊軟體 通過DNS進行服務發現 通過靜态配置檔案(在服務節點規模不大的情況下)

Prometheus UI是Prometheus内置的一個可視化管理界面,通過Prometheus UI使用者能夠輕松的了解Prometheus目前的配置,監控任務運作狀态等。 通過Graph面闆,使用者還能直接使用PromQL實時查詢監控資料。通路ServerIP:9090/graph打開WEB頁面,通過PromQL可以查詢資料,可以進行基礎的資料展示。

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

如下所示,查詢主機負載變化情況,可以使用關鍵字node_load1可以查詢出Prometheus采集到的主機負載的樣本資料,這些樣本資料按照時間先後順序展示,形成了主機負載随時間變化的趨勢圖表:

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Grafana是一個跨平台的開源的度量分析和可視化工具,可以通過将采集的資料查詢然後可視化的展示。Grafana提供了對prometheus的友好支援,各種工具幫助你建構更加炫酷的資料可視化。

可視化:快速和靈活的用戶端圖形具有多種選項。面闆插件為許多不同的方式可視化名額和日志。

報警:可視化地為最重要的名額定義警報規則。Grafana将持續評估它們,并發送通知。

通知:警報更改狀态時,它會發出通知。接收電子郵件通知。

動态儀表盤:使用模闆變量建立動态和可重用的儀表闆,這些模闆變量作為下拉菜單出現在儀表闆頂部。

混合資料源:在同一個圖中混合不同的資料源!可以根據每個查詢指定資料源。這甚至适用于自定義資料源。

注釋:注釋來自不同資料源圖表。将滑鼠懸停在事件上可以顯示完整的事件中繼資料和标記。

過濾器:過濾器允許您動态建立新的鍵/值過濾器,這些過濾器将自動應用于使用該資料源的所有查詢。

這裡我們使用上面Prometheus使用關鍵字node_load1來使用Grafana進行可視化,點選側邊欄的加号圖示,然後單擊Dashboard點選建立,然後把剛剛Prometheus使用的查詢語句放到Metries,點選右上角的apply即可。

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

上面的示例中我們通過prometheus+grafana通過PromQL進行了簡單的伺服器負載的監控可視化。我們也可以通過第三方提供可視化JSON檔案來幫助我們快速實作伺服器、Elasticsearch、MYSQL等等監控。這裡我們在grafana提供的第三方dashboards的位址https://grafana.com/grafana/dashboards來下載下傳對應的json檔案然後導入到grafana實作伺服器的監控。

監控伺服器的示例圖:

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

除了服務端的監控,可以監控應用服務。Prometheus 監控應用的方式非常簡單,隻需要程序暴露了一個用于擷取目前監控樣本資料的 HTTP 通路位址。這樣的一個程式稱為Exporter,Exporter 的執行個體稱為一個 Target 。Prometheus 通過輪訓的方式定時從這些 Target 中擷取監控資料樣本,對于應用來講,隻需要暴露一個包含監控資料的 HTTP 通路位址即可,當然提供的資料需要滿足一定的格式,這個格式就是 Metrics 格式: metric name>{=, ...} 。label name是标簽,label value是标簽的值。

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

grafana監控springboot應用實作效果圖:

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

Prometheus以及相關元件使用的是2.x版本,Grafana使用的是7.x版本。

下載下傳位址推薦使用清華大學或華為的開源鏡像站。

下載下傳位址:

https://prometheus.io/download/

https://mirrors.tuna.tsinghua.edu.cn/grafana/

Prometheus以及相關元件百度網盤位址:

連結:https://pan.baidu.com/s/1btErwq8EyAzG2-34lwGO4w

提取碼:4nlh

将下載下傳好的Prometheus檔案解壓

輸入

然後移動到/opt/prometheus檔案夾裡面,沒有該檔案夾則建立

在prometheus-2.19.3.linux-amd64檔案夾目錄下找到prometheus.yml配置檔案并更改

prometheus.yml檔案配置如下:

在/opt/prometheus/prometheus-2.19.3.linux-amd64的目錄下輸入:

啟動成功之後,在浏覽器上輸入 ip+9090可以檢視相關資訊。

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

将下載下傳下來的grafana-7.1.1-1.x86_64.rpm的檔案通過apm方式安裝

輸入:

進行安裝

如果出現如下錯誤:

一個依賴包沒有安裝,需要先安裝這個依賴包,然後再安裝grafana

root使用者下啟動

啟動成功之後,在浏覽器上輸入 ip+3000可以檢視相關資訊

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

将下載下傳好的Alertmanager檔案解壓

啟動成功之後,在浏覽器上輸入 ip+9093可以檢視相關資訊

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

将下載下傳好的pushgateway檔案解壓

tar -zxvf pushgateway-1.2.0.linux-amd64.tar.gz

啟動成功之後,在浏覽器上輸入 ip+9091可以檢視相關資訊

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

将下載下傳好的Node_export檔案解壓

啟動成功之後,在浏覽器上輸入 ip+9100可以檢視相關資訊

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

Prometheus界面位址: ip+9090。

這裡我就使用圖檔加上注釋來進行講解。

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

內建的元件需要下載下傳對應export服務并啟動運作,并且在prometheus的配置中進行添加!

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

first_rules.yml的配置。

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

相關文檔:https://prometheus.io/docs/prometheus/latest/getting_started/

Grafanf 界面位址: ip+3000

初始賬号密碼: admin, admin

這裡我依舊用圖檔加注釋來進行講解,想必這樣會更容易了解吧。。。

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

1.添加資料源

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

2.選擇prometheus

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

3.點選建立儀表盤

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

4.點選建立

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

5.輸入node_load1表示語句,填寫相關資訊,點選apply完成,并将名稱儲存為Test

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

6.點選搜尋Test,點選就可以檢視

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

注:需提前添加好資料源。

1.點選左上角的加号,點選import

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

線上模式

位址:https://grafana.com/grafana/dashboards

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

離線模式

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

監控示例:

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

監控告警實作需要依賴 Alertmanager,已經相關的元件,比如上述執行個體中的監控伺服器應用的node_server元件。

需要安裝Alertmanager,這裡因為郵件發送比較簡單,是以這裡我就直接貼配置了,其中帶有xxx字元的參數是需要根據情況進行更改的。下面的企業微信告警同理。

Alertmanagers服務的alertmanager.yml的配置如下:

注: smtp_from、smtp_auth_username、to的郵箱可以填寫同一個,smtp_auth_password填寫鑒權碼,需要開啟POS3。

如果不知道怎麼開啟POS3,可以檢視我的這篇文章: https://www.cnblogs.com/xuwujing/p/10945698.html

Prometheus服務的Prometheus.yml配置如下:

注:targets如果有多個配置的話,在後面加上其他服務的節點即可。alertmanagers最好寫伺服器的ip,不然可能會出現告警資料無法發送的情況。

配置了Prometheus.yml之後,我們還需要配置告警的規則,也就是觸發條件,達到條件之後就進行觸發。我們建立一個first_rules.yml,用于檢測伺服器挂掉的時候進行發送消息

first_rules.yml告警配置:

注:job等于的服務名稱填寫Prometheus.yml配置對應的名稱,比如這裡設定的server對應Prometheus.yml配置的server。

依次啟動prometheus、altermanagers、node_server服務,檢視告警,然後停止node_export服務,等待一段時間在檢視。

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

和上面的示例操作基本一緻,主要是配置的差別。

1.在企業微信中建立一個應用,并得到secret、corp_id和agent_id配置。

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

2.然後修改alertmanager.yml配置,alertmanager.yml配置如下:

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

配置成功之後,操作和上述郵件發送的一緻,即可在企業微信看到如下資訊。

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

如果覺得上述的示例不好友好的話,我們也可以制定告警模闆。

添加告警模闆:

在alertmanagers的檔案夾下建立一個template檔案夾,然後在該檔案夾建立一個微信告警的模闆wechat.tmpl,添加如下配置:

然後再到alertmanager.yml 添加如下配置:

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

效果圖:

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus 監控應用的方式非常簡單,隻需要程序暴露了一個用于擷取目前監控樣本資料的 HTTP 通路位址。這樣的一個程式稱為Exporter,Exporter 的執行個體稱為一個 Target 。Prometheus通過輪訓的方式定時從這些 Target 中擷取監控資料樣本,對于應用來講,隻需要暴露一個包含監控資料的 HTTP通路位址即可,當然提供的資料需要滿足一定的格式,這個格式就是 Metrics 格式: metric name>{=, ...} 。label name是标簽,label value是标簽的值。

Springboot應用實作步驟

1.在pom檔案添加

2.在代碼中添加如下配置:

3.在異常進行中添加如下記錄:

4.在prometheus的配置中添加springboot應用服務監控

5.Prometheu.yml配置如下:

規則檔案配置如下:

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

6.在prometheus監控即可檢視

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

企業微信告警效果圖:

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

監控的springboot項目位址:https://github.com/xuwujing/springBoot-study

Prometheus資料源的配置主要分為靜态配置和動态發現, 常用的為以下幾類:

static_configs: 靜态服務發現

file_sd_configs: 檔案服務發現

dns_sd_configs: DNS 服務發現

kubernetes_sd_configs: Kubernetes 服務發現

consul_sd_configs:Consul 服務發現(推薦使用)

file_sd_configs的方式提供簡單的接口,可以實作在單獨的配置檔案中配置拉取對象,并監視這些檔案的變化并自動加載變化。基于這個機制,我們可以自行開發程式,監控監控對象的變化自動生成配置檔案,實作監控對象的自動發現。

在prometheus檔案夾目錄下建立targets.json檔案

配置如下:

然後在prometheus目錄下新增如下配置:

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

這是本人整理的一些服務應用告警的配置,也歡迎大家共同讨論一些常用的相關配置。

記憶體告警設定

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解
Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

磁盤設定:

總量百分比設定:

Prometheus+Grafana+Alertmanager實作告警推送教程 ----- 圖文詳解

檢視某一目錄的磁盤使用百分比

正規表達式來比對多個挂載點

(node_filesystem_size_bytes{mountpoint="/|/run"}-node_filesystem_free_bytes{mountpoint="/|/run"}) / node_filesystem_size_bytes{mountpoint=~"/|/run"} * 100

預計多長時間磁盤爆滿

predict_linear(node_filesystem_free_bytes {mountpoint ="/"}[1h], 43600) < 0 predict_linear(node_filesystem_free_bytes {job="node"}[1h], 43600) < 0
100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) * 100)
(node_memory_MemFree_bytes+node_memory_Cached_bytes+node_memory_Buffers_bytes) / node_memory_MemTotal_bytes * 100
100 -
100 - (node_filesystem_free_bytes{mountpoint="/",fstype=~"ext4|xfs"} / node_filesystem_size_bytes{mountpoint="/",fstype=~"ext4|xfs"} * 100)

這段時間比較忙,ELK相關得等待一段時間在進行更新,雖然發表的部落格才對應去年整理的部落格。。。。

本篇文章準備了好久,邊整理編寫,沒想到寫了這麼多。不過感覺這樣也不錯,一次寫出來或許比分開一次次的寫對讀者而言要好上不上,畢竟不用一篇篇的去找了。

原創不易,如果感覺不錯,希望給個推薦!您的支援是我寫作的最大動力!

版權聲明:

作者:虛無境

部落格園出處:http://www.cnblogs.com/xuwujing

CSDN出處:http://blog.csdn.net/qazwsxpcm

掘金出處:https://juejin.im/user/5ae45d5bf265da0b8a6761e4    

個人部落格出處:http://www.panchengming.com

如果你對生活感覺到了絕望,請不要氣餒。因為這樣隻會讓你更加絕望!

所謂的希望往往都是在絕望中萌發的,是以,請不要放棄希望!

繼續閱讀