MySQL Exporter 接入

最近更新时间:2024-10-21 19:29:32

我的收藏

操作场景

MySQL Exporter 是社区专门为采集 MySQL/MariaDB 数据库监控指标而设计开发,通过 Exporter 上报核心的数据库指标,用于异常报警和监控大盘展示,腾讯云可观测平台 Prometheus 提供了与 MySQL Exporter 集成及开箱即用的 Grafana 监控大盘。
目前,Exporter 支持高于5.6版本的 MySQL 和高于10.1版本的 MariaDB。在 MySQL/MariaDB 低于5.6版本时,部分监控指标可能无法被采集。
说明:
如果需要监控的 MySQL 是腾讯云 云数据库 MySQL,推荐使用集成中心 云监控集成,支持一键采集云产品指标。

接入方式

方式一:一键安装(推荐)

操作步骤

2. 在实例列表中,选择对应的 Prometheus 实例。
3. 进入实例详情页,选择数据采集 > 集成中心
4. 在集成中心找到并单击 MySQL,即会弹出一个安装窗口,在安装页面填写指标采集名称和地址等信息,并单击保存即可。




配置说明

参数
说明
名称
集成名称,命名规范如下:
名称具有唯一性。
名称需要符合下面的正则:'^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$'。
用户名
MySQL 的用户名称。
密码
MySQL 的密码。
地址
MySQL 的连接地址。
标签
给指标添加自定义 Label。
Exporter 配置
参数描述可能存在偏差,具体可参考 官方文档
auto_increment.columns:从 information_schema 采集 auto_increment 列和最大值。
binlog_size:采集所有已注册的 binlog 文件的当前大小。
engine_innodb_status:从 SHOW ENGINE INNODB STATUS 采集。
engine_tokudb_status:从 SHOW ENGINE TOKUDB STATUS 采集。
global_status:从 SHOW GLOBAL STATUS 采集,默认为 true。
global_variables:从 SHOW GLOBAL VARIABLES 采集,默认为 true。
info_schema.clientstats:如果使用 userstat=1 运行,则设置为 true 以采集客户端统计信息。
info_schema.innodb_metrics:从 information_schema.innodb_metrics 采集指标。
info_schema.innodb_tablespaces:从 information_schema.innodb_sys_tablespaces 采集指标。
info_schema.innodb_cmp:从 information_schema.innodb_cmp 采集 InnoDB 压缩表指标,默认为 true。
info_schema.innodb_cmpmem:从 information_schema.innodb_cmpmem 采集 InnoDB 缓冲池压缩指标(默认为 true)。
info_schema.processlist:从 information_schema.processlist 采集线程状态计数。
info_schema.query_response_time:如果 query_response_time_stats 为 ON,则采集查询响应时间分布(默认为 true)。
info_schema.tables:从 information_schema.tables 采集指标。
info_schema.tables.databases:用于收集表统计信息的数据库列表,逗号分隔,默认是 '*' 表示所有数据库。
info_schema.tablestats:如果使用 userstat=1 运行,则设置为 true 以采集表统计信息。
info_schema.schemastats:如果使用 userstat=1 运行,则设置为 true 以采集架构统计信息。
info_schema.userstats:如果使用 userstat=1 运行,则设置为 true 以采集用户统计信息。
perf_schema.eventsstatements:从 performance_schema.events_statements_summary_by_digest 采集指标。
perf_schema.eventsstatements.digest_text_limit:标准化语句文本的最大长度,默认值为120。
perf_schema.eventsstatements.limit:按响应时间限制事件语句摘要的数量,默认值为250。
perf_schema.eventsstatements.timelimit:限制 'last_seen' 事件语句的最大时间,单位为秒,默认值为86400。
perf_schema.eventsstatementssum:从 performance_schema.events_statements_summary_by_digest 汇总采集指标。
perf_schema.eventswaits:从 performance_schema.events_waits_summary_global_by_event_name 采集指标。
perf_schema.file_events:从 performance_schema.file_summary_by_event_name 采集指标。
perf_schema.file_instances:从 performance_schema.file_summary_by_instance采集指标。
perf_schema.indexiowaits:从 performance_schema.table_io_waits_summary_by_index_usage 采集指标。
perf_schema.tableiowaits:从 performance_schema.table_io_waits_summary_by_table 采集指标。
perf_schema.tablelocks:从 performance_schema.table_lock_waits_summary_by_table 采集指标。
perf_schema.replication_group_member_stats:从 performance_schema.replication_group_member_stats 采集指标。
perf_schema.replication_applier_status_by_worker:从 performance_schema.replication_applier_status_by_worker 采集指标。
slave_status:从 SHOW SLAVE STATUS 采集,默认为 true。
slave_hosts:从 SHOW SLAVE HOSTS 采集。
heartbeat:从 heartbeat 采集。
heartbeat.database:收集 heartbeat 数据的数据库,默认值为 heartbeat。
heartbeat.table:收集 heartbeat 数据的表,默认值为 heartbeat。

