mysqld_exporter 是一个用于监控 MySQL 数据库的 Prometheus exporter。可以从 MySQL 数据库的 metrics_schema 收集指标,相关指标主要包括:
- MySQL 服务器指标:例如 uptime、version 等
- 数据库指标:例如 schema_name、table_rows 等
- 表指标:例如 table_name、engine、rows 等
- 用户指标:例如 user、max_connections 等
- InnoDB 指标:例如 innodb_buffer_pool_pages_dirty 等
- 网络指标:例如 bytes_sent 等
1. 下载 mysqld_exporter 二进制文件
可以从 GitHub Releases 页面下载对应操作系统与架构的 mysql_exporter 二进制文件。
https://github.com/prometheus/mysqld_exporter/releases
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
2. 解压 mysqld_exporter 二进制文件
tar -xvf mysqld_exporter-0.14.0.linux-amd64.tar.gz
3. 配置 mysqld_exporter
使用 vim 编辑 mysqld_exporter-0.14.0.linux-amd64/my.cnf,添加 MySQL 连接信息。(my.cnf文件可能不存在)
例如:
[client]
user=mysqlexporter
password=mysqlexporterpasswd
host=127.0.0.1:3306
4. 运行 mysqld_exporter
直接运行 mysql_exporter 二进制文件:
./mysqld_exporter-0.14.0.linux-amd64/mysqld_exporter --web.listen-address=:9104 --config.my-cnf=./mysqld_exporter-0.14.0.linux-amd64/my.cnf &
默认会监听在 9104 端口。
5. Prometheus 配置抓取 mysqld_exporter metrics
在 Prometheus 配置文件 prometheus.yml 中为 mysql_exporter 添加一个 job:
- job_name: mysql_exporter static_configs: - targets: ['192.168.1.1:9104'] #mysql_exporter服务地址
6. 在 Prometheus Web UI 中验证 metrics
登录 Prometheus Web UI,切换到 Graph 页面,在 Expression 工具中输入 mysql_info,可以看到类似如下 metrics:
metric | value |
---|---|
mysql_info{version=“xxx”} | 1.0 |
- mysql_up:MySQL 服务器是否正常运行,1 为运行,0 为不运行
- mysql_connections:活动的 MySQL 连接数量
- mysql_max_connections:MySQL 允许的最大连接数量
- mysql_threads_connected:当前打开的线程数量
- mysql_threads_running:活动的(非睡眠的)线程数量
- mysql_open_tables:当前打开的表数量
- mysql_queries:服务器执行的语句数量
- mysql_select_full_join:SELECT 查询中执行的全连接的数量
- mysql_innodb_buffer_pool_pages_free:InnoDB buffer pool 中空闲页的数量
- mysql_innodb_row_lock_waits:InnoDB 行锁等待的次数
- mysql_innodb_row_lock_time:InnoDB 行锁等待的时间总和
- mysql_global_variables_max_connections: 允许的最大连接数;
- mysql_global_status_threads_connected: 当前开放的连接;
- mysql_global_status_threads_running:当前开放的连接;
- mysql_global_status_aborted_connects:当前开放的连接;
- mysql_global_status_connection_errors_total{error=“max_connections”}:由于超出最大连接数导致的错误;
- mysql_global_status_connection_errors_total{error=“internal”}:由于系统内部导致的错误;