Skip to content

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

  1. 安装 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-*
  1. 创建 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;
  1. 创建 Exporter 配置文件
ini
# .my.cnf
[client]
user=exporter
password=exporter_password
host=localhost
  1. 启动 MariaDB Exporter
bash
./mysqld_exporter --config.my-cnf=.my.cnf
  1. 配置 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 数据源

  1. 登录 Grafana 界面(默认地址:http://localhost:3000,用户名/密码:admin/admin)
  2. 点击左侧菜单 "Configuration" → "Data sources"
  3. 点击 "Add data source",选择 "Prometheus"
  4. 配置 Prometheus 地址(如:http://localhost:9090
  5. 点击 "Save & Test" 验证连接

导入 MariaDB 监控仪表盘

  1. 点击左侧菜单 "Create" → "Import"
  2. 输入仪表盘 ID:7362(MariaDB Overview)
  3. 选择配置好的 Prometheus 数据源
  4. 点击 "Import" 完成导入

自定义监控指标

  1. 在 Grafana 中创建自定义面板
  2. 使用 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 服务端配置

  1. 确保 Zabbix Server 已安装并运行
  2. 安装 MariaDB 监控模板

MariaDB 客户端配置

  1. 安装 Zabbix Agent
bash
# Ubuntu/Debian
sudo apt-get install zabbix-agent

# CentOS/RHEL
sudo yum install zabbix-agent
  1. 配置 Zabbix Agent
ini
# /etc/zabbix/zabbix_agentd.conf
Server=zabbix-server-ip
ServerActive=zabbix-server-ip
Hostname=mariadb-prod-01
  1. 安装 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
  1. 创建 MariaDB 监控用户
sql
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'zabbix_password';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'zabbix'@'localhost';
FLUSH PRIVILEGES;
  1. 配置 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"
  1. 重启 Zabbix Agent
bash
sudo systemctl restart zabbix-agent

导入 Zabbix 模板

  1. 登录 Zabbix Web 界面
  2. 点击 "Configuration" → "Templates"
  3. 点击 "Import",导入 MariaDB 模板(Template DB MySQL)
  4. 将模板关联到 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)

高可用配置

  1. Prometheus 高可用

    • 部署多个 Prometheus 实例,使用 Thanos 或 Cortex 实现数据汇聚
    • 配置 Alertmanager 集群,避免单点故障
  2. Grafana 高可用

    • 部署多个 Grafana 实例,使用负载均衡器分发流量
    • 配置共享数据库(如PostgreSQL、MySQL)存储配置
  3. 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数据库的运行状态,及时发现并解决问题,确保数据库系统的稳定运行。