使用Prometheus和Grafana監控Mysql服務器性能


使用Prometheus和Grafana監控Mysql服務器性能

https://segmentfault.com/a/1190000007040144

這是一篇快速入門文章,介紹了如何使用PrometheusGrafana對Mysql服務器性能進行監控。內容基於這篇文章,結合了自己的實際實踐並根據最新版本的應用進行了調整。下面是兩張效果圖:

概述

Prometheus是一個開源的服務監控系統,它通過HTTP協議從遠程的機器收集數據並存儲在本地的時序數據庫上。它提供了一個簡單的網頁界面、一個功能強大的查詢語言以及HTTP接口等等。Prometheus通過安裝在遠程機器上的exporter來收集監控數據,我們用到了以下兩個exporter:

  • node_exporter – 用於機器系統數據

  • mysqld_exporter – 用於Mysql服務器數據

Grafana是一個開源的功能豐富的數據可視化平台,通常用於時序數據的可視化。它內置了以下數據源的支持:

並可以通過插件擴展支持的數據源。

架構圖

下面是我們安裝時用到的架構圖:

安裝和運行Prometheus

首先我們安裝Prometheus:

$ wget https://github.com/prometheus/prometheus/releases/download/v1.1.3/prometheus-1.1.3.linux-amd64.tar.gz -O prometheus-1.1.3.linux-amd64.tar.gz $ mkdir /usr/local/services/prometheus $ tar zxf prometheus-1.1.3.linux-amd64.tar.gz -C /usr/local/services/prometheus --strip-components=1

然后在安裝目下編輯配置文件 prometheus.yml

global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: linux static_configs: - targets: ['192.168.204.63:9100'] labels: instance: db1 - job_name: mysql static_configs: - targets: ['192.168.204.63:9104'] labels: instance: db1

192.168.204.63是我們數據庫主機的IP,端口則是對應的exporter的監聽端口。

然后我們啟動Prometheus:

$ ./prometheus       
INFO[0000] Starting prometheus (version=1.1.3, branch=master, revision=ac374aa6748e1382dbeb72a00abf47d982ee8fff) source=main.go:73 INFO[0000] Build context (go=go1.6.3, user=root@3e392b8b8b44, date=20160916-11:36:30) source=main.go:74 INFO[0000] Loading configuration file prometheus.yml source=main.go:221 INFO[0000] Loading series map and head chunks... source=storage.go:358 INFO[0000] 4 series loaded. source=storage.go:363 INFO[0000] Starting target manager... source=targetmanager.go:76 WARN[0000] No AlertManagers configured, not dispatching any alerts source=notifier.go:176 INFO[0000] Listening on :9090 source=web.go:235

Prometheus內置了一個web界面,我們可通過http://monitor_host:9090進行訪問:

Status->Targets頁面下,我們可以看到我們配置的兩個Target,它們的StateDOWN

下一步我們需要安裝並運行exporter。下載exporters並解壓:

$ wget https://github.com/prometheus/node_exporter/releases/download/0.12.0/node_exporter-0.12.0.linux-amd64.tar.gz -O node_exporter-0.12.0.linux-amd64.tar.gz $ wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.9.0/mysqld_exporter-0.9.0.linux-amd64.tar.gz -O mysqld_exporter-0.9.0.linux-amd64.tar.gz $ mkdir /usr/local/services/prometheus_exporters $ tar zxf node_exporter-0.12.0.linux-amd64.tar.gz -C /usr/local/services/prometheus_exporters --strip-components=1 $ tar zxf mysqld_exporter-0.9.0.linux-amd64.tar.gz -C /usr/local/services/prometheus_exporters --strip-components=1

運行node_exporter :

$ cd /usr/local/services/prometheus_exporters $ ./node_exporter INFO[0000] Starting node_exporter (version=0.12.0, branch=master, revision=df8dcd2) source=node_exporter.go:135 INFO[0000] Build context (go=go1.6.2, user=root@ff68505a5469, date=20160505-22:14:18) source=node_exporter.go:136 INFO[0000] No directory specified, see --collector.textfile.directory source=textfile.go:57 INFO[0000] Enabled collectors: source=node_exporter.go:155 INFO[0000] - vmstat source=node_exporter.go:157 INFO[0000] - conntrack source=node_exporter.go:157 INFO[0000] - filesystem source=node_exporter.go:157 INFO[0000] - meminfo source=node_exporter.go:157 INFO[0000] - netdev source=node_exporter.go:157 INFO[0000] - stat source=node_exporter.go:157 INFO[0000] - entropy source=node_exporter.go:157 INFO[0000] - mdadm source=node_exporter.go:157 INFO[0000] - sockstat source=node_exporter.go:157 INFO[0000] - time source=node_exporter.go:157 INFO[0000] - uname source=node_exporter.go:157 INFO[0000] - diskstats source=node_exporter.go:157 INFO[0000] - filefd source=node_exporter.go:157 INFO[0000] - loadavg source=node_exporter.go:157 INFO[0000] - netstat source=node_exporter.go:157 INFO[0000] - textfile source=node_exporter.go:157 INFO[0000] Listening on :9100 source=node_exporter.go:176

