本文介绍如何将自建 MySQL / MariaDB 接入云监控 2.0。接入组件基于 aio-exporter 的 MySQL(mysqld)适配采集指标,覆盖连接、QPS、InnoDB 缓冲池、主从复制与慢查询等观测场景,支持 ACK 集群(CS)与 ECS(VPC) 两种部署环境。接入后自动生成 MySQL 实例实体、内置大盘与告警规则。
支持的中间件条件
接入前请确认目标实例满足以下条件,否则可能出现采集不到数据或指标缺失。
|
条件项 |
要求 |
|
数据库版本 |
MySQL ≥ 5.6、MariaDB ≥ 10.3(E2E 验证 MySQL 8.0)。采集项按版本分级门控(5.1—8.0),版本越低可用采集项越少: |
|
部署形态 |
自建 MySQL / MariaDB / Percona。云托管实例(如阿里云 RDS MySQL)在满足账号与网络条件时同样可接入,接入时把「云厂商 / 部署来源」选为对应云厂商即可 |
|
监控账号 |
需专用只读账号,具备 |
|
连接方式 |
以 |
|
网络连通 |
Exporter 需能直连数据库端口(默认 3306)。CS 环境要求目标 MySQL 可在所选 ACK 集群网络内连通;ECS(VPC) 环境要求托管探针交换机网段可访问目标 ECS。安全组、白名单需放行对应出口地址 |
|
采集开销 |
默认开启 |
前提条件
-
已开通可观测监控Prometheus版。
-
接入 CS 环境:目标 ACK 集群已接入云监控 2.0,且集群状态为运行中;目标 MySQL 服务可在该集群网络内连通。
-
接入 ECS(VPC) 环境:已选定目标 MySQL 所在 ECS,并确保托管探针交换机网段可访问该 ECS。
费用说明
-
根据产生的指标数据量,在 Prometheus 产品中计费。无其他费用。
接入方法
步骤一:创建监控账号
在目标数据库上执行以下 SQL,创建专用监控账号并授权(MAX_USER_CONNECTIONS 限制监控账号占用的连接数,避免影响业务):
CREATE USER 'exporter'@'%' IDENTIFIED BY '<password>' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';
FLUSH PRIVILEGES;
|
权限 |
用途 |
|
PROCESS |
读取进程列表与全局状态 |
|
REPLICATION CLIENT |
读取主从复制状态 |
|
SELECT |
读取 information_schema / performance_schema 等元数据 |
步骤二:选择接入环境
本插件支持 CS 与 ECS(VPC) 两种接入环境,工作原理不同,请按 MySQL 实际部署位置选择:
CS(容器服务)
-
将 Exporter 安装到用户指定的目标 ACK 集群,并复用该集群已有的采集器进行指标采集。
-
观测对象为 ACK 集群。
-
网络要求:目标 MySQL 服务可在该集群网络内连通即可(例如集群内 Service,或集群能访问到的 VPC 内网地址)。
ECS(VPC)
-
选择目标 MySQL 服务部署的 ECS 机器,系统根据该 ECS 的 VPC 信息部署全托管采集器。
-
不会在 ECS 上安装任何进程。
-
观测对象为 ECS 实例。
-
网络要求:托管探针所在交换机网段需允许访问目标 ECS(安全组、ACL 等需放行)。
|
环境 |
Exporter 部署位置 |
是否在业务机上装进程 |
观测对象 |
网络通达要求 |
|
CS |
用户指定的 ACK 集群 |
否(部署在集群内,不占用业务 Pod 宿主) |
ACK 集群 |
MySQL 可在该集群网络内连通 |
|
ECS(VPC) |
系统按 VPC 部署的全托管采集器 |
否,不在 ECS 上安装任何进程 |
ECS 实例 |
托管探针交换机网段可访问目标 ECS |
步骤三:接入配置
-
登录云监控2.0控制台,选择目标工作空间后,在左侧导航栏单击 接入中心 ,单击 MySQL 开始接入。
-
选择接入环境(CS 或 ECS(VPC)),并在下拉列表中选择 观测对象 。
-
接入配置,配置完成后单击 确定 :
配置项
是否必填
说明
MySQL 服务地址
是
CS 环境填写集群内访问地址,如
mysql-server.<namespace>;ECS(VPC) 环境填写内网或公网访问地址MySQL 服务端口
是
默认 3306
云厂商 / 部署来源
否
写入指标标签
provider并参与实体发现,自建选择「自建」(self-hosted/mysql),云托管选择对应云厂商网络连通性测试
—
仅 CS 环境提供,用于验证 Exporter 与数据库之间的网络连通性
MySQL 账号
是
步骤一创建的监控账号,默认
exporterMySQL 密码
是
监控账号对应的密码
Metric 采集间隔(秒)
是
默认 15,取值范围 1—60
额外采集项
否
在默认四项之外追加采集项,可多选。
processlist、表级统计与performance_schema类开销较大,建议按需开启自定义标签
否
注入到指标上的额外标签,便于按业务维度筛选
使用公网镜像地址
否
默认关闭走 VPC 内网镜像仓库;无法访问内网镜像仓库时开启
-
接入成功后,可在 实体探索 查看接入的实体及相关可观测数据。
数据使用说明
实体说明
接入后,云监控每 3 分钟从 mysql_up 指标的标签中发现一次 MySQL 实例,并生成中间件实体:
|
维度 |
说明 |
|
域(domain) |
middleware |
|
实体类型 |
middleware.mysql |
|
实体过滤条件 |
|
|
观测对象(绑定实体) |
CS 环境为 |
实体字段来自采集标签,与安装次数无关:
|
字段 |
说明 |
|
instance_id |
实例标识,取自 |
|
provider |
部署来源,如 |
|
port |
数据库端口 |
|
region_id |
地域 |
|
env_type |
部署环境类型(CS / ECS) |
|
cluster_id |
所属集群标识 |
可在 实体探索 或 中间件洞察 应用中按上述字段检索实例。
内置大盘
|
大盘名称 |
查看入口 |
说明 |
|
MySQL 概览(实例概览) |
实体详情页 实例概览 页签 |
UModel 大盘,随实例上下文自动绑定 |
|
MySQL 概览 / MySQL Overview |
Grafana 大盘列表 |
Grafana 大盘,提供中英文两套 |
核心指标
以下为实体数据集 middleware.metric.mysql 的完整指标清单(共 57 个),可在实体详情、大盘与告警中直接使用:
|
指标名 |
类型 |
单位 |
显示名 |
说明 |
|
mysql_up |
gauge |
- |
MySQL 存活 |
MySQL/MariaDB 实例是否可达且采集成功。1 表示存活,0 表示不可用。 |
|
mysql_uptime |
gauge |
秒 |
运行时间 |
MySQL 服务进程自启动以来运行的秒数。 |
|
mysql_qps |
counter |
次/秒 |
每秒查询数 |
客户端执行语句的每秒查询数(Questions,不含 COM_PING / COM_STATISTICS 等)。 |
|
mysql_queries_s |
counter |
次/秒 |
每秒查询总数 |
每秒执行的语句总数,包含存储程序内部语句(Queries)。 |
|
mysql_threads_connected |
gauge |
- |
已连接线程数 |
当前已连接到服务器的客户端线程数。 |
|
mysql_threads_running |
gauge |
- |
运行中线程数 |
当前正在执行语句的非空闲线程数。 |
|
mysql_slow_queries_s |
counter |
次/秒 |
每秒慢查询数 |
执行时间超过 long_query_time 的慢查询速率(每秒)。 |
|
mysql_buffer_pool_size |
gauge |
字节 |
InnoDB 缓冲池大小 |
已配置的 InnoDB 缓冲池大小(字节,innodb_buffer_pool_size)。 |
|
mysql_connection_usage |
gauge |
% |
连接使用率 |
当前已连接线程数占 max_connections 的百分比。 |
|
mysql_max_used |
gauge |
- |
最大已用连接数 |
自上次 FLUSH STATUS 或服务重启以来同时连接数的历史峰值。 |
|
mysql_max_connections |
gauge |
- |
最大连接数 |
允许的最大并发客户端连接数(max_connections)。 |
|
mysql_cached |
gauge |
- |
缓存线程数 |
当前线程缓存中空闲、可复用的线程数。 |
|
mysql_created_s |
counter |
次/秒 |
每秒新建线程数 |
为处理连接而新建线程的速率(偏高时可能表示 thread_cache_size 偏小)。 |
|
mysql_aborted_connects |
counter |
- |
中止连接次数 |
连接失败次数的速率(如认证失败、主机被拒绝等)。 |
|
mysql_aborted_clients |
counter |
- |
中止客户端数 |
客户端未正常关闭连接导致的中止连接速率。 |
|
mysql_connection_errors |
counter |
- |
连接错误数 |
按错误类型汇总的连接错误速率(如 max_connections、accept、internal 等)。 |
|
mysql_top_command_counters |
counter |
- |
Top 命令计数 |
按命令类型统计的 Top 10 COM_* 命令执行速率。 |
|
mysql_handlers |
counter |
- |
Handler 请求 |
按 Handler 类型统计的 Top 10 存储引擎 Handler 请求速率(如 read_next、write、update)。 |
|
mysql_full_join |
counter |
- |
全表 JOIN |
对第一张表做全表扫描的 JOIN 速率(Select_full_join,通常表示缺少索引)。 |
|
mysql_full_range_join |
counter |
- |
全范围 JOIN |
对参考表使用范围搜索的 JOIN 速率(Select_full_range_join)。 |
|
mysql_range |
counter |
- |
范围查询 |
在第一张表上使用范围扫描的 JOIN 速率(Select_range)。 |
|
mysql_range_check |
counter |
- |
范围检查查询 |
每行后检查键使用情况的 JOIN 速率(Select_range_check,通常对性能不友好)。 |
|
mysql_scan |
counter |
- |
全表扫描 |
对第一张表做全表扫描的查询速率(Select_scan)。 |
|
mysql_sort_rows |
counter |
- |
排序行数 |
参与排序的行数速率(Sort_rows)。 |
|
mysql_sort_range |
counter |
- |
范围排序 |
使用范围的排序速率(Sort_range)。 |
|
mysql_sort_merge_passes |
counter |
- |
排序归并次数 |
排序归并趟数速率;偏高时可能需要增大 sort_buffer_size。 |
|
mysql_sort_scan |
counter |
- |
扫描排序 |
通过扫描表完成的排序速率(Sort_scan)。 |
|
mysql_tmp_tables |
counter |
- |
临时表创建数 |
内存中创建内部临时表的速率(Created_tmp_tables)。 |
|
mysql_tmp_disk_tables |
counter |
- |
磁盘临时表创建数 |
在磁盘上创建内部临时表的速率(Created_tmp_disk_tables);相对内存临时表占比偏高时需调优。 |
|
mysql_tmp_files |
counter |
- |
临时文件创建数 |
服务器创建临时文件的速率(Created_tmp_files)。 |
|
mysql_immediate |
counter |
- |
立即表锁数 |
立即获得表锁的速率(Table_locks_immediate)。 |
|
mysql_waited |
counter |
- |
等待表锁数 |
需要等待的表锁速率(Table_locks_waited);偏高表示锁竞争。 |
|
mysql_received |
counter |
字节 |
接收流量 |
每秒从所有客户端接收的字节数。 |
|
mysql_sent |
counter |
字节 |
发送流量 |
每秒发送给所有客户端的字节数。 |
|
mysql_data |
gauge |
- |
缓冲池页数 |
InnoDB 缓冲池中的页数量(按页状态区分时有相应维度)。 |
|
mysql_dirty |
gauge |
- |
缓冲池脏页数 |
InnoDB 缓冲池中当前待刷盘的脏页数量。 |
|
mysql_innodb_row_operations |
counter |
次/秒 |
InnoDB 行操作 |
按操作类型汇总的 InnoDB 行操作速率(read/insert/update/delete)。 |
|
mysql_read |
counter |
- |
缓冲页读取 |
按页类型汇总的 InnoDB 缓冲页读取速率。 |
|
mysql_written |
counter |
- |
缓冲页写入 |
按页类型汇总的 InnoDB 缓冲页写入速率。 |
|
mysql_log_waits |
counter |
- |
InnoDB 日志等待 |
等待 InnoDB redo 日志缓冲区空间的速率(Innodb_log_waits);偏高时可能需要增大 innodb_log_buffer_size。 |
|
mysql_open_files |
gauge |
- |
打开文件数 |
服务器当前已打开的文件数量。 |
|
mysql_open_files_limit |
gauge |
- |
打开文件上限 |
服务器允许打开的文件描述符上限(open_files_limit)。 |
|
mysql_opened_files_s |
counter |
次/秒 |
每秒打开文件数 |
服务器打开文件的速率;持续偏高可能表示表/文件缓存不足。 |
|
mysql_open_tables |
gauge |
- |
打开表数 |
当前表缓存中已打开的表数量。 |
|
mysql_table_open_cache |
gauge |
- |
表打开缓存 |
已配置的表打开缓存大小(table_open_cache)。 |
|
mysql_opened_tables_s |
counter |
次/秒 |
每秒打开表数 |
打开表的速率;相对已打开表数偏高时可能需要增大 table_open_cache。 |
|
mysql_cache_hits |
counter |
- |
表缓存命中 |
表打开缓存命中速率(表已在缓存中)。 |
|
mysql_cache_misses |
counter |
- |
表缓存未命中 |
表打开缓存未命中速率(需重新打开表)。 |
|
mysql_process_states |
gauge |
- |
进程状态分布 |
按线程状态汇总的 PROCESSLIST 线程数。 |
|
mysql_user |
gauge |
- |
按用户分布连接 |
按 MySQL 用户汇总的 PROCESSLIST 线程数。 |
|
mysql_cmd |
gauge |
- |
按命令分布连接 |
按当前命令汇总的 PROCESSLIST 线程数(如 Sleep、Query)。 |
|
mysql_io_running |
gauge |
- |
副本 IO 线程状态 |
副本 I/O 线程是否在运行(1/Yes)。适用于副本实例。 |
|
mysql_sql_running |
gauge |
- |
副本 SQL 线程状态 |
副本 SQL 线程是否在运行(1/Yes)。适用于副本实例。 |
|
mysql_seconds_behind_master |
gauge |
秒 |
主从延迟秒数 |
相对主库的复制延迟秒数(Seconds_Behind_Master/Seconds_Behind_Source)。 |
|
mysql_relay_log_space |
gauge |
- |
中继日志空间 |
副本上中继日志(relay log)的总大小(字节)。 |
|
mysql_collector_success_duration |
gauge |
- |
Collector 采集成功 |
各 mysqld_exporter Collector 采集是否成功(1 成功,0 失败)。 |
|
mysql_duration |
gauge |
秒 |
Collector 采集耗时 |
各 mysqld_exporter Collector 最近一次采集耗时(秒)。 |
除上述 MetricSet 聚合指标外,Exporter 采集的原始指标(mysql_*、mysql_global_status_*、mysql_slave_status_* 等)均写入 Prometheus 存储,可直接用 PromQL 查询。
常用查询示例
# 实例 QPS
sum by (target_uri) (rate(mysql_global_status_questions[5m]))
# 连接使用率(%)
100 * mysql_global_status_threads_connected / clamp_min(mysql_global_variables_max_connections, 1)
# 每秒慢查询数
sum by (target_uri) (rate(mysql_global_status_slow_queries[5m]))
# InnoDB 缓冲池命中率(%)
100 * (1 - rate(mysql_global_status_innodb_buffer_pool_reads[5m])
/ clamp_min(rate(mysql_global_status_innodb_buffer_pool_read_requests[5m]), 1))
# 主从复制延迟(秒)
mysql_slave_status_seconds_behind_master
告警模板
接入后以下告警规则自动生效,无需手动配置。CS 与 ECS(VPC) 两个环境的规则一致。告警级别 P1 对应 critical(严重),P2 对应 warning(警告)。
|
告警名称 |
级别 |
PromQL 表达式 |
持续时间 |
说明 |
|
MySQLDown |
P1(严重) |
|
5m |
实例不可用 |
|
MySQLReplicationNotRunning |
P1(严重) |
|
2m |
复制 IO 或 SQL 线程停止 |
|
MySQLReplicationLag |
P1(严重) |
|
1m |
复制延迟持续扩大且未恢复 |
|
MySQLHeartbeatLag |
P1(严重) |
|
1m |
心跳延迟持续扩大且未恢复 |
|
MySQLNotReady |
P2(警告) |
|
5m |
Galera 集群节点未就绪 |
|
MySQLOutOfSync |
P2(警告) |
|
5m |
Galera 集群节点不同步 |
|
MySQLDonorFallingBehind |
P2(警告) |
|
5m |
捐赠节点落后,接收队列积压 |
|
MySQLInnoDBLogWaits |
P2(警告) |
|
— |
InnoDB 日志写入等待磁盘 |
MySQLNotReady、MySQLOutOfSync、MySQLDonorFallingBehind 依赖 Galera(wsrep)相关指标,仅在 Galera / PXC 集群上生效。
存储策略说明
接入 MySQL 后,云监控会创建对应的存储实例用于存储可观测数据。
|
数据类型 |
默认存储位置 |
备注 |
|
指标 |
Prometheus 实例:RegionShare:{{workspaceName}}:{{regionId}} |
关联数据集 |
卸载或修改接入策略
如果期望取消或修改 MySQL 的接入,可以在 接入中心 的 接入管理 页,找到对应的接入策略,进行 编辑 或 删除 。删除接入策略后,Exporter 与采集配置一并移除,已写入的历史指标按存储的生命周期策略保留。