一、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
QAN http://192.168.1.24/qan/
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包
https://www.percona.com/downloads/pmm/1.17.1/binary/debian/xenial/x86_64/pmm-client_1.17.1-1.xenial_amd64.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
http://192.168.1.24/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