为何mysqld_exporter无法采集events_statements相关性能指标?
针对你的环境(Ubuntu 18、MySQL 5.7.42、mysqld_exporter 0.16.0),可以按以下步骤逐一排查:
1. 确认MySQL账号权限是否足够
mysqld_exporter使用的MySQL账号必须拥有performance_schema库的SELECT权限,否则无法查询语句统计数据。执行以下SQL检查权限:
SHOW GRANTS FOR 'exporter_user'@'localhost'; -- 替换为你的exporter连接账号
如果没有SELECT ON performance_schema.*权限,执行授权:
GRANT SELECT ON performance_schema.* TO 'exporter_user'@'localhost'; FLUSH PRIVILEGES;
2. 验证Performance Schema配置实际生效
你在my.cnf中添加的配置需要确保已实际生效,执行以下SQL确认:
-- 确认Performance Schema已启用 SHOW VARIABLES LIKE 'performance_schema'; -- 确认语句级instrumentation已开启 SHOW VARIABLES LIKE 'performance_schema_instrument'; -- 确认语句consumer已启用 SHOW VARIABLES LIKE 'performance-schema-consumer-events-statements%'; SHOW VARIABLES LIKE 'performance-schema-consumer-statements-digest';
如果结果不是ON,说明配置未生效:
- 检查my.cnf的位置是否正确(可通过
mysqld --help --verbose | grep -A 1 "Default options"确认MySQL读取的配置文件路径) - 重启MySQL服务使配置生效:
sudo systemctl restart mysql
3. 确认有实际SQL语句执行
mysql_perf_schema_events_statements_seconds_total基于Performance Schema的语句摘要统计,只有当数据库有实际SQL执行时才会生成指标。可以手动执行一些测试语句:
SELECT * FROM information_schema.tables LIMIT 10; SELECT SLEEP(1);
等待1-2分钟后,重新请求exporter的metrics端点(如http://localhost:9104/metrics)查看指标是否出现。
4. 检查mysqld_exporter的运行日志
查看exporter的日志,确认是否有连接MySQL失败、权限不足或查询错误的提示:
- 如果是systemd管理的服务:
sudo journalctl -u mysqld_exporter.service -f - 如果是直接启动的,查看启动终端的输出或指定的日志文件
常见错误包括:
- 无法读取.my.cnf配置,导致连接MySQL使用默认低权限账号
- 查询performance_schema表时提示
Access denied
5. 核对exporter采集器参数
确认启动参数中--collect.perf_schema.eventsstatements已正确添加,且没有被其他参数覆盖。可以通过以下命令查看exporter的实际运行参数:
ps aux | grep mysqld_exporter
确保该参数存在,且没有添加--no-collect.perf_schema.eventsstatements这类禁用参数。
6. 考虑exporter版本兼容性
mysqld_exporter 0.16.0是较旧的版本,可能存在与MySQL 5.7.42的兼容性问题。可以尝试升级到较新的稳定版本(如0.17.0或更高),但升级前需备份现有配置。
内容的提问来源于stack exchange,提问作者maryam

