一、PMM架構
Percona Monitoring and Management是percona一款開源的用於管理和監控MySQL 和MongoDB性能的開源平台,通過PMM客戶端收集到的DB監控數據用第三方軟件Grafana畫圖展示出來,包括兩個部分:
PMM client:部署在每個監控數據庫主機。搜集主機,數據庫和查詢分析數據等。
PMM Server:匯集數據並展示。提供表,dashboards和graph的web界面。
其架構如下圖所示:
PMM Client由以下部分組成:
pmm-admin:提供命令行交互界面管理pmm client,包括新增、刪除數據庫實例等。
pmm-mysql-query-0: 管理 mysql QAN代理的服務,從數據庫實例搜集查詢性能數據並發送到pmm server上的QAN API。
pmm-mongdb-query-0:管理mongdb QAN代理的服務。
node_exporter:搜集系統性能數據,基於prometheus exporter。更多信息查詢:https://github.com/percona/node_exporter.
mysqld_exporter:mysql性能搜集。
mongodb_exporter:mongodb性能搜集。
proxysql_exporter:ProxySQL性能數據搜集。
PMM Server運行在中央監控數據上,目前可以基於容器,虛擬機或者AMI(amazon machine image)部署。
pmm server包含以下工具:
QAN(Query Analytics):分析mysql數據庫的查詢性能,相對於qan agent,它包含:
—qan api:后端存儲和獲取由agent采集的查詢性能數據。
—qan web:提供數據展示。
metrics monitor:提供mysql和mongodb的歷史性能數據查詢。
—prometheus:第三方的時序數據庫,連接到pmm client的exporter並匯集數據。consul給pmm client提供api用於遠程list,添加,刪除prometheus上的配置主機,並存儲監控的元數據。
—grafana:第三方的圖形展示界面。
Orchestrator:提供mysql復制的拓撲工具和圖形界面。
參考:
端口:以下端口必須在pmm server和client之間開放;
pmm server需要開放80或443端口用於pmm client訪問pmm web。
pmm client端必須開放以下默認端口采集數據,可以通過pmm-admin addc命令進行修改。
42000 For PMM to collect genenal system metrics.
42001 This port is used by a service which collects query performance data and makes it available to QAN.
42002 For PMM to collect MySQL server metrics.
42003 For PMM to collect MongoDB server metrics.
42004 For PMM to collect ProxySQL server metrics.
二、PMM部署
1、安裝PMM Server
PMM安裝有三種方式:docker、虛擬機和AWS marketplace。
本文主要通過容器方式部署,pmm server容器鏡像發布在https://hub.docker.com/r/percona/pmm-server/tags/,docker版本必須高於1.12.6。pmm server部署范圍三步:獲取鏡像,創建持久化的pmm data鏡像以及創建啟動pmm server鏡像。
從dock hub拉取最新的鏡像版本
docker pull percona/pmm-server:latest
創建持久化的pmm-data鏡像
docker create -v /opt/prometheus/data -v /opt/consul-data -v /var/lib/mysql -v /var/lib/grafana --name pmm-data percona/pmm-server:latest /bin/true
參數說明:
docker create:該命令指示Docker守護程序從映像創建容器。
-v:該選項初始化數據卷的容器。
--name:該選項為你可以用於引用Docker網絡中的容器的容器分配一個自定義名稱。
percona/pmm-server:latest :是導出容器的鏡像名稱和版本標簽。
/bin/true :是容器運行的命令。
注:該鏡像不啟動,只為了保證pmm server的數據持久化以用於版本升級等場景。注意不要移動或者重新創建該鏡像,除非確保數據不再需要。
注:確保鏡像-v的數據卷存在,並最好是單獨綁定掛載。
創建並啟動pmm-server容器
docker run -d -p 80:80 --volumes-from pmm-data --name pmm-server --restart always percona/pmm-server:latest
參數說明:
docker run:該命令指示守護程序從鏡像運行容器。
-d:該選項在分離模式(即后台)中啟動容器。
-p:該選項映射用於訪問PMM服務器 Web UI的端口。例如-p 8080:80,如果端口80不可用,則可以使用登陸頁面映射到端口8080 。
--volumes-from:該選項從pmm-date容器中裝入卷。
--name:該選項為你可以用於引用Docker網絡中的容器分配一個自定義名稱。
--restart:該選項定義容器的重新啟動策略,設置它以always確保Docker守護程序在啟動時啟動容器,並在容器退出時重新啟動它。
其他參數說明:
通過docker run的-e參數可以增加pmm-server啟動的額外功能
啟用Orchestrator復制拓撲:
docker run ... -e ORCHESTRATOR_ENABLED=true ... percona/pmm-server:latest
關閉telemetry(pmm server數據每24小時會上報percona.com,包括pmm server ID、pmm version、操作系統、數據庫版本、perl版本等):
docker run ... -e DISABLE_TELEMETRY=true ... percona/pmm-server:latest
關閉更新,可以通過web界面關閉,也可以通過命令行關閉:
docker run ... -e DISABLE_UPDATES=true ... percona/pmm-server:latest
PMM Server訪問方式:
組件URL
PMM home page http://192.168.1.24
Metrics Monitor (MM)http://192.168.1.24/graph/
User name: admin
Password: admin
Orchestrator http://192.168.1.24/orchestrator
2、安裝PMM Client
PMM client可以通過rpm包安裝,添加percona repository,直接執行yum或者apt-get安裝:
下載鏈接:
https://www.percona.com/downloads/pmm/
下載deb包
安裝deb包
dpkg -i pmm-client_1.17.1-1.xenial_amd64.deb
同樣提供了tar包和源碼方式安裝:
Generic tarball 解壓縮后執行install腳本安裝
源碼壓縮包解壓后安裝
3、PMM Client連接到PMM Server
先安裝mysql-server
apt-get install -y mysql-server
修改監聽地址
vim /etc/mysql/mysql.conf.d/mysqld.cnf
將bind改為:
bind-address = 0.0.0.0
開啟慢查詢
slow_query_log=1 long_query_time=1 slow_query_log_file=/var/lib/mysql/mysql-slow.log
重啟Mysql
/etc/init.d/mysql restart
對root用戶做授權,允許遠程訪問
root@ubuntu:~# mysql -u root -proot mysql> grant all PRIVILEGES on *.* to root@'%' identified by 'root'; mysql> flush privileges;
使用pmm-admin config --server命令添加客戶端,假如服務器端地址為192.168.100.1,客戶端地址為192.168.200.1,添加命令如下(需要root或者sudo權限):
root@ubuntu:/etc/mysql/mysql.conf.d# pmm-admin config --server 192.168.1.24 OK, PMM server is alive. PMM Server | 192.168.1.24 Client Name | ubuntu Client Address | 192.168.1.24
如果修改了默認的80端口,則需要在ip后面加上自定義端口,如:
pmm-admin config --server 192.168.100.1:8080
4、搜集性能數據
使用pmm-admin add命令添加所需要監控的服務名。
如監控主機、mysql以及mysql的慢查詢,命令如下(需要root或者sudo權限):
root@ubuntu:~# pmm-admin add mysql --user root --password root --host 192.168.1.24 --port 3306 [linux:metrics] OK, already monitoring this system. [mysql:metrics] OK, now monitoring MySQL metrics using DSN root:***@tcp(192.168.1.24:3306) [mysql:queries] OK, now monitoring MySQL queries from slowlog using DSN root:***@tcp(192.168.1.24:3306)
監控mongodb主機、數據庫和慢查詢:
sudo pmm-admin add mongodb
監控ProxySQL性能:
sudo pmm-admin add proxysql:metrics
查看被監控項:
sudo pmm-admin list
http://192.168.1.24/graph/d/Fxvd1timk/home-dashboard?orgId=1
效果如下:

訪問qan

這個頁面之所有,沒有數據,是因為慢查詢日志還沒有產生。
創建一張表,插入3000萬條數據,參考鏈接:
http://www.py3study.com/Article/details/id/313.html
執行一條慢sql語句
SELECT * from userinfo WHERE `name` like '%a%'
點擊Query Analytics

下方就是慢sql

再次訪問頁面
http://192.168.1.24/qan
效果如下:
本文參考鏈接:
https://www.jianshu.com/p/bf32e5d63ffb