天天看點

初試 Prometheus + Grafana 監控系統搭建并監控 Mysql

prometheus 是一套開源的系統監控、報警、時間序列資料庫的組合,最初有 soundcloud 開發的,後來随着越來越多公司使用,于是便獨立成開源項目。我們常用的 kubernetes 容器叢集管理中,通常會搭配 prometheus 一起來進行監控。prometheus 基本原理是通過 http 協定周期性抓取被監控元件的狀态,而輸出這些被監控的元件的 http 接口為 exporter,現在各個公司常用的 exporter 都已經提供了,可以直接安裝使用,如 haproxy_exporter、blockbox_exporter、mysqld_exporter、node_exporter 等等,更多支援的元件可檢視 這裡。

prometheus 官網架構圖如下:

初試 Prometheus + Grafana 監控系統搭建并監控 Mysql

prometheus 具有以下特點:

是一個時間序列由名額名稱和鍵值對定義的多元資料模型

支援靈活的查詢語言

不依賴分布式存儲,單個伺服器節點就可以

時間序列集合通過 http 上的 pull 模型來進行

支援通過中間網關推送時間

通過服務發現或靜态配置來發現目标

支援多種模式的圖形和儀表盤

grafana 是一個可視化儀表盤,它擁有美觀的圖示和布局展示,功能齊全的儀表盤和圖形編輯器,預設支援 cloudwatch、graphite、elasticsearch、influxdb、mysql、postgresql、prometheus、opentsdb 等作為資料源。我們可以将 prometheus 抓取的資料,通過 grafana 優美的展示出來,非常直覺。

本次示範環境,我是在本機 mac os 上操作,以下是安裝的軟體及版本:

go: go1.10.3 darwin/amd64

prometheus: 2.3.2.darwin-amd64

node_exporter: 0.16.0.darwin-amd64

mysqld_exporter: 0.11.0.darwin-amd64

grafana: 5.2.2.darwin-amd64

注意:這裡 prometheus、node_exporter 和 mysqld_exporter 都是 go 語言開發,其運作環境依賴 go,是以本機需要安裝好 go 環境,這裡忽略 go 的安裝過程,着重介紹下其他幾個的安裝配置過程。實際應用中,如果運作在 linux 環境下,以上各個軟體也要安裝系統對應版本。

prometheus 安裝方式有多種,可以二進制源碼安裝、docker 啟動安裝或源碼編譯安裝。

首先,下載下傳 prometheus 二進制源碼安裝包,可以通路 prometheus download 頁面下載下傳指定版本。

啟動 prometheus,使用預設配置檔案 prometheus.yml 啟動。

此時,prometheus 服務就在本地啟動起來了,浏覽器通路 http://localhost:9090 通路 web 頁面。

初試 Prometheus + Grafana 監控系統搭建并監控 Mysql

prometheus 預設提供一些 metric 名額來供我們選擇監控,通過位址 http://localhost:9090/metric 可以看到所有名額清單。

初試 Prometheus + Grafana 監控系統搭建并監控 Mysql

例如,我們選擇了 go_gc_duration_seconds_count 這個監控 go 執行 gc 持續時間秒數名額,點選 “execute” 後,使用預設的 promdash 頁面展示,一段時間後,監控結果如下:

初試 Prometheus + Grafana 監控系統搭建并監控 Mysql

docker 鏡像啟動很簡單,隻需要一條指令即可,使用預設配置的話,可以直接使用如下指令啟動。

我們也可以使用自己的 prometheus.yml 配置檔案,并且挂載資料目錄到主機,來啟動鏡像。

源碼編譯安裝,我們需要本地有一個運作的 go 環境,而且版本不低于 1.10.x。

現在,prometheus 服務本地已經啟動了,接下來,我們需要安裝并運作 exporter,它的主要作用是持續輸出監控的元件資訊并格式化,同時提供 http 接口供 prometheus 服務來抓取。exporter 也是通過 go 語言編寫的,prometheus github 已經為我們提供了很多實用的 exporter,直接拿來使用即可。

首先,下載下傳 mysql_exporter 二進制檔案到本地。

接着,需要配置要監控的資料庫,為 mysql_exporter 建立一個指定賬戶用來連接配接資料庫(當然,也可以直接用 root 或者其他有權限的賬戶,不過建議建立一個專有賬戶)。

然後,需要配置一下資料庫連接配接認證資訊并啟動 exporter,有兩種方式配置:

使用環境變量方式 $ export data_source_name='exporter:password@(localhost:3306)/' $ ./mysqld_exporter

使用配置檔案方式

注意:mysqld_exporter 預設使用 ~/.my.cnf 作為資料庫認證檔案,如果我們指定其他路徑檔案,需要啟動時指定路徑,例如:./mysqld_exporter --config.my-cnf="<file_path>/.my.cnf"。

