1. 程式人生 > 其它 >Prometheus+Grafana監控mysql主從故障告警

Prometheus+Grafana監控mysql主從故障告警

因業務需求,mysql主從常常出現同步故障,故研究了Prometheus來做監控報警。

1 Prometheus介紹

1.1什麼是Prometheus?

Prometheus是由SoundCloud開發的開源監控報警系統和時序列資料庫(TSDB)。Prometheus使用Go語言開發,是Google BorgMon監控系統的開源版本。
2016年由Google發起Linux基金會旗下的原生雲基金會(Cloud Native Computing Foundation), 將Prometheus納入其下第二大開源專案。
Prometheus目前在開源社群相當活躍。
Prometheus和Heapster(Heapster是K8S的一個子專案,用於獲取叢集的效能資料。)相比功能更完善、更全面。Prometheus效能也足夠支撐上萬臺規模的叢集。


1.2 Prometheus的特點

一個多維資料模型,具有由指標名稱和鍵/值對標識的時間序列資料
PromQL,一種 利用這種維度的靈活查詢語言
不依賴分散式儲存;單個伺服器節點是自治的
時間序列收集通過 HTTP 上的拉模型發生
通過中間閘道器支援推送時間序列
通過服務發現或靜態配置發現目標
多種圖形和儀表板支援模式

1.3 Prometheus監控基本原理

Prometheus的基本原理是通過HTTP協議週期性抓取被監控元件的狀態,任意元件只要提供對應的HTTP介面就可以接入監控。不需要任何SDK或者其他的整合過程。這樣做非常適合做虛擬化環境監控系統,比如VM、Docker、Kubernetes等。輸出被監控元件資訊的HTTP介面被叫做exporter 。目前網際網路公司常用的元件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系統資訊(包括磁碟、記憶體、CPU、網路等等)。

1.4 Prometheus服務過程

Prometheus Daemon 負責定時去目標上抓取metrics(指標)資料,每個抓取目標需要暴露一個http服務的介面給它定時抓取。Prometheus支援通過配置檔案、文字檔案、Zookeeper、Consul、DNS SRV Lookup等方式指定抓取目標。Prometheus採用PULL的方式進行監控,即伺服器可以直接通過目標PULL資料或者間接地通過中間閘道器來Push資料。
Prometheus在本地儲存抓取的所有資料,並通過一定規則進行清理和整理資料,並把得到的結果儲存到新的時間序列中。
Prometheus通過PromQL和其他API視覺化地展示收集的資料。Prometheus支援很多方式的圖表視覺化,例如Grafana、自帶的Promdash以及自身提供的模版引擎等等。Prometheus還提供HTTP API的查詢方式,自定義所需要的輸出。
PushGateway支援Client主動推送metrics到PushGateway,而Prometheus只是定時去Gateway上抓取資料。
Alertmanager是獨立於Prometheus的一個元件,可以支援Prometheus的查詢語句,提供十分靈活的報警方式。

下圖說明了 Prometheus 的架構及其一些生態系統元件:

1.5 Prometheus 元件

Prometheus 生態圈中包含了多個元件,其中許多元件是可選的:

Prometheus Server: 用於收集和儲存時間序列資料。
Client Library: 客戶端庫,為需要監控的服務生成相應的 metrics 並暴露給 Prometheus server。當 Prometheus server 來 pull 時,直接返回實時狀態的 metrics。
Push Gateway: 主要用於短期的 jobs。由於這類 jobs 存在時間較短,可能在 Prometheus 來 pull 之前就消失了。為此,這次 jobs 可以直接向 Prometheus server 端推送它們的 metrics。這種方式主要用於服務層面的 metrics,對於機器層面的 metrices,需要使用 node exporter。
Exporters: 用於暴露已有的第三方服務的 metrics 給 Prometheus。
Alertmanager: 從 Prometheus server 端接收到 alerts 後,會進行去除重複資料,分組,並路由到對收的接受方式,發出報警。常見的接收方式有:電子郵件,pagerduty,OpsGenie, webhook 等。
一些其他的工具。