外观
MariaDB 企业级监控平台集成
监控平台选择原则
需求分析
- 监控规模:单机、集群还是分布式环境
- 技术栈匹配:与现有技术栈的兼容性
- 成本预算:开源免费还是商业产品
- 功能需求:基础监控、性能分析、告警管理、可视化需求
- 团队技能:团队对监控平台的熟悉程度
主流监控平台对比
| 监控平台 | 类型 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|---|
| Prometheus + Grafana | 开源 | 强大的时序数据处理、丰富的可视化、活跃社区 | 存储成本较高、需要额外组件支持告警 | 大规模分布式环境、云原生场景 |
| Zabbix | 开源 | 全功能、易部署、社区成熟 | 大规模环境下性能一般、界面较旧 | 传统数据中心、混合云环境 |
| Nagios | 开源 | 轻量级、稳定可靠、插件丰富 | 配置复杂、缺乏现代可视化 | 小规模环境、简单监控需求 |
| Datadog | 商业 | 全托管、易用、丰富的集成 | 成本较高 | 云环境、企业级监控需求 |
| New Relic | 商业 | 应用性能监控强大、用户体验好 | 成本较高、深度定制能力有限 | 应用与数据库一体化监控 |
Prometheus + Grafana 集成
Prometheus 安装与配置
安装 Prometheus
bash
# 下载最新版本
wget https://github.com/prometheus/prometheus/releases/latest/download/prometheus-2.54.1.linux-amd64.tar.gz
tar xvfz prometheus-*.tar.gz
cd prometheus-*
# 启动 Prometheus
./prometheus --config.file=prometheus.yml配置 Prometheus 监控 MariaDB
- 安装 MariaDB Exporter
bash
# 下载 MariaDB Exporter
wget https://github.com/prometheus/mysqld_exporter/releases/latest/download/mysqld_exporter-0.16.1.linux-amd64.tar.gz
tar xvfz mysqld_exporter-*.tar.gz
cd mysqld_exporter-*- 创建 MariaDB 监控用户
sql
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'exporter_password' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
FLUSH PRIVILEGES;- 创建 Exporter 配置文件
ini
# .my.cnf
[client]
user=exporter
password=exporter_password
host=localhost- 启动 MariaDB Exporter
bash
./mysqld_exporter --config.my-cnf=.my.cnf- 配置 Prometheus 抓取规则
yaml
# prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'mariadb'
static_configs:
- targets: ['localhost:9104']
relabel_configs:
- source_labels: [__address__]
target_label: instance
replacement: 'mariadb-prod-01'Grafana 安装与配置
安装 Grafana
bash
# Ubuntu/Debian
sudo apt-get install -y apt-transport-https software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install grafana
# CentOS/RHEL
sudo yum install -y https://dl.grafana.com/oss/release/grafana-11.1.0-1.x86_64.rpm
sudo systemctl enable --now grafana-server配置 Grafana 数据源
- 登录 Grafana 界面(默认地址:http://localhost:3000,用户名/密码:admin/admin)
- 点击左侧菜单 "Configuration" → "Data sources"
- 点击 "Add data source",选择 "Prometheus"
- 配置 Prometheus 地址(如:http://localhost:9090)
- 点击 "Save & Test" 验证连接
导入 MariaDB 监控仪表盘
- 点击左侧菜单 "Create" → "Import"
- 输入仪表盘 ID:7362(MariaDB Overview)
- 选择配置好的 Prometheus 数据源
- 点击 "Import" 完成导入
自定义监控指标
- 在 Grafana 中创建自定义面板
- 使用 PromQL 查询 MariaDB 指标,例如:
rate(mysql_global_status_queries[5m])- 查询速率mysql_global_status_connections- 当前连接数mysql_global_status_slow_queries- 慢查询数mysql_global_status_innodb_buffer_pool_pages_free / mysql_global_status_innodb_buffer_pool_pages_total * 100- Buffer Pool 使用率
Zabbix 集成
Zabbix 服务端配置
- 确保 Zabbix Server 已安装并运行
- 安装 MariaDB 监控模板
MariaDB 客户端配置
- 安装 Zabbix Agent
bash
# Ubuntu/Debian
sudo apt-get install zabbix-agent
# CentOS/RHEL
sudo yum install zabbix-agent- 配置 Zabbix Agent
ini
# /etc/zabbix/zabbix_agentd.conf
Server=zabbix-server-ip
ServerActive=zabbix-server-ip
Hostname=mariadb-prod-01- 安装 Zabbix MariaDB 监控脚本
bash
sudo mkdir -p /etc/zabbix/scripts
sudo wget -O /etc/zabbix/scripts/mysql_status.sh https://raw.githubusercontent.com/zabbix/zabbix/master/templates/db/mysql/scripts/mysql_status.sh
sudo chmod +x /etc/zabbix/scripts/mysql_status.sh- 创建 MariaDB 监控用户
sql
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'zabbix_password';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'zabbix'@'localhost';
FLUSH PRIVILEGES;- 配置 Zabbix Agent 监控项
ini
# /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=mysql.status[*],/etc/zabbix/scripts/mysql_status.sh "$1"
UserParameter=mysql.size[*],/etc/zabbix/scripts/mysql_size.sh "$1" "$2"- 重启 Zabbix Agent
bash
sudo systemctl restart zabbix-agent导入 Zabbix 模板
- 登录 Zabbix Web 界面
- 点击 "Configuration" → "Templates"
- 点击 "Import",导入 MariaDB 模板(Template DB MySQL)
- 将模板关联到 MariaDB 主机
Nagios 集成
安装 Nagios 插件
bash
# Ubuntu/Debian
sudo apt-get install nagios-plugins-mysql
# CentOS/RHEL
sudo yum install nagios-plugins-mysql配置 Nagios 监控命令
ini
# /usr/local/nagios/etc/commands.cfg
define command {
command_name check_mysql
command_line $USER1$/check_mysql -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -d $ARG3$
}
define command {
command_name check_mysql_query
command_line $USER1$/check_mysql_query -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -d $ARG3$ -q "$ARG4$" -w $ARG5$ -c $ARG6$
}配置 Nagios 监控服务
ini
# /usr/local/nagios/etc/servers/mariadb.cfg
define host {
use linux-server
host_name mariadb-prod-01
alias MariaDB Production Server
address 192.168.1.100
register 1
}
define service {
use generic-service
host_name mariadb-prod-01
service_description MariaDB Status
check_command check_mysql!nagios!nagios_password!
max_check_attempts 3
check_interval 5
retry_interval 1
}
define service {
use generic-service
host_name mariadb-prod-01
service_description MariaDB Slow Queries
check_command check_mysql_query!nagios!nagios_password!mysql!"SHOW GLOBAL STATUS LIKE 'Slow_queries'"!10!20
max_check_attempts 3
check_interval 5
retry_interval 1
}监控数据采集最佳实践
采集频率设置
| 监控指标类型 | 建议采集频率 |
|---|---|
| 系统资源指标 | 10-30秒 |
| 数据库状态指标 | 15-60秒 |
| 慢查询统计 | 5-10分钟 |
| 数据库空间使用 | 30-60分钟 |
| 备份状态 | 1-2小时 |
数据保留策略
| 数据类型 | 保留时间 | 存储方式 |
|---|---|---|
| 实时监控数据 | 7-14天 | 高性能存储(如Prometheus本地存储) |
| 历史趋势数据 | 6-12个月 | 压缩存储(如Thanos、InfluxDB) |
| 归档数据 | 1-3年 | 对象存储(如S3、MinIO) |
高可用配置
Prometheus 高可用:
- 部署多个 Prometheus 实例,使用 Thanos 或 Cortex 实现数据汇聚
- 配置 Alertmanager 集群,避免单点故障
Grafana 高可用:
- 部署多个 Grafana 实例,使用负载均衡器分发流量
- 配置共享数据库(如PostgreSQL、MySQL)存储配置
Zabbix 高可用:
- 配置 Zabbix Server 集群
- 使用主备数据库存储监控数据
常见问题(FAQ)
Q: MariaDB Exporter 无法连接到数据库
A: 检查以下几点:
- 确保 .my.cnf 配置文件中的用户名、密码正确
- 确保监控用户具有正确的权限
- 检查 MariaDB 监听地址,确保允许 Exporter 连接
- 查看 Exporter 日志,定位具体错误信息
Q: Grafana 面板显示无数据
A: 排查步骤:
- 检查 Prometheus 数据源是否配置正确
- 确认 Prometheus 已成功抓取到 MariaDB 指标
- 验证 PromQL 查询语句是否正确
- 检查时间范围设置是否合理
Q: Zabbix 监控项显示 "Unsupported item key"
A: 解决方案:
- 确保 Zabbix Agent 已正确安装和配置
- 检查自定义监控脚本是否存在且具有执行权限
- 验证监控项键值是否与配置文件中的定义一致
- 重启 Zabbix Agent 使配置生效
Q: 如何监控 MariaDB Galera Cluster
A: 推荐方案:
- 使用 Percona Monitoring and Management (PMM),它提供了专门的 Galera 监控面板
- 在 Prometheus + Grafana 中,使用 galera_cluster_size、wsrep_cluster_status 等指标监控集群状态
- 监控 Galera 特有指标,如 wsrep_local_recv_queue、wsrep_local_send_queue 等
Q: 监控数据量过大,如何优化存储
A: 优化建议:
- 调整采集频率,减少非关键指标的采集间隔
- 配置数据采样和聚合规则
- 使用长期存储解决方案,如 Thanos、Cortex 或 InfluxDB
- 定期清理过期监控数据
集成方案选择建议
| 企业规模 | 推荐方案 | 原因 |
|---|---|---|
| 小型企业(<50台服务器) | Zabbix | 全功能、易部署、成本低 |
| 中型企业(50-200台服务器) | Prometheus + Grafana | 强大的时序数据处理、丰富的可视化 |
| 大型企业(>200台服务器) | Prometheus + Grafana + Thanos | 支持大规模分布式环境、长期数据存储 |
| 云原生环境 | Prometheus + Grafana + Alertmanager | 与Kubernetes等云原生组件无缝集成 |
| 混合云环境 | Zabbix 或 Datadog | 支持多种环境统一监控 |
通过选择合适的监控平台并正确配置,DBA可以实时掌握MariaDB数据库的运行状态,及时发现并解决问题,确保数据库系统的稳定运行。
