一、PMM 是什么?
Percona Monitoring and Management (PMM) 是一款开源的数据库监控与管理平台,专注于 MySQL、MongoDB、PostgreSQL 等数据库的性能优化、故障排查和健康管理。由 Percona 公司开发,集成了数据采集、可视化、分析和告警功能,帮助运维团队高效管理数据库集群。
二、核心架构
PMM 采用 客户端-服务端(Client-Server)架构:
PMM Client
部署在目标数据库服务器上,负责收集数据库性能指标(如查询延迟、连接数、锁状态等)。
支持通过 Exporter(如
node_exporter
、mysqld_exporter
)收集系统和数据库指标。
PMM Server
作为中心化服务,存储和分析从客户端收集的数据。
基于以下组件构建:
Prometheus: 时间序列数据库(TSDB),用于存储监控数据。
Grafana: 提供可视化仪表盘,展示性能指标。
VictoriaMetrics(可选): 高性能时序数据库,替代 Prometheus 的存储。
ClickHouse(可选): 用于查询分析(Query Analytics)的日志存储。
三、核心功能
1. 数据库性能监控
实时指标:CPU、内存、磁盘I/O、网络流量、数据库连接数、查询吞吐量等。
深度数据库指标:
MySQL: InnoDB 缓冲池状态、复制延迟、慢查询。
MongoDB: Oplog 延迟、分片状态、集合锁争用。
PostgreSQL: 事务提交率、WAL 文件生成、索引使用效率。
2. 查询分析(Query Analytics)
自动抓取并分析 SQL 查询和 MongoDB 操作。
统计查询执行时间、频率、资源消耗,识别慢查询或高负载操作。
提供优化建议(如索引缺失、全表扫描)。
3. 日志管理
集中收集和存储数据库日志(如 MySQL 错误日志、慢查询日志)。
支持通过 Grafana 查看和搜索日志。
4. 可视化与仪表盘
预置丰富的 Grafana 仪表盘模板,涵盖操作系统、数据库实例、复制集群等。
支持自定义仪表盘和告警规则。
5. 告警与通知
基于 Prometheus Alertmanager 配置告警规则(如复制中断、磁盘空间不足)。
支持通过邮件、Slack、PagerDuty 等渠道发送通知。
6. 备份管理(集成 Percona XtraBackup)
支持 MySQL 物理备份与恢复(需手动配置)。
四、适用场景
数据库性能优化
识别慢查询、锁竞争、资源瓶颈。
故障排查
快速定位数据库宕机或性能下降的根因。
容量规划
分析历史负载趋势,预测未来资源需求。
多实例/集群监控
集中管理分布式数据库集群(如 MySQL 主从复制、MongoDB 分片集群)。
五、安装与部署
1. PMM Server 部署
version: '3'
services:
pmm-server:
image: percona/pmm-server:3
container_name: pmm-server
ports:
- "5443:8443"
- "580:80"
volumes:
- ./pmm-data:/srv
networks:
- pmm-network
restart: always
volumes:
pmm-data:
networks:
pmm-network:
driver: bridge
2. PMM Client 安装
version: '3'
services:
pmm-client:
image: percona/pmm-client:3
container_name: pmm-client
environment:
- PMM_AGENT_SERVER_ADDRESS=XXXX:5443 // server实际的ip
- PMM_AGENT_SERVER_USERNAME=admin
- PMM_AGENT_SERVER_PASSWORD=admin
- PMM_AGENT_SERVER_INSECURE_TLS=1
- PMM_AGENT_SETUP=1
- PMM_AGENT_CONFIG_FILE=config/pmm-agent.yaml
volumes:
- ./pmm-client-data:/srv
- ../db/slow.log:/usr/local/var/mysql/slow.log
networks:
- pmm-network
restart: unless-stopped
networks:
pmm-network:
driver: bridge
3. 数据库配置
-- 开启性能记录
UPDATE performance_schema.setup_consumers
SET ENABLED = 'YES'
WHERE NAME LIKE '%statements%';
-- 开启所有 instruments
UPDATE performance_schema.setup_instruments
SET ENABLED = 'YES', TIMED = 'YES'
WHERE NAME LIKE '%statement/%';
-- 设置慢查询为 0,记录所有查询
SET GLOBAL long_query_time = 0;
SET GLOBAL slow_query_log = 1;
SET GLOBAL log_queries_not_using_indexes = 1;
4. pmm客户端配置
# 进入 PMM 客户端容器
docker exec -it pmm-client bash
# 修改 配置
pmm-admin add mysql \
--query-source=perfschema \
--username=XXX \ // 配置数据库实际信息
--password='XXX' \ // 配置数据库实际信息
--host=XXX \ // 配置数据库实际信息
--port=3306 \ // 配置数据库实际信息
--service-name=mysql-console \
--query-examples=true
访问https://pmm服务地址