数据库监控工具——PMM
一、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服务地址