6.10.1 监控指标体系与采集方案

监控指标体系与采集方案应围绕可用性、性能、容量、稳定性四大目标建立指标树,并明确“业务层—实例层—主机层—存储层”的分层采集策略。核心指标示例:连接与会话(Threads_connected、Threads_running、Max_connections、Aborted_connects)、事务与锁(Com_commit/rollback、Innodb_row_lock_time、lock_waits)、查询性能(QPS、TPS、慢查询占比、P95/P99延迟)、缓存与缓冲池(Innodb_buffer_pool_hit_rate、dirty_pages、free_pages)、存储与IO(Innodb_data_reads/writes、fsync、IOPS、磁盘延迟)、复制状态(Seconds_Behind_Master、Relay_Log_Space、GTID状态)、容量增长(表空间、binlog、redo/undo)。指标口径需统一时间粒度与采样窗口。

采集链路遵循“采集—清洗—存储—展示—告警”闭环,采集频率建议:状态类10–30s、性能类1–5min、容量类15–60min。以下为原理草图与结构示意:

文章图片
指标口径示例(统一时间窗 1min)
QPS = (Com_select+Com_insert+Com_update+Com_delete)/60
TPS = (Com_commit+Com_rollback)/60
缓冲池命中率 = 1 - Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests

下面给出可落地的“轻量采集 + 专项采集”示例(Prometheus + mysqld_exporter + slow log + Performance Schema):

1)安装与部署(示例路径与命令)

# 1. 创建监控账号(最小权限)
mysql -uroot -p -e "CREATE USER 'exporter'@'%' IDENTIFIED BY 'Str0ngPass!';"
mysql -uroot -p -e "GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';"
mysql -uroot -p -e "FLUSH PRIVILEGES;"

# 2. 配置 mysqld_exporter 连接信息
cat >/etc/mysqld_exporter.cnf <<'EOF'
[client]
user=exporter
password=Str0ngPass!
host=127.0.0.1
port=3306
EOF
chmod 600 /etc/mysqld_exporter.cnf

# 3. 启动 mysqld_exporter
/usr/local/bin/mysqld_exporter \
  --config.my-cnf=/etc/mysqld_exporter.cnf \
  --collect.info_schema.innodb_metrics \
  --collect.perf_schema.eventsstatements \
  --web.listen-address=":9104" \
  >/var/log/mysqld_exporter.log 2>&1 &
# 4. Prometheus 采集配置(/etc/prometheus/prometheus.yml)
cat >>/etc/prometheus/prometheus.yml <<'EOF'
  - job_name: 'mysql'
    static_configs:
      - targets: ['127.0.0.1:9104']
        labels:
          env: 'prod'
          role: 'primary'
EOF

# 5. 重载 Prometheus
kill -HUP $(pidof prometheus)

2)专项采集:慢查询与 Performance Schema

# 开启慢查询日志(my.cnf)
cat >>/etc/my.cnf <<'EOF'
[mysqld]
slow_query_log=ON
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=0.5
log_queries_not_using_indexes=ON
EOF

# 重启 MySQL 生效
systemctl restart mysqld

# Performance Schema 关键表查询(示例)
mysql -uroot -p -e "
SELECT DIGEST_TEXT, COUNT_STAR, SUM_TIMER_WAIT/1e12 AS total_s
FROM performance_schema.events_statements_summary_by_digest
ORDER BY total_s DESC LIMIT 5;"

3)采集指标验证与解释(示例命令与预期)

# 验证 exporter 指标输出
curl -s http://127.0.0.1:9104/metrics | grep -E "mysql_global_status_threads_running|mysql_global_status_qps" | head
# 预期:返回 Prometheus 格式的指标
# 关键指标核对(MySQL 内部)
mysql -uroot -p -e "SHOW GLOBAL STATUS LIKE 'Threads_running';"
mysql -uroot -p -e "SHOW GLOBAL STATUS LIKE 'Com_commit';"
mysql -uroot -p -e "SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read_requests';"

4)排错与故障排查示例

# 1. Exporter 连接失败:检查账号与连通性
mysql -uexporter -pStr0ngPass! -h127.0.0.1 -e "SELECT 1;"
# 若失败:检查权限/密码/防火墙/skip-name-resolve

# 2. 指标缺失:检查采集开关
mysql -uroot -p -e "SHOW VARIABLES LIKE 'performance_schema';"
# 若为 OFF:修改 my.cnf 启用并重启

# 3. 采集负载高:检查采样频率与采集器参数
ps -ef | grep mysqld_exporter
# 若 CPU 异常高:减少 --collect.* 采集项与降低采样频率

5)架构与标签示例(实例/集群/业务)

标签规范建议(Prometheus labels)
env=prod
biz=trade
cluster=mysql-a
role=primary

6)练习

  1. 使用 curl 拉取 exporter 指标,计算 1 分钟 QPS 与 TPS,写出计算公式与结果。
  2. 手动制造慢查询(例如 SELECT SLEEP(1);),在 slow.log 中找到记录并解释字段含义。
  3. 修改采样频率(10s→30s),对比 Prometheus 采样点数量与导出负载。
  4. 模拟主从延迟(暂停从库 SQL 线程),观察 Seconds_Behind_Master 变化并截图说明。

以上方案确保采集最小权限、组件分离、高可用与可追溯性:采集账号仅授权必要权限;采集组件与数据库分离部署;关键指标可双通道采集或本地缓存;对复制与切换事件进行事件化上报,为告警策略与故障排查提供可靠数据基础。