1. 程式人生 > >Prometheus+Grafana+Alertmanager實現告警推送教程 ----- 圖文詳解

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

## 前言 本文主要介紹的是Prometheus採集資料,通過Grafana加上PromQL語句實現資料視覺化以及通過Alertmanage實現告警推送功能。溫馨提示,本篇文章特長,2w多的文字加上幾十張圖片,建議收藏觀看。 ## Prometheus 介紹 > 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 適用於微服務的體系架構。 **示例圖:** ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201130161151142.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FhendzeHBjbQ==,size_16,color_FFFFFF,t_70) ### Prometheus的適用場景 > 在選擇Prometheus作為監控工具前,要明確它的適用範圍,以及不適用的場景。 > Prometheus在記錄純數值時間序列方面表現非常好。它既適用於以伺服器為中心的監控,也適用於高動態的面向服務架構的監控。 > 在微服務的監控上,Prometheus對多維度資料採集及查詢的支援也是特殊的優勢。 > Prometheus更強調可靠性,即使在故障的情況下也能檢視系統的統計資訊。權衡利弊,以可能丟失少量資料為代價確保整個系統的可用性。因此,它不適用於對資料準確率要求100%的系統,比如實時計費系統(涉及到錢)。 ### Prometheus核心元件介紹 **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 UI是Prometheus內建的一個視覺化管理介面,通過Prometheus UI使用者能夠輕鬆的瞭解Prometheus當前的配置,監控任務執行狀態等。 通過Graph面板,使用者還能直接使用**PromQL**實時查詢監控資料。訪問ServerIP:9090/graph開啟WEB頁面,通過PromQL可以查詢資料,可以進行基礎的資料展示。 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201130161210554.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FhendzeHBjbQ==,size_16,color_FFFFFF,t_70) 如下所示,查詢主機負載變化情況,可以使用關鍵字node_load1可以查詢出Prometheus採集到的主機負載的樣本資料,這些樣本資料按照時間先後順序展示,形成了主機負載隨時間變化的趨勢圖表: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201130161230711.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FhendzeHBjbQ==,size_16,color_FFFFFF,t_70) ## Grafana介紹 > Grafana是一個跨平臺的開源的度量分析和視覺化工具,可以通過將採集的資料查詢然後視覺化的展示。Grafana提供了對prometheus的友好支援,各種工具幫助你構建更加炫酷的資料視覺化。 ### **Grafana特點** - 視覺化:快速和靈活的客戶端圖形具有多種選項。面板外掛為許多不同的方式視覺化指標和日誌。 - 報警:視覺化地為最重要的指標定義警報規則。Grafana將持續評估它們,併發送通知。 - 通知:警報更改狀態時,它會發出通知。接收電子郵件通知。 - 動態儀表盤:使用模板變數建立動態和可重用的儀表板,這些模板變數作為下拉選單出現在儀表板頂部。 - 混合資料來源:在同一個圖中混合不同的資料來源!可以根據每個查詢指定資料來源。這甚至適用於自定義資料來源。 - 註釋:註釋來自不同資料來源圖表。將滑鼠懸停在事件上可以顯示完整的事件元資料和標記。 - 過濾器:過濾器允許您動態建立新的鍵/值過濾器,這些過濾器將自動應用於使用該資料來源的所有查詢。 這裡我們使用上面Prometheus使用關鍵字node_load1來使用Grafana進行視覺化,點選側邊欄的加號圖示,然後單擊Dashboard點選建立,然後把剛剛Prometheus使用的查詢語句放到Metries,點選右上角的apply即可。 示例圖: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201130161311758.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FhendzeHBjbQ==,size_16,color_FFFFFF,t_70) ### Grafana UI 上面的示例中我們通過prometheus+grafana通過PromQL進行了簡單的伺服器負載的監控視覺化。我們也可以通過第三方提供視覺化JSON檔案來幫助我們快速實現伺服器、Elasticsearch、MYSQL等等監控。這裡我們在grafana提供的第三方dashboards的地址https://grafana.com/grafana/dashboards來下載對應的json檔案然後匯入到grafana實現伺服器的監控。 監控伺服器的示例圖: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201130230021844.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FhendzeHBjbQ==,size_16,color_FFFFFF,t_70) 除了服務端的監控,可以監控應用服務。Prometheus 監控應用的方式非常簡單,只需要程序暴露了一個用於獲取當前監控樣本資料的 HTTP 訪問地址。這樣的一個程式稱為Exporter,Exporter 的例項稱為一個 Target 。Prometheus 通過輪訓的方式定時從這些 Target 中獲取監控資料樣本,對於應用來講,只需要暴露一個包含監控資料的 HTTP 訪問地址即可,當然提供的資料需要滿足一定的格式,這個格式就是 Metrics 格式: metric name>{