实现 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

解释:

  • UserGroup:指定运行 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 表达式,用于