资讯动态

Prometheus+MySQL监控方案设计与实践

发布时间:2026/10/29 11:27:18 来源:尧图企业网站定制
1. 项目背景与核心价值MySQL作为最流行的开源关系型数据库承载着大量企业的核心业务数据。但传统的监控方式往往存在几个痛点指标采集粒度粗、历史数据存储周期短、报警规则单一。我在金融行业做DBA时就曾因为凌晨3点的一次慢查询雪崩不得不手动恢复数据那次事故直接促使我研究更完善的监控方案。PrometheusMySQL的组合完美解决了这些问题。Prometheus的拉取模式可以每15秒采集一次数据内置的TSDB能存储数月的历史指标配合Grafana的可视化能力我们能像看股票K线图一样观察数据库性能趋势。更重要的是基于PromQL的报警规则可以提前发现潜在风险比如当连接数增长率异常时触发预警而不是等数据库挂掉才处理。2. 监控方案设计2.1 技术选型对比方案采集频率存储周期可视化能力报警灵活性Zabbix1分钟30天中等一般Prometheusmysqld_exporter15秒自定义强大极强云厂商RDS监控1分钟7天基础有限选择Prometheus的核心优势在于其多维数据模型和强大的查询语言。比如我们可以用这个PromQL语句计算过去5分钟连接数增长率rate(mysql_global_status_connections[5m]) 102.2 架构设计要点数据采集层mysqld_exporter部署在MySQL同主机避免网络抖动影响传输层Prometheus通过HTTPS拉取数据配置scrape_interval15s存储层建议配置保留时间retention_time180d展示层Grafana使用ID 7362官方仪表板重要提示生产环境一定要为exporter配置专用监控账号权限遵循最小化原则CREATE USER exporterlocalhost IDENTIFIED BY ComplexPassword123!; GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO exporterlocalhost;3. 详细实施步骤3.1 环境准备以CentOS 7为例的依赖安装# 安装基础工具 yum install -y wget tar gzip # 创建专用用户 useradd -M -s /bin/false prometheus useradd -M -s /bin/false mysqld_exporter3.2 mysqld_exporter部署下载并配置exporter版本选择v0.14.0稳定版wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz tar xvf mysqld_exporter-*.tar.gz mv mysqld_exporter-*/mysqld_exporter /usr/local/bin/创建配置文件/etc/.mysqld_exporter.cnf[client] userexporter passwordComplexPassword123!配置systemd服务单元[Unit] DescriptionMySQLd Exporter [Service] Usermysqld_exporter EnvironmentDATA_SOURCE_NAMEexporter:ComplexPassword123!unix(/var/lib/mysql/mysql.sock)/ ExecStart/usr/local/bin/mysqld_exporter \ --config.my-cnf/etc/.mysqld_exporter.cnf \ --collect.global_status \ --collect.info_schema.innodb_metrics \ --collect.engine_innodb_status [Install] WantedBymulti-user.target3.3 Prometheus配置在scrape_configs部分添加- job_name: mysql scrape_interval: 15s static_configs: - targets: [mysql-server:9104] metrics_path: /metrics scheme: https tls_config: insecure_skip_verify: true3.4 Grafana仪表板配置导入官方仪表板的技巧在Grafana界面点击 Import输入仪表板ID 7362选择Prometheus数据源调整时间范围设置为最近6小时关键面板优化建议将Threads_connected设置为红黄绿三色阈值为InnoDB Buffer Pool命中率添加95%的参考线在QPS面板添加同比曲线4. 核心监控指标解析4.1 性能类指标指标名称健康阈值报警规则示例mysql_global_status_Threads_connected max_connections*0.8mysql_global_status_Threads_connected / mysql_global_variables_max_connections 0.8mysql_global_status_Innodb_row_lock_time_avg 500msrate(mysql_global_status_Innodb_row_lock_time_avg[5m]) 1000mysql_info_schema_innodb_buffer_pool_read_requests命中率95%1 - (mysql_info_schema_innodb_buffer_pool_reads/mysql_info_schema_innodb_buffer_pool_read_requests) 0.954.2 资源类指标# 内存使用率计算 (sum(mysql_global_variables_innodb_buffer_pool_size) sum(mysql_global_variables_innodb_log_buffer_size) sum(mysql_global_variables_key_buffer_size)) / sum(node_memory_MemTotal_bytes) * 1004.3 业务类指标自定义查询监控示例-- 在exporter配置中添加custom.query配置 SELECT COUNT(*) as active_sessions, SUM(CASE WHEN command ! Sleep THEN 1 ELSE 0 END) as active_queries FROM information_schema.processlist5. 生产环境调优经验5.1 性能优化参数在mysqld_exporter启动参数中添加--collect.auto_increment.columns \ --collect.info_schema.processlist \ --collect.perf_schema.eventswaits \ --collect.perf_schema.file_events \ --collect.perf_schema.indexiowaits \ --collect.perf_schema.tableiowaits5.2 高可用方案多实例监控使用consul_sd_configs自动发现MySQL集群节点数据分片配置remote_write将数据同步到VictoriaMetrics集群容灾方案在exporter同级目录创建.lock文件实现互斥锁5.3 安全加固措施为Prometheus和Grafana配置HTTPS使用Vault动态生成exporter密码配置iptables规则限制9104端口访问iptables -A INPUT -p tcp --dport 9104 -s 192.168.1.100 -j ACCEPT iptables -A INPUT -p tcp --dport 9104 -j DROP6. 典型问题排查指南6.1 连接数暴涨排查步骤检查processlist面板确认查询类型分析mysql_global_status_Aborted_connects是否认证失败查看mysql_global_status_Max_used_connections历史峰值6.2 查询性能下降关键指标组合分析mysql_global_status_Slow_queries增长率mysql_global_status_Select_scan全表扫描次数mysql_global_status_Innodb_buffer_pool_wait_free缓冲池等待6.3 数据不一致校验方案# 主从延迟监控 mysql_slave_status_seconds_behind_master 30 # 表大小变化监控 delta(mysql_info_schema_table_size[1h]) 10737418247. 进阶监控场景7.1 分库分表监控配置示例- job_name: mysql_shard metrics_path: /metrics static_configs: - targets: - shard1:9104 - shard2:9104 relabel_configs: - source_labels: [__address__] target_label: shard7.2 慢查询日志分析通过pt-query-digest处理慢日志后使用以下PromQL监控# 按指纹统计慢查询 sum by (fingerprint) (rate(mysql_slow_queries_total[5m])) 0.17.3 业务指标关联将MySQL指标与应用指标关联分析# 订单创建成功率与数据库响应时间关联 rate(orders_created_total[5m]) / rate(mysql_global_status_Com_insert[5m])这套监控体系在我们生产环境运行三年成功预警了17次潜在故障。最惊险的一次是在大促前夜监控发现连接数增长率异常及时排查发现是某服务存在连接泄漏避免了一次重大事故。建议至少每周review一次监控指标阈值业务变化时要及时调整。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