Prometheus 5-Rocky Linux 9用Prometheus 3.12.0 + Alertmanager 0.33.0 邮件告警(Mysql)

一、MySQL 授权(MySQL)

bash 复制代码
mysql -u root -p
sql
>CREATE USER IF NOT EXISTS 'exporter'@'localhost'
  IDENTIFIED BY 'Exporter123!'
  WITH MAX_USER_CONNECTIONS 3;

>GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
>FLUSH PRIVILEGES;

二、mysqld_exporter 配置

bash 复制代码
sudo mkdir -p /etc/mysqld_exporter
sudo tee /etc/mysqld_exporter/.my.cnf > /dev/null << 'EOF'
[client]
user=exporter
password=Exporter123!
host=localhost
port=3306
EOF

sudo useradd --no-create-home --shell /bin/false mysqld_exporter
sudo chown -R mysqld_exporter:mysqld_exporter /etc/mysqld_exporter
sudo chmod 600 /etc/mysqld_exporter/.my.cnf

三、安装 mysqld_exporte

bash 复制代码
cd /tmp
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.19.0/mysqld_exporter-0.19.0.linux-amd64.tar.gz
tar -xvf mysqld_exporter-0.19.0.linux-amd64.tar.gz
sudo mv mysqld_exporter-0.19.0.linux-amd64/mysqld_exporter /usr/local/bin/
sudo chown mysqld_exporter:mysqld_exporter /usr/local/bin/mysqld_exporter

四、systemd 服务

bash 复制代码
sudo tee /etc/systemd/system/mysqld_exporter.service > /dev/null << 'EOF'
[Unit]
Description=MySQL Exporter
After=network.target mysqld.service

[Service]
User=mysqld_exporter
ExecStart=/usr/local/bin/mysqld_exporter \
  --config.my-cnf=/etc/mysqld_exporter/.my.cnf \
  --web.listen-address=:9104
Restart=always

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now mysqld_exporter
sudo systemctl status mysqld_exporter

✅ 验证:

bash 复制代码
curl http://localhost:9104/metrics | grep mysql_up

]# curl http://localhost:9104/metrics | grep mysql_up
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  175k    0  175k    0     0  13.2M      0 --:--:-- --:--:-- --:--:-- 14.3M
# HELP mysql_up Whether the MySQL server is up.
# TYPE mysql_up gauge
mysql_up 1

五、Prometheus 加入 MySQL 采集

追加到 scrape_configs末尾:

bash 复制代码
vim /etc/prometheus/prometheus.yml
# MySQL 监控
  - job_name: "mysql"
    static_configs:
      - targets: ["localhost:9104"]

六、MySQL 告警规则

追加到现有 rules 后面:

bash 复制代码
sudo vim /etc/prometheus/rules/alert.yml
  # MySQL 监控告警

  - name: mysql
    rules:
      - alert: MySQLDown
        expr: mysql_up == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "MySQL 服务不可用"
          description: "MySQL 实例 {{ $labels.instance }} 已宕机"

      - alert: MySQLConnectionsHigh
        expr: mysql_global_status_threads_connected / mysql_global_variables_max_connections * 100 > 80
        for: 3m
        labels:
          severity: warning
        annotations:
          summary: "MySQL 连接数过高"
          description: "MySQL {{ $labels.instance }} 连接数占比超过 80%,当前值:{{ $value }}%"

      - alert: MySQLSlowQueries
        expr: rate(mysql_global_status_slow_queries[5m]) > 0
        for: 3m
        labels:
          severity: warning
        annotations:
          summary: "MySQL 存在慢查询"
          description: "MySQL {{ $labels.instance }} 慢查询速率:{{ $value }}"

七、检查并重启

bash 复制代码
promtool check config /etc/prometheus/prometheus.yml

sudo systemctl restart prometheus

八、验证 MySQL 监控

浏览器访问:

纯文本

纯文本http://服务器IP:9090 → Status → Targets