Prometheus无法抓取MySQL Exporter指标的问题求助
MySQL Exporter指标无法被Prometheus抓取的解决方案
1. 确认容器网络连通性
首先验证Prometheus容器能否访问MySQL Exporter容器:
# 在Prometheus容器内ping MySQL Exporter容器名 docker exec -it my-prometheus ping mysql80-exporter
如果无法ping通,检查两者是否在同一个Docker网络:
# 查看Prometheus容器所属网络 docker inspect my-prometheus | grep -A5 Networks # 查看MySQL Exporter容器所属网络 docker inspect mysql80-exporter | grep -A5 Networks
若不在同一网络,将Prometheus容器加入db_network:
docker network connect db_network my-prometheus
2. 检查MySQL Exporter监听地址
部分版本的mysqld-exporter默认仅监听127.0.0.1,导致容器内无法通过容器名访问。查看Exporter日志确认监听地址:
docker logs mysql80-exporter
如果日志显示Listening on 127.0.0.1:9104,需修改启动命令,强制监听所有网卡:
# 停止并删除旧容器 docker stop mysql80-exporter && docker rm mysql80-exporter # 重新启动容器,添加--web.listen-address参数 docker run -d \ --name mysql80-exporter \ --publish 9104 \ --network db_network \ --restart always \ --env DATA_SOURCE_NAME="exporter:exporterpassword@(mysql80:3306)/" \ prom/mysqld-exporter:latest \ --web.listen-address=0.0.0.0:9104 \ --collect.info_schema.processlist \ --collect.info_schema.innodb_metrics \ --collect.info_schema.tablestats \ --collect.info_schema.tables \ --collect.info_schema.userstats \ --collect.engine_innodb_status
3. 验证Prometheus配置文件有效性
检查Prometheus容器内的配置是否正确挂载:
docker exec -it my-prometheus cat /etc/prometheus/prometheus.yml
确认mysql job的targets配置为['mysql80-exporter:9104']。若配置有误,修改本地prometheus.yml后重启容器:
docker restart my-prometheus
也可通过Prometheus Web UI的/config路径查看当前加载的配置。
4. 排查MySQL Exporter的数据库连接权限
查看Exporter日志,确认是否存在数据库连接错误:
docker logs mysql80-exporter
若出现权限或连接失败提示,重新授权监控用户:
# 进入MySQL容器 docker exec -it mysql80 mysql -uroot -p
执行SQL命令重置用户权限:
DROP USER 'exporter'@'%'; CREATE USER 'exporter'@'%' IDENTIFIED BY 'exporterpassword' WITH MAX_USER_CONNECTIONS 3; GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%'; FLUSH PRIVILEGES;
完成后重启MySQL Exporter容器:
docker restart mysql80-exporter
5. 在Prometheus容器内直接测试指标抓取
在Prometheus容器内尝试访问MySQL Exporter的指标端点:
docker exec -it my-prometheus curl mysql80-exporter:9104/metrics
如果能正常获取指标,说明问题出在Prometheus的抓取配置或服务发现;如果无法获取,回到网络或Exporter本身的排查步骤。
内容的提问来源于stack exchange,提问作者Soumya Ghosal
相关产品推荐
相关产品推荐

