MySQL 可观测集成指南:指标、慢查询与语句级分析
通过观测云 DataKit 接入 MySQL,统一采集实例指标、慢查询日志与 DBM 语句级性能数据,并配置可视化、告警和 APM 关联排障。
MySQL 是企业系统里最常见的数据库,也是故障高发区——慢查询、连接耗尽、主从延迟、锁等待,任何一类问题都能直接传导到业务接口。本文介绍如何通过观测云 DataKit接入 MySQL,实现指标、慢查询日志与语句级性能数据的统一采集,并配置可视化与告警。
集成概览
观测云 MySQL 集成基于一体式采集器 DataKit,覆盖三类数据:
- 指标:连接数、QPS/TPS、慢查询数、InnoDB Buffer Pool 命中率、主从复制延迟、表空间等;
- 慢查询日志:采集慢日志文件,经 Pipeline 内置 MySQL 解析模板结构化,提取执行耗时、锁等待、扫描行数、SQL 语句等字段;
- 语句级指标(DBM):按归一化 SQL 聚合的执行次数、平均耗时、返回行数分布,支持跨实例搜索与聚合,并可关联 SQL 对象、活动采样与执行计划——回答"到底是哪条 SQL 拖慢了库"。
三类数据进入观测云同一数据底座后,可与应用链路(APM)按标签关联:从一次慢接口直接下钻到其触发的慢 SQL。
前置条件
- 已安装 DataKit(支持主机直装、Kubernetes DaemonSet 等方式),并正常上报数据;
- MySQL 侧准备一个只读监控账号,授予必要权限:
CREATE USER 'datakit'@'%' IDENTIFIED BY '<密码>';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'datakit'@'%';
- MySQL 8.0 建议开启 performance_schema(语句级分析依赖);需要采集慢日志时,确认 slow_query_log = ON 并记录日志文件路径。
延伸阅读日志管理新手入门指南→
接入步骤
1. 开启指标采集
进入 DataKit 配置目录,复制 MySQL 采集器样例并启用:
cd /usr/local/datakit/conf.d/db
cp mysql.conf.sample mysql.conf
核心配置项:
[[inputs.mysql]]
host = "127.0.0.1"
port = 3306
user = "datakit"
pass = "<密码>"
interval = "10s"
innodb = true # InnoDB 引擎指标
replication = true # 主从复制状态与延迟
[inputs.mysql.tags]
service = "order-db"
env = "prod"
标签建议与全局规范保持一致(service/env/version 等),这是后续与应用链路、基础设施指标关联的前提。保存后重启 DataKit 生效。
2. 接入慢查询日志
MySQL 慢日志是非结构化文本,接入的关键是 Pipeline 解析。观测云内置 MySQL 慢日志解析模板,在日志采集中指定对应 Pipeline 即可把原始行切割为结构化字段:
[[inputs.logging]]
logfiles = ["/var/log/mysql/slow.log"]
source = "mysql-slowlog"
service = "order-db"
pipeline = "mysql.p"
解析后,慢日志中的查询耗时(Query_time)、锁等待(Lock_time)、扫描行数(Rows_examined)、SQL 原文都成为可筛选、可聚合的字段——可以直接回答"过去一小时执行超过 2 秒的 SQL 有哪些、都来自哪个服务"。
3. 开启语句级分析(DBM)
在采集器配置中启用 DBM 能力后,DataKit 会对 SQL 做归一化处理(把 SELECT * FROM orders WHERE id = 123 归一为 SELECT * FROM orders WHERE id = ?),按归一化语句聚合性能指标。这样同一条 SQL 无论参数如何变化,都能看到一个整体的执行画像:执行次数、平均/P95 耗时、影响行数,并可下钻到具体执行计划与活动采样。跨实例场景下,还能按归一化哈希搜索"哪几个实例都在执行这条慢 SQL"。
可视化与告警
接入完成后:
延伸阅读2026 企业级日志监控与存储平台选型指南:深度对比主流产品存储成本,查询性能与功能→
| 检测项 | 建议阈值起点 | 说明 |
|---|---|---|
| 连接数使用率 | > 80% | Threads_connected / max_connections |
| 慢查询数 | 环比突增 | 用突变检测比固定阈值更有效 |
| 主从复制延迟 | > 30s | Seconds_Behind_Master |
| 实例存活 | 不可达即告警 | 基础设施存活检测 |
| Buffer Pool 命中率 | < 99% | InnoDB 性能晴雨表 |
- 联动排障:在 APM 中发现接口变慢 → 下钻调用链 → 定位到慢 SQL → 在 MySQL 仪表板确认实例资源水位,整条路径在同一平台内完成。
常见问题
Q:采集会对 MySQL 性能有影响吗?
指标采集本质是周期性执行只读状态查询,开销通常在可忽略范围;语句级分析基于 performance_schema,建议在压测环境先行验证,生产环境按需调整采样。
Q:RDS、PolarDB 等云上数据库能接吗?
可以。云数据库通过云监控 API 集成接入指标(观测云提供阿里云 RDS 等云产品集成),慢日志与语句级能力视云厂商开放程度而定;自建 MySQL 则用本文的 DataKit 直采方式。
Q:历史慢日志会补采吗?
日志采集默认从当前位置开始增量采集,历史文件的补采与留存策略可在配置中调整,注意大体积历史文件会推高当日写入量。
本文基于观测云公开文档整理,采集器配置项以 DataKit 官方文档最新版本为准。观测云提供650+ 技术栈与云服务集成模板,覆盖数据库、中间件、云平台与应用运行时。