方式二:自定义安装

说明
为了方便安装管理 Exporter,推荐使用腾讯云 容器服务 来统一管理。

前提条件

在 Prometheus 实例对应地域及私有网络(VPC)下,创建腾讯云容器服务 Kubernetes 集群,并为集群创建 命名空间
Prometheus 监控服务控制台 > 选择对应的 Prometheus 实例 > 数据采集 > 集成容器服务中找到对应容器集群完成关联集群操作。可参见指引 关联集群

操作步骤

步骤一:数据库授权
因为 MySQL Exporter 是通过查询数据库中状态数据来对其进行监控,所以需要为对应的数据库实例进行授权。账号和密码需根据实际情况而定,授权步骤如下:
1. 登录 云数据库 MySQL 控制台。
2. 在实例列表页面单击需要授权的数据库名称,进入数据库详情页。
3. 选择数据库管理 > 账号管理,进入账号管理页面,根据业务实际需要创建监控建立的账号。
4. 单击账号右侧操作项下的修改权限,修改对应权限。示例如下图所示:



5. 您也可以在您的云服务器中通过执行以下命令进行授权:
CREATE USER 'exporter'@'ip' IDENTIFIED BY 'XXXXXXXX' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'ip';
说明
建议为该用户设置最大连接数限制,以避免因监控数据抓取对数据库带来影响。但并非所有的数据库版本中都可以生效,例如 MariaDB 10.1 版本不支持最大连接数设置,则无法生效。详情请参见 MariaDB 说明
步骤二:Exporter 部署
2. 在左侧菜单栏中单击 集群。
3. 单击需要获取集群访问凭证的集群 ID/名称,进入该集群的管理页面。
4. 执行以下 使用 Secret 管理 MySQL 连接串 > 部署 MySQL Exporter > 验证 步骤完成 Exporter 部署。
步骤三:使用 Secret 管理 MySQL 连接串
1. 在左侧菜单中选择工作负载 > Deployment,进入 Deployment 页面。
2. 在页面右上角单击 YAML 创建资源,创建 YAML 配置,配置说明如下: 使用 Kubernetes 的 Secret 来管理连接串,并对连接串进行加密处理,在启动 MySQL Exporter 的时候直接使用 Secret Key,需要调整对应的连接串,YAML 配置示例如下:
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret-test
namespace: mysql-demo
type: Opaque
stringData:
datasource: "user:password@tcp(ip:port)/" #对应 MySQL 连接串信息

部署 MySQL Exporter
在 Deployment 管理页面,选择对应的命名空间来进行部署服务,可以通过控制台的方式创建。如下以 YAML 的方式部署 Exporter, 配置示例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-app: mysql-exporter # 根据业务需要调整成对应的名称,建议加上 MySQL 实例的信息
name: mysql-exporter # 根据业务需要调整成对应的名称,建议加上 MySQL 实例的信息
namespace: mysql-demo
spec:
replicas: 1
selector:
matchLabels:
k8s-app: mysql-exporter # 根据业务需要调整成对应的名称,建议加上 MySQL 实例的信息
template:
metadata:
labels:
k8s-app: mysql-exporter # 根据业务需要调整成对应的名称,建议加上 MySQL 实例的信息
spec:
containers:
- env:
- name: DATA_SOURCE_NAME
valueFrom:
secretKeyRef:
name: mysql-secret-test # 对应上一步中的 Secret 的名称
key: datasource # 对应上一步中的 Secret Key
image: ccr.ccs.tencentyun.com/rig-agent/mysqld-exporter:v0.12.1
imagePullPolicy: IfNotPresent
name: mysql-exporter
ports:
- containerPort: 9104
name: metric-port
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: qcloudregistrykey
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30

