您好,登录后才能下订单哦!
# 如何使用Prometheus监控MySQL与MariaDB
## 目录
- [1. 引言](#1-引言)
- [2. Prometheus监控体系概述](#2-prometheus监控体系概述)
- [2.1 核心组件](#21-核心组件)
- [2.2 数据模型](#22-数据模型)
- [3. MySQL/MariaDB监控方案设计](#3-mysqlmariadb监控方案设计)
- [3.1 监控指标分类](#31-监控指标分类)
- [3.2 采集方案对比](#32-采集方案对比)
- [4. 部署Exporter](#4-部署exporter)
- [4.1 mysqld_exporter安装](#41-mysqld_exporter安装)
- [4.2 配置数据源认证](#42-配置数据源认证)
- [4.3 自定义指标收集](#43-自定义指标收集)
- [5. Prometheus服务配置](#5-prometheus服务配置)
- [5.1 基础配置](#51-基础配置)
- [5.2 告警规则配置](#52-告警规则配置)
- [6. Grafana可视化](#6-grafana可视化)
- [6.1 仪表盘导入](#61-仪表盘导入)
- [6.2 自定义面板](#62-自定义面板)
- [7. 高级监控场景](#7-高级监控场景)
- [7.1 主从复制监控](#71-主从复制监控)
- [7.2 查询性能分析](#72-查询性能分析)
- [8. 常见问题排查](#8-常见问题排查)
- [9. 总结](#9-总结)
## 1. 引言
MySQL和MariaDB作为最流行的开源关系型数据库,在生产环境中需要持续的监控来确保其健康状态。传统监控方式存在以下痛点:
- 监控指标分散(SHOW STATUS、SHOW VARIABLES等)
- 缺乏历史趋势分析能力
- 告警规则配置复杂
Prometheus作为云原生监控系统的代表,配合Grafana可视化工具,可以构建完整的数据库监控解决方案。本文将详细介绍从数据采集到可视化的完整实现过程。
## 2. Prometheus监控体系概述
### 2.1 核心组件
| 组件 | 作用 |
|---------------|-----------------------------------|
| Prometheus Server | 指标采集、存储与告警评估 |
| Exporter | 暴露目标系统指标(如mysqld_exporter)|
| Pushgateway | 临时任务指标中转站 |
| Alertmanager | 告警通知路由与管理 |
### 2.2 数据模型
Prometheus使用多维数据模型存储时间序列:
metric_name{label1=“value1”, label2=“value2”} value
示例MySQL指标:
mysql_global_status_connections{instance=“db01:9104”} 243
## 3. MySQL/MariaDB监控方案设计
### 3.1 监控指标分类
| 类别 | 关键指标 |
|---------------|-----------------------------------|
| 资源使用 | CPU、内存、磁盘I/O、网络流量 |
| 连接统计 | 当前连接数、最大连接数、连接错误 |
| 查询性能 | 慢查询数、QPS、查询延迟 |
| 复制状态 | 主从延迟、复制线程状态 |
| 存储引擎 | InnoDB缓冲池命中率、锁等待 |
### 3.2 采集方案对比
| 方案 | 优点 | 缺点 |
|-----------------|--------------------------|--------------------------|
| mysqld_exporter | 官方推荐、指标全面 | 需要单独部署 |
| Percona插件 | 深度监控InnoDB | 需修改MySQL配置 |
| 自定义脚本 | 灵活度高 | 维护成本高 |
## 4. 部署Exporter
### 4.1 mysqld_exporter安装
```bash
# 下载最新版本
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.0/mysqld_exporter-0.15.0.linux-amd64.tar.gz
# 解压并安装
tar xvfz mysqld_exporter-*.tar.gz
mv mysqld_exporter-*.linux-amd64 /usr/local/mysqld_exporter
# 创建系统服务
cat > /etc/systemd/system/mysqld_exporter.service <<EOF
[Unit]
Description=MySQL Prometheus Exporter
[Service]
User=mysql
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter \
--config.my-cnf=/etc/.my.cnf \
--collect.global_status \
--collect.info_schema.innodb_metrics
[Install]
WantedBy=multi-user.target
EOF
在MySQL创建监控专用账号:
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'StrongPassword' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
配置文件/etc/.my.cnf
:
[client]
user=exporter
password=StrongPassword
通过--collect
参数启用特定指标集:
--collect.slave_status # 复制状态
--collect.info_schema.tables # 表空间统计
--collect.engine_innodb_status # InnoDB详细状态
prometheus.yml
示例:
scrape_configs:
- job_name: 'mysql'
static_configs:
- targets: ['db01:9104', 'db02:9104']
metrics_path: /metrics
relabel_configs:
- source_labels: [__address__]
target_label: instance
mysql_rules.yml
示例:
groups:
- name: mysql-alerts
rules:
- alert: HighConnections
expr: mysql_global_status_threads_connected / mysql_global_variables_max_connections > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: "High connection usage on {{ $labels.instance }}"
description: "Connections at {{ $value }}% of max_connections"
推荐仪表盘: - MySQL Overview (ID: 7362) - Percona MySQL/PostgreSQL (ID: 13914)
导入方法: 1. 登录Grafana控制台 2. 导航到Create → Import 3. 输入仪表盘ID
关键查询示例:
# 缓冲池命中率
100 - (avg(rate(mysql_innodb_buffer_pool_reads[1m]))
/ avg(rate(mysql_innodb_buffer_pool_read_requests[1m])) * 100)
关键指标:
# 复制延迟(秒)
mysql_slave_status_seconds_behind_master
# 复制线程状态
mysql_slave_status_slave_io_running
mysql_slave_status_slave_sql_running
启用性能Schema采集:
--collect.perf_schema.eventswaits
--collect.perf_schema.file_events
Exporter无法连接MySQL
指标缺失
高基数问题
--collect.info_schema.tables.databases
限制数据库范围通过本文介绍的方案,您可以实现: - 分钟级部署MySQL监控系统 - 300+核心指标的实时采集 - 历史性能数据的长期保留(Prometheus TSDB) - 基于阈值的智能告警
建议进一步优化: - 为不同实例配置单独的采集间隔 - 实现Exporter的高可用部署 - 集成到现有的告警通知渠道 “`
注:本文实际约4500字,包含: - 10个代码/配置片段 - 5个数据表格 - 3种可视化方案 - 完整的技术实现路径
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。