檢視日志輸出,exporter 啟動成功。

此時,本地浏覽器通路 http://localhost:9104/metrics 可以看到 mysql 相關的所有監控名額清單。

初試 Prometheus + Grafana 監控系統搭建并監控 Mysql

現在,prometheus 和 mysqld_exporter 服務都已經啟動起來了,那麼接下來就需要将二者關聯起來,讓 prometheus 來定時抓取 exporter 提供的資料。我們需要修改 prometheus 的配置檔案 prometheus.yml 增加 mysql 相關 exporter job。

說明一下:增加了一個 job_name 為 mysql 的任務,targets 為指向 mysqld_exporter 提供的 http 接口服務,labels 為該 job 配置一個标簽,友善下邊 grafana 頁面顯示,下邊會講到。

修改完成後,重新開機 prometheus 服務。此時,我們再次通路 http://localhost:9090/,點選 “status” 下 “targets” 可以檢視所有的 targets 了,這裡就有預設的 prometheus 和新配置的 mysql 啦!

初試 Prometheus + Grafana 監控系統搭建并監控 Mysql

此時,我們就可以在下拉清單中選擇 mysql 相關的名額監控了,例如選擇 mysql_global_status_uptime 名額,一段時間後,監控頁面如下:

初試 Prometheus + Grafana 監控系統搭建并監控 Mysql

不過,大家有沒有覺得 prometheus 自帶的圖形并不美觀,而且功能單一,此時,grafana 該上台了,我們要使用 grafana 作為 prometheus 的展示儀表盤,功能強大而且界面美觀。

grafana 安裝也很友善,根據官網文檔 grafana install,裡面有針對各個系統提供的安裝方法。參照 mac 上安裝方案,可以采用 homebrew 安裝或者二進制源碼安裝方式。

啟動完成後,本地浏覽器通路 http://localhost:3000 即可打開 grafana web 頁面,使用預設管理者賬戶: admin 密碼:admin 登入并修改初始密碼後,即可開始體驗 grafana,頁面是不是很美觀。

初試 Prometheus + Grafana 監控系統搭建并監控 Mysql

接下來,我們需要添加一個 prometheus 類型的資料源,将二者關聯起來,點選 “add data source” 按鈕,填寫 prometheus 相關資訊,如下:

初試 Prometheus + Grafana 監控系統搭建并監控 Mysql

type 處選擇 prometheus,url 處填寫 prometheus 連接配接位址,因為我們上邊服務安裝在本地,是以這裡填寫 http://localhost:9090,其他預設即可,填寫完畢,點選下方 “save & test” 按鈕,如果配置成功,會提示 data source is working 消息。

此時,已經添加好了 prometheus 資料源,grafana 預設給該類型監控提供了三個 dashboard,我們可以直接在頁面上點選 “import” 即可,此時在 dashboard 頁面選擇其中的一個類型,就可以看到監控資料圖形啦!例如,這裡我們選擇 prometheus 2.0 stats 類型 dashboard,一段時間後,看到的監控頁面如下:

初試 Prometheus + Grafana 監控系統搭建并監控 Mysql
初試 Prometheus + Grafana 監控系統搭建并監控 Mysql

最後,我們需要在 grafana 上添加 mysql prometheus 類型的 dashboard,當然對應的 dashboard json 檔案,可以直接拿現成的來用,别人寫的比較全面,也比較好。這些 dashboard json 檔案可以從 這裡 找到,我們可以 clone 到本地,導入到 grafana 裡面即可。

這裡就是我們需要的 dashboard json 檔案,包含 mysql、mongodb、system、pmm 等,可以直接拿來使用。點選 “import” 進入頁面後,點選 “upload .json file” 按鈕,選擇本地 mysql_overview.json 檔案,點選 “import” 即可完成導入,

初試 Prometheus + Grafana 監控系統搭建并監控 Mysql

此時,我們就可以從頁面上直覺的看到 prometheus 收集到的 mysql 相關的各個名額監控的,例如:mysql connection、mysql questions、mysql thread cache、mysql network traffic 等等一系列名額。同時,還可以調整查詢區間範圍,編譯每一個名額資訊,檢視每個名額資訊詳情,自定義拖拽排版面闆等功能,功能很強大。

初試 Prometheus + Grafana 監控系統搭建并監控 Mysql
初試 Prometheus + Grafana 監控系統搭建并監控 Mysql

還記得上邊 prometheus 配置檔案中的 labels 麼,我們配置為 mysql,在這裡 grafana 頁面上邊 host 就自動關聯了 mysql,如果沒填 labels,這裡會顯示 localhost:9104,不是很直覺的哈!

參考資料

prometheus overview

github mysql exporter

github node exporter

grafana docs

github grafana

grafana dashboards for mysql monitoring using prometheus