验证
1. 在 Deployment 页面单击上述步骤创建的 Deployment,进入 Deployment 管理页面。
2. 单击日志页签,可以查看到 Exporter 成功启动并暴露对应的访问地址,如下图所示:


3. 单击 Pod 管理页签进入 Pod 页面。
4. 在右侧的操作项下单击远程登录,即可登录 Pod,在命令行窗口中执行以下 curl 命令对应 Exporter 暴露的地址,可以正常得到对应的 MySQL 指标。如发现未能得到对应的数据,请检查连接串是否正确,具体如下:
curl localhost:9104/metrics
执行结果如下图所示:


步骤四:添加采集任务
1. 登录 腾讯云可观测平台 Prometheus 控制台,选择对应 Prometheus 实例进入管理页面。
2. 单击数据采集 > 集成容器服务,选择已经关联的集群,通过数据采集配置 > 新建自定义监控 > YAML 编辑来添加采集配置。
3. 通过服务发现添加 PodMonitors 来定义 Prometheus 抓取任务,YAML 配置示例如下:
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: mysql-exporter # 填写一个唯一名称
namespace: cm-prometheus # 按量实例: 集群的 namesapce; 包年包月实例(已停止售卖): namespace 固定,不要修改
spec:
podMetricsEndpoints:
- interval: 30s
port: metric-port # 填写pod yaml中Prometheus Exporter对应的Port的Name
path: /metrics # 填写Prometheus Exporter对应的Path的值,不填默认/metrics
relabelings:
- action: replace
sourceLabels:
- instance
regex: (.*)
targetLabel: instance
replacement: 'crs-xxxxxx' # 调整成对应的 MySQL 实例 ID
- action: replace
sourceLabels:
- instance
regex: (.*)
targetLabel: ip
replacement: '1.x.x.x' # 调整成对应的 MySQL 实例 IP
namespaceSelector: # 选择要监控pod所在的namespace
matchNames:
- mysql-demo
selector: # 填写要监控pod的Label值,以定位目标pod
matchLabels:
k8s-app: mysql-exporter


查看监控

前提条件

Prometheus 实例已绑定 Grafana 实例。

操作步骤

1. 登录 腾讯云可观测平台 Prometheus 控制台,选择对应 Prometheus 实例进入管理页面。
2. 单击数据采集 > 集成中心,进入集成中心页面。找到 MySQL 监控,安装对应的 Grafana Dashboard 即可开启 MySQL 监控大盘,查看实例相关的监控数据,如下图所示:



配置告警

腾讯云 Prometheus 托管服务内置了部分 MySQL 数据库的报警策略模板,可根据业务实际的情况调整对应的阈值来添加告警策略。详情请参见 新建告警策略

附录:MySQL Exporter 采集参数说明

MySQL Exporter 使用各种 Collector 来控制采集数据的启停,具体参数如下:
名称
MySQL 版本
描述
collect.auto_increment.columns
5.1
在 information_schema 中采集 auto_increment 和最大值。
collect.binlog_size
5.1
采集所有注册的 binlog 文件大小。
collect.engine_innodb_status
5.1
从 SHOW ENGINE INNODB STATUS 中采集状态数据。
collect.engine_tokudb_status
5.6
从 SHOW ENGINE TOKUDB STATUS 中采集状态数据。
collect.global_status
5.1
从 SHOW GLOBAL STATUS(默认开启)中采集状态数据。
collect.global_variables
5.1
从 SHOW GLOBAL VARIABLES(默认开启)中采集状态数据。
collect.info_schema.clientstats
5.5
如果设置了 userstat=1,设置成 true 来开启用户端数据采集。
collect.info_schema.innodb_metrics
5.6
从 information_schema.innodb_metrics 中采集监控数据。
collect.info_schema.innodb_tablespaces
5.7
从 information_schema.innodb_sys_tablespaces 中采集监控数据。
collect.info_schema.innodb_cmp
5.5
从 information_schema.innodb_cmp 中采集 InnoDB 压缩表的监控数据。
collect.info_schema.innodb_cmpmem
5.5
从 information_schema.innodb_cmpmem 中采集 InnoDB buffer pool compression 的监控数据。
collect.info_schema.processlist
5.1
从 information_schema.processlist 中采集线程状态计数的监控数据。
collect.info_schema.processlist.min_time
5.1
线程可以被统计所维持的状态的最小时间。(默认:0)
collect.info_schema.query_response_time
5.5
如果 query_response_time_stats 被设置成 ON,采集查询相应时间的分布。
collect.info_schema.replica_host
5.6
从 information_schema.replica_host_status 中采集状态数据。
collect.info_schema.tables
5.1
从 information_schema.tables 中采集状态数据。
collect.info_schema.tables.databases
5.1
设置需要采集表状态的数据库, 或者设置成 '*' 来采集所有的。
collect.info_schema.tablestats
5.1
如果设置了 userstat=1,设置成 true 来采集表统计数据。
collect.info_schema.schemastats
5.1
如果设置了 userstat=1,设置成 true 来采集 schema 统计数据。
collect.info_schema.userstats
5.1
如果设置了 userstat=1,设置成 true 来采集用户统计数据。
collect.perf_schema.eventsstatements
5.6
从 performance_schema.events_statements_summary_by_digest 中采集监控数据。
collect.perf_schema.eventsstatements.digest_text_limit
5.6
设置正常文本语句的最大长度。 (默认:120)
collect.perf_schema.eventsstatements.limit
5.6
事件语句的限制数量。(默认:250)
collect.perf_schema.eventsstatements.timelimit
5.6
限制事件语句 'last_seen' 可以保持多久, 单位为秒。 (默认:86400)
collect.perf_schema.eventsstatementssum
5.7
从 performance_schema.events_statements_summary_by_digest summed 中采集监控数据。
collect.perf_schema.eventswaits
5.5
从 performance_schema.events_waits_summary_global_by_event_name 中采集监控数据。
collect.perf_schema.file_events
5.6
从 performance_schema.file_summary_by_event_name 中采集监控数据。
collect.perf_schema.file_instances
5.5
从 performance_schema.file_summary_by_instance 中采集监控数据。
collect.perf_schema.indexiowaits
5.6
从 performance_schema.table_io_waits_summary_by_index_usage 中采集监控数据。
collect.perf_schema.tableiowaits
5.6
从 performance_schema.table_io_waits_summary_by_table 中采集监控数据。
collect.perf_schema.tablelocks
5.6
从 performance_schema.table_lock_waits_summary_by_table 中采集监控数据。
collect.perf_schema.replication_group_members
5.7
从 performance_schema.replication_group_members 中采集监控数据。
collect.perf_schema.replication_group_member_stats
5.7
从 from performance_schema.replication_group_member_stats 中采集监控数据。
collect.perf_schema.replication_applier_status_by_worker
5.7
从 performance_schema.replication_applier_status_by_worker 中采集监控数据。
collect.slave_status
5.1
从 SHOW SLAVE STATUS(默认开启)中采集监控数据。
collect.slave_hosts
5.1
从 SHOW SLAVE HOSTS 中采集监控数据。
collect.heartbeat
5.1
heartbeat 中采集监控数据。
collect.heartbeat.database
5.1
数据库心跳检测的数据源。(默认:heartbeat)
collect.heartbeat.table
5.1
表心跳检测的数据源。(默认:heartbeat)
collect.heartbeat.utc
5.1
对当前的数据库服务器使用 UTC 时间戳 (pt-heartbeat is called with --utc)。(默认:false)

全局配置参数

名称
描述
config.my-cnf
用来读取数据库认证信息的配置文件 .my.cnf 位置。 (默认:~/.my.cnf)
log.level
日志级别。(默认:info)
exporter.lock_wait_timeout
为链接设置 lock_wait_timeout(单位:秒)以避免对元数据的锁时间太长。(默认:2)
exporter.log_slow_filter
添加 log_slow_filter 以避免抓取的慢查询被记录。 提示:不支持 Oracle MySQL。
web.listen-address
web 端口监听地址。
web.telemetry-path
metrics 接口路径。
version
打印版本信息。

heartbeat 心跳检测

如果开启 collect.heartbeat, mysqld_exporter 会通过心跳检测机制抓取复制延迟数据。