实现 Prometheus MySQL Slow Log 监控
简介
在开发过程中,我们常常需要对 MySQL 数据库进行性能监控,以便及时发现和解决潜在的性能问题。Prometheus 是一款非常强大的监控系统,可以帮助我们收集和存储各种指标数据。本文将介绍如何使用 Prometheus 监控 MySQL 的慢查询日志(Slow Log)。
整体流程
下面是实现 Prometheus MySQL Slow Log 监控的整体流程图:
flowchart TD
A[配置 MySQL 慢查询日志] --> B[安装和配置 Prometheus]
B --> C[创建 Prometheus MySQL Exporter]
C --> D[配置 Prometheus 监控规则]
D --> E[配置 Grafana Dashboard]
详细步骤
配置 MySQL 慢查询日志
首先,我们需要在 MySQL 数据库中启用慢查询日志。打开 MySQL 配置文件(一般为 /etc/my.cnf
或 /etc/mysql/my.cnf
),找到 mysqld
部分,添加以下配置:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
解释:
slow_query_log
:启用慢查询日志,值为 1 表示启用。slow_query_log_file
:指定慢查询日志文件路径。long_query_time
:定义慢查询的阈值,单位为秒。
重启 MySQL 服务以使配置生效。
安装和配置 Prometheus
接下来,我们需要安装 Prometheus 并配置其监控目标。可以按照 Prometheus 官方文档进行安装,这里不再详细说明。
编辑 Prometheus 配置文件(一般为 prometheus.yml
),添加以下内容:
scrape_configs:
- job_name: 'mysql'
static_configs:
- targets: ['localhost:9104']
解释:
job_name
:定义监控任务名称,可以根据实际需求自定义。targets
:指定需要监控的目标,这里是 MySQL Exporter 的默认地址。
创建 Prometheus MySQL Exporter
MySQL Exporter 是一个用于向 Prometheus 提供 MySQL 监控指标的工具。我们需要下载并编译它。
$ git clone
$ cd mysqld_exporter
$ make
我们还需要创建一个用于运行 MySQL Exporter 的用户,并将可执行文件移动到合适的目录:
$ sudo useradd --no-create-home --shell /bin/false mysqld_exporter
$ sudo cp mysqld_exporter /usr/local/bin/
$ sudo chown mysqld_exporter: /usr/local/bin/mysqld_exporter
配置 MySQL Exporter
创建一个用于运行 MySQL Exporter 的 Systemd 服务文件 /etc/systemd/system/mysql_exporter.service
,并将以下内容添加到文件中:
[Unit]
Description=MySQL Exporter
After=network.target
[Service]
User=mysqld_exporter
Group=mysqld_exporter
Type=simple
ExecStart=/usr/local/bin/mysqld_exporter --config.my-cnf="/path/to/my.cnf"
[Install]
WantedBy=default.target
解释:
User
和Group
:指定运行 MySQL Exporter 的用户和组。ExecStart
:指定 MySQL Exporter 的可执行文件路径,并通过--config.my-cnf
参数指定 MySQL 配置文件的路径。
重新加载 Systemd 配置并启动 MySQL Exporter:
$ sudo systemctl daemon-reload
$ sudo systemctl start mysql_exporter
配置 Prometheus 监控规则
我们需要为 Prometheus 配置监控规则,以便收集 MySQL Exporter 提供的指标。编辑 Prometheus 配置文件 prometheus.yml
,添加以下内容:
rule_files:
- /etc/prometheus/mysql_rules.yml
创建一个新的文件 /etc/prometheus/mysql_rules.yml
,并将以下内容添加到文件中:
groups:
- name: mysql
rules:
- expr: mysql_global_status_commands_total{command="query"} - mysql_global_status_commands_total{command="select"}
record: mysql_slow_queries_total
解释:
expr
:定义一个 PromQL 表达式,用于