mysqld_exporter需要連接到Mysql,所以需要Mysql的權限,我們先為它創建用戶並賦予所需的權限:

mysql> GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'prom'@'localhost' identified by 'abc123'; mysql> GRANT SELECT ON performance_schema.* TO 'prom'@'localhost';

創建.my.cnf文件並運行mysqld_exporter:

$ cd /usr/local/services/prometheus_exporters $ cat << EOF > .my.cnf [client] user=prom password=abc123 EOF $ ./mysqld_exporter -config.my-cnf=".my.cnf" INFO[0000] Starting mysqld_exporter (version=0.9.0, branch=master, revision=8400af20ccdbf6b5e0faa2c925c56c48cd78d70b) source=mysqld_exporter.go:432 INFO[0000] Build context (go=go1.6.3, user=root@2c131c66ca20, date=20160926-18:28:09) source=mysqld_exporter.go:433 INFO[0000] Listening on :9104 source=mysqld_exporter.go:451

我們再次回到Status->Targets頁面,可以看到兩個Target的狀態已經變成UP了:

安裝和運行Grafana

下載並解壓Grafana:

$ wget https://grafanarel.s3.amazonaws.com/builds/grafana-3.1.1-1470047149.linux-x64.tar.gz $ mkdir /usr/local/services/grafana $ tar zxvf grafana-3.1.1-1470047149.linux-x64.tar.gz -C /usr/local/services/grafana --strip-components=1

編輯配置文件/usr/local/services/grafana/conf/defaults.ini,修改dashboards.json段落下兩個參數的值:

[dashboards.json] enabled = true path = /var/lib/grafana/dashboards

安裝儀表盤:

$ git clone https://github.com/percona/grafana-dashboards.git $ cp -r grafana-dashboards/dashboards /var/lib/grafana

運行以下命令為Grafana打個補丁,不然圖表不能正常顯示:

$ sed -i 's/expr=\(.\)\.replace(\(.\)\.expr,\(.\)\.scopedVars\(.*\)var \(.\)=\(.\)\.interval/expr=\1.replace(\2.expr,\3.scopedVars\4var \5=\1.replace(\6.interval, \3.scopedVars)/' /usr/local/services/grafana/public/app/plugins/datasource/prometheus/datasource.js $ sed -i 's/,range_input/.replace(\/"{\/g,"\\"").replace(\/}"\/g,"\\""),range_input/; s/step_input:""/step_input:this.target.step/' /usr/local/services/grafana/public/app/plugins/datasource/prometheus/query_ctrl.js

最后我們運行Grafana服務:

$ cd /usr/local/services/grafana/bin/ $ ./grafana-server INFO[09-28|12:23:33] Starting Grafana logger=main version=3.1.1 commit=a4d2708 compiled=2016-08-01T18:20:16+0800 INFO[09-28|12:23:33] Config loaded from logger=settings file=/usr/local/services/grafana/conf/defaults.ini INFO[09-28|12:23:33] Path Home logger=settings path=/usr/local/services/grafana INFO[09-28|12:23:33] Path Data logger=settings path=/usr/local/services/grafana/data INFO[09-28|12:23:33] Path Logs logger=settings path=/usr/local/services/grafana/data/log INFO[09-28|12:23:33] Path Plugins logger=settings path=data/plugins INFO[09-28|12:23:33] Initializing DB logger=sqlstore dbtype=mysql INFO[09-28|12:23:33] Starting DB migration logger=migrator INFO[09-28|12:23:33] Creating json dashboard index for path: [/var/lib/grafana/dashboards] INFO[09-28|12:23:33] Starting plugin search logger=plugins INFO[09-28|12:23:33] Server Listening logger=server address=0.0.0.0:3000 protocol=http subUrl=

我們可通過http://monitor_host:3000訪問Grafana網頁界面(缺省的帳號/密碼為admin/admin):

然后我們到Data Sources頁面添加數據源:

最后我們就可以通過選擇不同的儀表盤(左上角)和時間段(右上角)來呈現圖表了:

參考資料

https://prometheus.io/
http://grafana.org/
https://github.com/percona/gr...
https://www.percona.com/blog/...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM