MySQL Server Exporter:Prometheus 监控 MySQL/MariaDB 指南

MySQL Server Exporter:Prometheus 监控 MySQL/MariaDB 指南

原文 :https://github.com/prometheus/mysqld_exporter

说明:安装方式和配置参数以官方文档为准。源码细节请参考 GitHub 仓库。


项目简介

Prometheus 官方维护的 MySQL Server Exporter,用来采集 MySQL 和 MariaDB 的指标。

支持的数据库版本:

  • MySQL >= 5.6
  • MariaDB >= 10.3

前置:创建数据库监控用户

MySQL 里创建一个专用账号,权限越小越好:

sql 复制代码
CREATE USER 'exporter'@'localhost' IDENTIFIED BY '你的密码' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';

MAX_USER_CONNECTIONS 3 限制连接数,防止 exporter 频繁采集把数据库连接池打满。PROCESS 权限用来查 SHOW PROCESSLIST,REPLICATION CLIENT 用来查主从状态。


配置连接信息

配置连接的方式有这么几种:

方式一:.my.cnf 文件(推荐)

创建 .my.cnf 文件,放到 exporter 同目录或指定路径:

ini 复制代码
[client]
host = 127.0.0.1
port = 3306
user = exporter
password = 你的密码

方式二:命令行参数

bash 复制代码
--mysqld.address="127.0.0.1:3306"
--mysqld.username="exporter"

密码通过环境变量传入(避免在命令行明文显示):

bash 复制代码
export MYSQLD_EXPORTER_PASSWORD="你的密码"
./mysqld_exporter

方式三:多目标配置

多个 MySQL 实例共用一个 exporter 时,用 .my.cnf 的多节配置:

ini 复制代码
[client]
user = exporter
password = pwd1

[client.server1]
user = exporter
password = pwd2

[client.server2]
user = exporter
password = pwd3

安装方式

二进制文件

bash 复制代码
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.1/mysqld_exporter-0.15.1.linux-amd64.tar.gz
tar xvf mysqld_exporter-0.15.1.linux-amd64.tar.gz
cd mysqld_exporter-0.15.1.linux-amd64
# 把 .my.cnf 放到当前目录
./mysqld_exporter

默认监听 9104 端口。

Docker 运行

bash 复制代码
docker run -d \
  -p 9104:9104 \
  -v /path/to/.my.cnf:/.my.cnf \
  prom/mysqld-exporter

单目标 vs 多目标模式

单目标

exporter 直接连本地或指定的 MySQL 实例,在 /metrics 暴露指标。适合每台 MySQL 服务器部署一个 exporter 的场景。

多目标

一个 exporter 代理多个 MySQL 实例,通过 /probe 端点按需采集。配置方式:

yaml 复制代码
# prometheus.yml
scrape_configs:
  - job_name: 'mysql'
    metrics_path: /probe
    params:
      auth_module: [client.server1]
    static_configs:
      - targets:
        - db1:3306
        - db2:3306
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: exporter服务器IP:9104

支持的收集器

默认启用的收集器:

收集器 说明
collect.global_status MySQL 全局状态(SHOW GLOBAL STATUS)
collect.global_variables MySQL 全局变量(SHOW GLOBAL VARIABLES)
collect.slave_status 主从复制状态

可通过参数开启更多收集器:

bash 复制代码
# 启用自增列监控
--collect.auto_increment.columns

# 启用表结构信息采集
--collect.info_schema.tables

# 启用 InnoDB 指标(默认就开了一部分)
--collect.innodb_metrics

# 启用用户统计
--collect.info_schema.userstats

# 启用 performance_schema
--collect.perf_schema.eventsstatements

收集的核心指标

指标 含义
mysql_up MySQL 是否在线(1=正常,0=宕机)
mysql_global_status_connections 累计连接数
mysql_global_status_threads_connected 当前连接数
mysql_global_variables_max_connections 最大连接数配置值
mysql_global_status_innodb_buffer_pool_pages_data InnoDB 缓冲池数据页数
mysql_slave_status_seconds_behind_master 主从复制延迟(秒)
mysql_global_status_uptime MySQL 运行时长

SSL/TLS 连接

如果 MySQL 启用了 SSL,在 .my.cnf 里加:

ini 复制代码
ssl-ca=/path/to/ca.pem
ssl-key=/path/to/client-key.pem
ssl-cert=/path/to/client-cert.pem

常用 PromQL

promql 复制代码
# MySQL 是否在线
mysql_up

# 连接使用率
mysql_global_status_threads_connected / mysql_global_variables_max_connections * 100

# 复制延迟
mysql_slave_status_seconds_behind_master

# InnoDB 缓存命中率
(mysql_global_status_innodb_buffer_pool_read_requests - mysql_global_status_innodb_buffer_pool_reads) / mysql_global_status_innodb_buffer_pool_read_requests * 100

# QPS(每秒查询数)
rate(mysql_global_status_questions[5m])
相关推荐
for_ever_love__6 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
Sayai10 小时前
DataX 离线数据同步实战:Elasticsearch 数据批量导出 MySQL(作业配置、并发调优与定时同步平台化设计)
大数据·mysql·elasticsearch·datax·数据同步
颜酱11 小时前
一栋商业大厦,讲清 InnoDB 的表空间、段、区和页
后端·mysql
PC2005-cloud12 小时前
Mysql学习笔记:InnoDB Cluster 集群从零搭建实战,基于 Docker 实现高可用读写分离架构
笔记·学习·mysql
这个DBA有点耶13 小时前
分布式事务深度:TCC空回滚、悬挂与Saga补偿风暴的根因与解法
数据库·mysql·代码规范
QEasycloud14 小时前
BOM接口抛转失败钉钉通知策略实战教程:MySQL异常日志到钉钉消息的端到端配置
android·mysql·钉钉
又尔D.14 小时前
MySQL下载安装
数据库·mysql
夜雪一千14 小时前
MySQL 删除 JSON 类型的数据实战
mysql·adb·json
iCxhust15 小时前
51单片机电力载波应用开发(九)51产品化
c语言·数据库·嵌入式硬件·mysql·51单片机·软件工程·c51
tryxr15 小时前
如何分析一个慢sql
数据库·sql·mysql·慢sql