MariaDB监控与告警系统搭建
2023-02-243.7k 阅读
MariaDB 监控与告警系统搭建
MariaDB 监控概述
在当今数据驱动的时代,数据库的稳定运行至关重要。MariaDB 作为一款流行的开源关系型数据库,对其进行有效的监控和告警能够及时发现潜在问题,确保数据库服务的高可用性。监控 MariaDB 主要涵盖多个方面,包括性能指标监控、状态信息跟踪以及关键事件捕捉等。通过监控,我们可以提前察觉诸如查询性能下降、磁盘空间不足、连接数过多等问题,避免这些问题演变成影响业务的重大故障。
监控指标分类
- 性能指标
- 查询响应时间:衡量数据库处理查询的速度。较长的查询响应时间可能意味着查询语句优化不佳,或者数据库服务器资源紧张。可以通过慢查询日志来记录响应时间超过特定阈值的查询,从而针对性地进行优化。
- 吞吐量:指单位时间内数据库处理的查询数量。吞吐量下降可能是由于服务器硬件瓶颈、网络问题或者数据库配置不合理导致的。通过监控吞吐量,能够及时发现并解决这些潜在问题,以维持数据库高效运行。
- 资源利用率:包括 CPU、内存、磁盘 I/O 和网络等资源的使用情况。例如,高 CPU 使用率可能表明有复杂的查询在运行,或者数据库服务器的配置不足以处理当前的负载。
- 状态指标
- 连接状态:监控当前活跃的数据库连接数以及最大连接数。如果活跃连接数接近或达到最大连接数,可能会导致新的连接请求被拒绝,影响应用程序的正常运行。
- 复制状态:对于采用主从复制架构的 MariaDB 部署,监控复制状态至关重要。需要关注主从之间的数据同步延迟、复制是否中断等情况,以确保数据的一致性。
- 缓存命中率:MariaDB 有多种缓存机制,如查询缓存、InnoDB 缓冲池等。缓存命中率反映了缓存的有效性,较低的命中率可能意味着缓存配置不合理或者数据访问模式不适合当前的缓存策略。
监控工具选择
- Prometheus + Grafana
- Prometheus:是一款开源的系统监控和告警工具包。它以指标为中心,通过 pull 模型从目标系统获取数据,并存储在本地的时间序列数据库中。Prometheus 提供了强大的查询语言 PromQL,能够方便地对监控数据进行分析和聚合。
- Grafana:是一个可视化平台,可与 Prometheus 集成,用于创建美观、交互式的监控仪表盘。它支持多种数据源,并且具有丰富的图表类型和灵活的布局选项,能够直观地展示 MariaDB 的各项监控指标。
- MHA(Master High Availability)
- MHA 主要用于 MariaDB 主从复制架构中的故障切换和主节点自动选举。它不仅能监控主从复制状态,还能在主节点出现故障时快速将从节点提升为主节点,确保服务的连续性。虽然 MHA 侧重于高可用性管理,但它提供的监控功能对于保障主从复制的健康运行至关重要。
- Percona Monitoring and Management(PMM)
- PMM 是 Percona 公司提供的一套开源的数据库监控和管理解决方案,专门针对 MySQL 和 MariaDB 进行优化。它集成了多个监控工具,如 Prometheus、Grafana 和 QAN(Query Analytics Node)等,提供了一站式的监控和分析功能。PMM 还具备自动发现数据库实例、预定义监控仪表盘等特性,简化了监控系统的搭建过程。
使用 Prometheus + Grafana 搭建监控系统
Prometheus 安装与配置
- 安装 Prometheus
- 在基于 Debian 或 Ubuntu 的系统上,可以通过以下步骤安装 Prometheus:
# 添加 Prometheus 官方仓库 curl -fsSL https://prometheus.io/download/ | grep -o 'https://.*prometheus-\S*linux-amd64.tar.gz' | wget -qi - tar xvfz prometheus-*.linux-amd64.tar.gz cd prometheus-*.linux-amd64 sudo cp prometheus promtool /usr/local/bin/ sudo mkdir /etc/prometheus sudo mkdir /var/lib/prometheus sudo cp consoles/ console_libraries/ /etc/prometheus/
- 在基于 CentOS 或 RHEL 的系统上:
wget https://github.com/prometheus/prometheus/releases/download/v2.31.1/prometheus-2.31.1.linux-amd64.tar.gz tar xvfz prometheus-2.31.1.linux-amd64.tar.gz cd prometheus-2.31.1.linux-amd64 sudo cp prometheus promtool /usr/local/bin/ sudo mkdir /etc/prometheus sudo mkdir /var/lib/prometheus sudo cp consoles/ console_libraries/ /etc/prometheus/
- 在基于 Debian 或 Ubuntu 的系统上,可以通过以下步骤安装 Prometheus:
- 配置 Prometheus
- 创建 Prometheus 配置文件
/etc/prometheus/prometheus.yml
,内容如下:global: scrape_interval: 15s # 数据抓取间隔 evaluation_interval: 15s # 告警规则评估间隔 scrape_configs: - job_name:'mariadb' static_configs: - targets: ['mariadb-server:9104'] # MariaDB 服务器地址和 exporter 端口 metrics_path: /metrics params: module: [mysql] relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: mariadb-exporter:9104 # exporter 服务器地址和端口
- 这里假设 MariaDB exporter 运行在
mariadb - exporter:9104
,并且 MariaDB 服务器地址为mariadb - server
。
- 创建 Prometheus 配置文件
MariaDB Exporter 安装与配置
- 安装 MariaDB Exporter
- 在基于 Debian 或 Ubuntu 的系统上:
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz tar xvfz mysqld_exporter-0.14.0.linux-amd64.tar.gz cd mysqld_exporter-0.14.0.linux-amd64 sudo cp mysqld_exporter /usr/local/bin/
- 在基于 CentOS 或 RHEL 的系统上:
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz tar xvfz mysqld_exporter-0.14.0.linux-amd64.tar.gz cd mysqld_exporter-0.14.0.linux-amd64 sudo cp mysqld_exporter /usr/local/bin/
- 在基于 Debian 或 Ubuntu 的系统上:
- 配置 MariaDB Exporter
- 创建用于 MariaDB exporter 连接数据库的配置文件
/etc/mysqld_exporter/.my.cnf
,内容如下:[client] user = mysqld_exporter password = your_password host = mariadb - server
- 确保
mysqld_exporter
用户在 MariaDB 中有足够的权限,可通过以下 SQL 语句创建用户并授权:CREATE USER'mysqld_exporter'@'%' IDENTIFIED BY 'your_password'; GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO'mysqld_exporter'@'%'; FLUSH PRIVILEGES;
- 启动 MariaDB exporter:
mysqld_exporter --config.my-cnf=/etc/mysqld_exporter/.my.cnf &
- 创建用于 MariaDB exporter 连接数据库的配置文件
Grafana 安装与配置
- 安装 Grafana
- 在基于 Debian 或 Ubuntu 的系统上:
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt - key add - echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list sudo apt - get update sudo apt - get install grafana sudo systemctl start grafana - server sudo systemctl enable grafana - server
- 在基于 CentOS 或 RHEL 的系统上:
cat << EOF | sudo tee /etc/yum.repos.d/grafana.repo [grafana] name = Grafana Labs Repository baseurl = https://packages.grafana.com/oss/rpm repo_gpgcheck = 1 gpgcheck = 0 enabled = 1 gpgkey = https://packages.grafana.com/gpg.key sslverify = 1 sslcacert = /etc/pki/tls/certs/ca - bundle.crt EOF sudo yum install grafana sudo systemctl start grafana - server sudo systemctl enable grafana - server
- 在基于 Debian 或 Ubuntu 的系统上:
- 配置 Grafana
- 打开浏览器,访问
http://your - grafana - server:3000
,默认用户名和密码为admin/admin
。登录后,添加 Prometheus 作为数据源:- 点击左侧菜单栏中的 “Configuration” -> “Data Sources”。
- 点击 “Add data source”,选择 “Prometheus”。
- 在 “URL” 字段中输入 Prometheus 服务器的地址(例如
http://prometheus - server:9090
),然后点击 “Save & test”。
- 导入 MariaDB 监控仪表盘:
- 点击左侧菜单栏中的 “Dashboards” -> “Import”。
- 在 “Import via panel json” 文本框中,粘贴从 Grafana 官方仪表盘库(如
https://grafana.com/grafana/dashboards/7362
)获取的 JSON 内容,然后点击 “Import”。
- 打开浏览器,访问
告警系统搭建
Prometheus 告警规则配置
- 创建告警规则文件
- 在 Prometheus 配置目录(如
/etc/prometheus
)下创建告警规则文件alerts.yml
,内容如下:groups: - name: mariadb_alerts rules: - alert: HighMariaDBQueryResponseTime expr: mysql_query_response_time_seconds_sum / mysql_query_response_time_seconds_count > 1 # 查询响应时间平均值超过 1 秒 for: 5m labels: severity: critical annotations: summary: 'High MariaDB query response time' description: 'The average query response time in MariaDB is too high (current value: {{ $value }}s)' - alert: HighMariaDBConnectionUsage expr: mysql_threads_connected / mysql_max_connections > 0.8 # 连接数使用率超过 80% for: 5m labels: severity: warning annotations: summary: 'High MariaDB connection usage' description: 'The percentage of used connections in MariaDB is high (current value: {{ $value }}%)'
- 在 Prometheus 配置目录(如
- 加载告警规则
- 在
prometheus.yml
文件中添加以下内容,以加载告警规则:rule_files: - 'alerts.yml'
- 重启 Prometheus 服务,使配置生效:
sudo systemctl restart prometheus
- 在
Alertmanager 安装与配置
- 安装 Alertmanager
- 在基于 Debian 或 Ubuntu 的系统上:
wget https://github.com/prometheus/alertmanager/releases/download/v0.23.0/alertmanager-0.23.0.linux-amd64.tar.gz tar xvfz alertmanager-0.23.0.linux-amd64.tar.gz cd alertmanager-0.23.0.linux-amd64 sudo cp alertmanager amtool /usr/local/bin/ sudo mkdir /etc/alertmanager sudo mkdir /var/lib/alertmanager
- 在基于 CentOS 或 RHEL 的系统上:
wget https://github.com/prometheus/alertmanager/releases/download/v0.23.0/alertmanager-0.23.0.linux-amd64.tar.gz tar xvfz alertmanager-0.23.0.linux-amd64.tar.gz cd alertmanager-0.23.0.linux-amd64 sudo cp alertmanager amtool /usr/local/bin/ sudo mkdir /etc/alertmanager sudo mkdir /var/lib/alertmanager
- 在基于 Debian 或 Ubuntu 的系统上:
- 配置 Alertmanager
- 创建 Alertmanager 配置文件
/etc/alertmanager/alertmanager.yml
,内容如下:global: resolve_timeout: 5m route: group_by: ['alertname'] group_wait: 30s group_interval: 5m repeat_interval: 12h receiver: 'email - receiver' receivers: - name: 'email - receiver' email_configs: - to: 'your - email@example.com' from: 'alert@example.com' smarthost:'smtp.example.com:587' auth_username: 'alert@example.com' auth_password: 'your - password' require_tls: true
- 这里配置了通过电子邮件发送告警通知。可以根据实际情况调整邮件服务器地址、用户名、密码等信息。
- 创建 Alertmanager 配置文件
- 启动 Alertmanager
- 运行以下命令启动 Alertmanager:
alertmanager --config.file=/etc/alertmanager/alertmanager.yml &
- 运行以下命令启动 Alertmanager:
- 配置 Prometheus 与 Alertmanager 集成
- 在
prometheus.yml
文件中添加以下内容,将告警发送到 Alertmanager:alerting: alertmanagers: - static_configs: - targets: ['alertmanager - server:9093'] # Alertmanager 服务器地址和端口
- 重启 Prometheus 服务,使配置生效:
sudo systemctl restart prometheus
- 在
使用 MHA 监控 MariaDB 主从复制
MHA 安装与配置
- 安装 MHA 依赖包
- 在基于 Debian 或 Ubuntu 的系统上:
sudo apt - get install - y perl - DBI libdbd - mysql - perl libmysqlclient - dev
- 在基于 CentOS 或 RHEL 的系统上:
sudo yum install - y perl - DBI perl - DBD - MySQL mysql - devel
- 在基于 Debian 或 Ubuntu 的系统上:
- 安装 MHA Node 软件
- 下载 MHA Node 软件包,例如:
wget https://github.com/yoshinorim/mha4mysql - node/releases/download/v0.58/mha4mysql - node - 0.58 - 0.el7.centos.noarch.rpm sudo rpm - ivh mha4mysql - node - 0.58 - 0.el7.centos.noarch.rpm
- 下载 MHA Node 软件包,例如:
- 安装 MHA Manager 软件
- 下载 MHA Manager 软件包,例如:
wget https://github.com/yoshinorim/mha4mysql - manager/releases/download/v0.58/mha4mysql - manager - 0.58 - 0.el7.centos.noarch.rpm sudo rpm - ivh mha4mysql - manager - 0.58 - 0.el7.centos.noarch.rpm
- 下载 MHA Manager 软件包,例如:
- 配置 MHA
- 创建 MHA 配置文件
/etc/masterha/app1.cnf
,内容如下:[server default] user = mha password = your_password ssh_user = root repl_user = repl repl_password = your_repl_password ping_interval = 1 [server1] hostname = master - server candidate_master = 1 [server2] hostname = slave - server1 candidate_master = 1 [server3] hostname = slave - server2
- 确保
mha
用户在所有 MariaDB 节点上有足够的权限,可通过以下 SQL 语句创建用户并授权:CREATE USER'mha'@'%' IDENTIFIED BY 'your_password'; GRANT REPLICATION CLIENT, PROCESS ON *.* TO'mha'@'%'; FLUSH PRIVILEGES;
- 配置 SSH 免密码登录,使 MHA Manager 能够与各个节点通信:
ssh - keygen - t rsa ssh - copy - id root@master - server ssh - copy - id root@slave - server1 ssh - copy - id root@slave - server2
- 创建 MHA 配置文件
启动 MHA 监控
- 启动 MHA Manager
- 运行以下命令启动 MHA 监控:
masterha_manager --conf=/etc/masterha/app1.cnf &
- 运行以下命令启动 MHA 监控:
- 监控主从复制状态
- 使用
masterha_check_repl
命令检查主从复制状态:masterha_check_repl --conf=/etc/masterha/app1.cnf
- MHA 会实时监控主从复制状态,当主节点出现故障时,会自动将从节点提升为主节点,并通知相关人员。
- 使用
使用 PMM 监控 MariaDB
PMM 安装与配置
- 安装 PMM Server
- 下载并运行 PMM Server 安装脚本:
curl -sSL https://www.percona.com/downloads/pmm/setup - pmm - server | bash
- 按照提示完成安装过程,安装完成后,会显示 PMM Server 的访问地址和登录信息。
- 下载并运行 PMM Server 安装脚本:
- 注册 MariaDB 节点
- 在 MariaDB 服务器上安装 PMM Agent:
curl -sSL https://www.percona.com/downloads/pmm/setup - pmm - agent | bash
- 运行
pmm - config
命令注册 MariaDB 节点:pmm - config --server - url=http://pmm - server:8080 --register - node --node - name=mariadb - node --node - type=mysql --service - name=mariadb --service - type=mysql --username=root --password=your_password
- 这里
pmm - server
是 PMM Server 的地址,root
是 MariaDB 的管理员用户名,your_password
是对应的密码。
- 在 MariaDB 服务器上安装 PMM Agent:
使用 PMM 监控与告警
- 监控仪表盘
- 登录 PMM Server 的 Web 界面,在 “Services” 页面可以看到已注册的 MariaDB 实例。点击实例名称,可以查看详细的监控仪表盘,包括性能指标、查询分析等内容。
- 告警配置
- 在 PMM Server 中,可以通过 “Alerts” 菜单配置告警规则。PMM 提供了一些预定义的告警规则,也可以根据实际需求自定义告警规则,例如设置查询响应时间、连接数等指标的阈值,当指标超出阈值时触发告警通知。
故障排除与优化
- 监控数据异常排查
- 如果发现监控数据异常,如指标突然飙升或下降,首先检查监控工具的配置是否正确,例如 Prometheus 的抓取间隔、数据源配置等。同时,确认 MariaDB 服务器本身是否有异常日志,如错误日志、慢查询日志等,从中查找可能导致问题的原因。
- 对于 Prometheus + Grafana 监控系统,可通过 PromQL 查询语句直接在 Prometheus 界面中验证指标数据的准确性。如果数据不准确,检查 MariaDB Exporter 的配置和权限,确保其能够正确获取数据库指标。
- 告警误报处理
- 告警误报可能是由于告警规则设置不合理导致的。例如,告警阈值设置过低或时间窗口过短,可能会导致正常波动的数据触发告警。可以通过调整告警规则中的阈值和时间参数来减少误报。
- 对于基于 Prometheus 的告警系统,使用
for
子句设置告警持续时间可以避免短暂的异常触发告警。同时,仔细分析告警指标的逻辑,确保其能够准确反映实际的故障情况。
- 性能优化建议
- 根据监控数据,对 MariaDB 进行性能优化。如果发现查询响应时间过长,对慢查询进行分析和优化,例如添加合适的索引、重写查询语句等。对于高资源利用率问题,考虑升级服务器硬件、优化数据库配置参数(如缓冲池大小、线程池配置等)。
- 在主从复制架构中,如果发现复制延迟,检查主从节点之间的网络状况、主节点的负载情况以及从节点的应用线程处理能力。可以通过调整复制线程数量、优化主节点的 binlog 写入性能等方式来减少复制延迟。
通过以上详细的步骤和方法,我们可以搭建一个功能完善的 MariaDB 监控与告警系统,确保 MariaDB 数据库的稳定、高效运行,及时发现并解决潜在问题,保障业务的连续性。在实际应用中,需要根据具体的业务需求和环境特点,灵活调整监控指标、告警规则以及优化策略,以达到最佳的监控和管理效果。