Skip to content

OceanBase 第三方监控集成

Prometheus + Grafana 监控方案

Prometheus 是一款开源的监控和告警工具,Grafana 是一款开源的可视化工具,两者结合使用可以为 OceanBase 集群提供强大的监控和可视化能力。

Prometheus 配置

1. 安装 Prometheus

Prometheus 是一款独立的二进制应用,无需复杂的依赖,可以直接下载并运行。

bash
# 下载 Prometheus 二进制安装包
wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz

# 解压安装包
# 解压下载的 tar.gz 文件,会生成一个包含 Prometheus 可执行文件的目录
tar xvfz prometheus-*.tar.gz
# 进入解压后的目录
cd prometheus-*

# 启动 Prometheus 服务
# 使用默认配置文件 prometheus.yml 启动 Prometheus
./prometheus --config.file=prometheus.yml

2. 配置 Prometheus 监控 OceanBase

编辑 prometheus.yml 配置文件,添加 OceanBase 集群作为监控目标,使 Prometheus 能够采集 OceanBase 的监控指标。

yaml
# 全局配置
# 全局配置项会应用到所有监控任务
# scrape_interval: 采集指标的时间间隔
# evaluation_interval: 评估告警规则的时间间隔
global:
  scrape_interval: 15s  # 每 15 秒采集一次指标
  evaluation_interval: 15s  # 每 15 秒评估一次告警规则

# 监控任务配置
scrape_configs:
  # 定义一个名为 oceanbase 的监控任务
  - job_name: 'oceanbase'  # 任务名称,用于标识不同的监控目标
    static_configs:
      # 监控目标列表,包含所有需要监控的 OceanBase 节点
      # 格式:['节点1:端口', '节点2:端口', ...]
      - targets: ['observer1:2881', 'observer2:2881', 'observer3:2881']
    metrics_path: '/metrics'  # 指标采集路径,OceanBase 暴露的监控端点
    params:
      type: ['tenant']  # 监控类型,这里指定为租户级监控
      tenant: ['sys']  # 监控的租户,这里监控 sys 租户
    relabel_configs:
      # 重标签配置,用于修改或添加标签
      # 将 instance 标签从 IP:端口格式转换为仅 IP 格式
      - source_labels: [__address__]  # 源标签,使用目标地址
        target_label: instance  # 目标标签名
        regex: (.*):\d+  # 正则表达式,匹配 IP:端口格式
        replacement: $1  # 替换为 IP 部分

3. 配置 OceanBase 监控端点

在 OceanBase 集群中启用监控功能,配置监控端口和路径,使 Prometheus 能够采集到 OceanBase 的监控指标。

sql
-- 启用 OceanBase 监控功能
alter system set enable_metrics = 'true';
-- 设置监控端口,通常与 MySQL 端口一致
alter system set metrics_port = 2881;
-- 设置监控路径,与 Prometheus 配置中的 metrics_path 保持一致
alter system set metrics_path = '/metrics';

-- 设置监控采样率
-- 采样率决定了监控指标的采集频率,值越大,采样间隔越长
-- 可根据实际需求调整,平衡监控精度和系统负载
alter system set metrics_samplerate = 10;

Grafana 配置

Grafana 用于将 Prometheus 采集的监控指标可视化,提供直观的监控面板和告警功能。

1. 安装 Grafana

Grafana 支持多种安装方式,这里介绍使用 apt 包管理器在 Ubuntu 系统上安装 Grafana。

bash
# 安装 Grafana 依赖包
sudo apt-get install -y apt-transport-https software-properties-common wget
# 添加 Grafana 官方 GPG 密钥
sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
# 添加 Grafana 官方 apt 源
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
# 更新 apt 包列表
sudo apt-get update
# 安装 Grafana
sudo apt-get install -y grafana

# 启动 Grafana 服务
sudo systemctl start grafana-server
# 设置 Grafana 开机自启
sudo systemctl enable grafana-server

2. 添加 Prometheus 数据源

在 Grafana 中添加 Prometheus 作为数据源,以便 Grafana 能够从 Prometheus 中获取监控数据。

  1. 登录 Grafana Web 界面

    • 默认访问地址:http://localhost:3000
    • 默认用户名/密码:admin/admin
    • 首次登录需要修改默认密码
  2. 添加数据源

    • 点击左侧菜单栏的 "配置"(齿轮图标)→ "数据源"
    • 点击 "添加数据源" 按钮
    • 在数据源列表中选择 "Prometheus"
  3. 配置数据源

    • 在 "URL" 字段中输入 Prometheus 服务器的地址(如:http://localhost:9090
    • 其他配置保持默认值即可
    • 点击 "保存并测试" 按钮,验证数据源连接是否成功

3. 导入 OceanBase 监控面板

Grafana 提供了丰富的监控面板模板,可以直接导入使用。OceanBase 官方提供了监控面板模板,也可以使用社区贡献的模板。

  1. 导入监控面板

    • 点击左侧菜单栏的 "创建"(+ 图标)→ "导入"
    • 输入 OceanBase 监控面板的 JSON 文件路径或面板 ID
    • 选择已添加的 Prometheus 数据源
    • 点击 "导入" 按钮完成导入
  2. 查看监控面板

    • 导入成功后,在左侧菜单栏的 "仪表板" 中可以找到导入的监控面板
    • 点击监控面板名称,即可查看 OceanBase 集群的监控数据

OceanBase 监控指标分类

OceanBase 提供了丰富的监控指标,按照监控对象和层级可以分为以下几类:

  1. 集群级指标

    • 用于监控整个 OceanBase 集群的状态和性能
    • 关键指标包括:
      • ob_cluster_status: 集群整体状态,如 ACTIVE、INACTIVE 等
      • ob_cluster_version: 集群版本信息
      • ob_zone_count: 集群中可用区(Zone)的数量
      • ob_server_count: 集群中服务器(OBServer)的数量
  2. 节点级指标

    • 用于监控每个 OBServer 节点的硬件资源使用情况
    • 关键指标包括:
      • ob_server_status: 节点状态,如 ACTIVE、INACTIVE 等
      • ob_server_cpu_usage: CPU 使用率
      • ob_server_memory_usage: 内存使用率
      • ob_server_disk_usage: 磁盘使用率
      • ob_server_network_io: 网络 IO 情况
  3. 租户级指标

    • 用于监控每个租户的资源使用情况和业务指标
    • 关键指标包括:
      • ob_tenant_status: 租户状态,如 ACTIVE、LOCKED 等
      • ob_tenant_cpu_usage: 租户 CPU 使用率
      • ob_tenant_memory_usage: 租户内存使用率
      • ob_tenant_disk_usage: 租户磁盘使用率
      • ob_tenant_transaction_count: 租户事务数量
  4. 存储引擎指标

    • 用于监控 OceanBase 存储引擎的性能和状态
    • 关键指标包括:
      • ob_memstore_usage: MemStore 使用率,反映内存中未持久化数据的比例
      • ob_sstable_count: SSTable 数量,反映磁盘上持久化数据的情况
      • ob_merge_count: 合并次数,反映存储引擎的合并活动
      • ob_compaction_count: 压缩次数,反映存储引擎的压缩活动

Zabbix 监控方案

Zabbix 是一款成熟稳定的开源监控系统,支持多种监控方式,可以用于监控 OceanBase 集群的状态和性能。

Zabbix 配置

1. 安装 Zabbix Agent

Zabbix Agent 是 Zabbix 监控系统的客户端组件,需要安装在被监控的 OceanBase 节点上,用于采集节点的监控数据。

bash
# 安装 Zabbix Agent 包
sudo apt-get install -y zabbix-agent

# 配置 Zabbix Agent
# 创建 Zabbix Agent 配置文件,指定 Zabbix Server 地址和主机名
cat > /etc/zabbix/zabbix_agentd.conf << EOF
# Zabbix Server 地址,指定 Zabbix Server 的 IP 地址
Server=zabbix-server-ip
# 主动模式下 Zabbix Server 地址
ServerActive=zabbix-server-ip
# 当前主机的名称,在 Zabbix Web 界面中需要使用相同的名称
Hostname=observer1
EOF

# 启动 Zabbix Agent 服务
sudo systemctl start zabbix-agent
# 设置 Zabbix Agent 开机自启
sudo systemctl enable zabbix-agent

2. 配置 Zabbix 监控脚本

创建 OceanBase 监控脚本,用于采集 OceanBase 集群的监控指标。该脚本通过 MySQL 客户端连接 OceanBase 实例,执行 SHOW GLOBAL STATUS 命令获取监控指标。

bash
# 创建脚本存放目录
mkdir -p /etc/zabbix/scripts
# 创建 OceanBase 监控脚本
cat > /etc/zabbix/scripts/ob_monitor.sh << 'EOF'
#!/bin/bash

# OceanBase 监控脚本
# 用于采集 OceanBase 实例的监控指标

# 接收参数:OBSERVER_IP(OceanBase 实例 IP)、OBSERVER_PORT(端口)、METRIC_NAME(指标名称)
OBSERVER_IP="$1"
OBSERVER_PORT="$2"
METRIC_NAME="$3"

# 使用 MySQL 客户端连接 OceanBase 获取指定指标
# -h: 主机地址
# -P: 端口号
# -u: 用户名
# -p: 密码
# -D: 数据库名
# -e: 执行的 SQL 命令
# \G: 垂直显示结果,便于后续提取值
# grep Value: 过滤出包含 Value 的行
# awk '{print $2}': 提取值部分
mysql -h ${OBSERVER_IP} -P ${OBSERVER_PORT} -u root -p'password' -D oceanbase -e "SHOW GLOBAL STATUS LIKE '${METRIC_NAME}'\G" | grep Value | awk '{print $2}'
EOF

# 为脚本添加执行权限
chmod +x /etc/zabbix/scripts/ob_monitor.sh

3. 配置 Zabbix 监控项

编辑 Zabbix Agent 配置文件,添加 UserParameter 配置,将 Zabbix Web 界面中的监控请求映射到本地脚本执行。

bash
# 向 Zabbix Agent 配置文件添加 OceanBase 监控项
cat >> /etc/zabbix/zabbix_agentd.conf << EOF

# OceanBase 监控项配置
# 格式:UserParameter=键名[*],脚本路径 $1 $2 $3
# * 表示接收可变参数,$1$2$3 分别对应键名中的第一个、第二个、第三个参数
UserParameter=ob[*],/etc/zabbix/scripts/ob_monitor.sh $1 $2 $3
EOF

重启 Zabbix Agent 服务,使配置生效:

bash
sudo systemctl restart zabbix-agent

Zabbix Web 配置

在 Zabbix Web 界面中进行配置,添加 OceanBase 主机、监控项和触发器,实现对 OceanBase 集群的监控和告警。

  1. 创建主机

    • 登录 Zabbix Web 界面
    • 点击顶部菜单栏的 "Configuration" → "Hosts" → "Create host"
    • 填写主机基本信息:
      • Host name: 输入之前在 zabbix_agentd.conf 中配置的 Hostname(如 observer1)
      • Groups: 将主机添加到相应的主机组,如 "Databases"
      • Interfaces: 添加 Zabbix Agent 接口,输入主机 IP 地址和端口(默认 10050)
    • 点击 "Add" 按钮完成主机创建
  2. 创建监控项

    • 在主机详情页面,点击 "Items" → "Create item"
    • 配置监控项参数:
      • Name: 监控项名称,如 "OceanBase CPU Usage"
      • Type: 监控类型,选择 "Zabbix agent"
      • Key: 监控键值,格式为 ob[IP,端口,指标名称],如 "ob[127.0.0.1,2881,ob_cpu_usage]"
      • Type of information: 信息类型,选择 "Numeric (float)"
      • Units: 单位,如 "%"
      • Update interval: 更新间隔,如 "30s"
    • 点击 "Add" 按钮完成监控项创建
  3. 创建触发器

    • 在主机详情页面,点击 "Triggers" → "Create trigger"
    • 配置触发器参数:
      • Name: 触发器名称,如 "OceanBase CPU Usage High"
      • Expression: 触发条件表达式,如 "{observer1:ob[127.0.0.1,2881,ob_cpu_usage].avg(5m)}>80"
        • observer1: 主机名称
        • ob[127.0.0.1,2881,ob_cpu_usage]: 监控键值
        • avg(5m): 5分钟平均值
        • 80: 阈值条件

      • Severity: 告警级别,如 "High"
    • 点击 "Add" 按钮完成触发器创建
  4. 创建图形

    • 在主机页面,点击 "Graphs" → "Create graph"
    • 配置图形,添加相关监控项

监控告警配置

Prometheus Alertmanager 配置

1. 安装 Alertmanager

bash
# 下载 Alertmanager
wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz

# 解压并安装
tar xvfz alertmanager-*.tar.gz
cd alertmanager-*

# 启动 Alertmanager
./alertmanager --config.file=alertmanager.yml

2. 配置 Alertmanager

编辑 alertmanager.yml 文件:

yaml
global:
  resolve_timeout: 5m

route:
  group_by: ['alertname', 'cluster', 'service']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: 'email'

receivers:
- name: 'email'
  email_configs:
  - to: 'admin@example.com'
    from: 'alertmanager@example.com'
    smarthost: 'smtp.example.com:587'
    auth_username: 'alertmanager'
    auth_password: 'password'
    require_tls: true

inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'cluster', 'service']

3. 配置 Prometheus 告警规则

创建 ob_alert_rules.yml 文件:

yaml
groups:
- name: ob_alerts
  rules:
  - alert: OBServerDown
    expr: up{job="oceanbase"} == 0
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "OBServer {{ $labels.instance }} 已宕机"
      description: "OBServer {{ $labels.instance }} 已宕机超过 5 分钟"

  - alert: OBServerHighCPU
    expr: ob_server_cpu_usage{job="oceanbase"} > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "OBServer {{ $labels.instance }} CPU 使用率过高"
      description: "OBServer {{ $labels.instance }} CPU 使用率超过 80% 已达 5 分钟"

  - alert: OBServerHighMemory
    expr: ob_server_memory_usage{job="oceanbase"} > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "OBServer {{ $labels.instance }} 内存使用率过高"
      description: "OBServer {{ $labels.instance }} 内存使用率超过 80% 已达 5 分钟"

  - alert: OBServerHighDisk
    expr: ob_server_disk_usage{job="oceanbase"} > 90
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "OBServer {{ $labels.instance }} 磁盘使用率过高"
      description: "OBServer {{ $labels.instance }} 磁盘使用率超过 90% 已达 5 分钟"

prometheus.yml 中引用告警规则文件:

yaml
rule_files:
  - "ob_alert_rules.yml"

alerting:
  alertmanagers:
  - static_configs:
    - targets: ['localhost:9093']

监控最佳实践

1. 分层监控策略

  • 集群级监控:监控整个 OceanBase 集群的状态和性能
  • 节点级监控:监控每个 OBServer 节点的硬件资源使用情况
  • 租户级监控:监控每个租户的资源使用情况和业务指标
  • 应用级监控:监控应用程序对 OceanBase 的访问情况

2. 关键指标监控

  • 集群健康状态:集群状态、可用区数量、服务器数量
  • 资源使用率:CPU、内存、磁盘、网络 IO
  • 事务性能:事务数、事务成功率、事务响应时间
  • 存储性能:MemStore 使用率、SSTable 数量、合并次数
  • SQL 性能:SQL 执行次数、慢查询数、SQL 响应时间

3. 告警策略优化

  • 告警分级:根据告警严重程度分为 critical、warning、info 等级别
  • 告警抑制:避免同一问题产生大量重复告警
  • 告警聚合:将相关告警聚合为一个告警通知
  • 告警静默:在维护窗口期间静默非关键告警
  • 告警升级:长时间未处理的告警自动升级

4. 监控数据保留

  • 短期数据:保留 7-30 天,用于日常监控和故障排查
  • 长期数据:保留 1-3 年,用于趋势分析和容量规划
  • 数据采样:对长期数据进行采样,减少存储成本

常见问题(FAQ)

Q1: 如何监控 OceanBase 集群的慢查询?

A1: 可以通过以下方式监控 OceanBase 集群的慢查询:

  1. 在 OceanBase 中启用慢查询日志:

    sql
    ALTER SYSTEM SET enable_sql_audit = 'true';
    ALTER SYSTEM SET sql_audit_samplerate = 10;
    ALTER SYSTEM SET long_query_time = 1;
  2. 在 Prometheus 中添加慢查询监控指标:

    yaml
    - alert: OBSlowQueries
      expr: increase(ob_sql_slow_query_count{job="oceanbase"}[5m]) > 10
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "OceanBase 慢查询数过多"
        description: "过去 5 分钟内慢查询数超过 10 个"

Q2: 如何监控 OceanBase 集群的副本同步状态?

A2: 可以通过以下指标监控副本同步状态:

  • ob_replica_sync_status: 副本同步状态
  • ob_replica_sync_delay: 副本同步延迟
  • ob_replica_error_count: 副本错误数

在 Grafana 中创建相关监控面板,或在 Zabbix 中创建相关监控项和触发器。

Q3: 如何监控 OceanBase 集群的合并操作?

A3: 可以通过以下指标监控合并操作:

  • ob_merge_count: 合并次数
  • ob_merge_duration: 合并持续时间
  • ob_merge_error_count: 合并错误数

在 Prometheus 中添加合并操作监控告警:

yaml
- alert: OBMergeFailed
  expr: increase(ob_merge_error_count{job="oceanbase"}[5m]) > 0
  for: 5m
  labels:
    severity: critical
  annotations:
    summary: "OceanBase 合并操作失败"
    description: "过去 5 分钟内合并操作失败次数超过 0 次"

Q4: 如何集成 OceanBase 监控到现有监控系统?

A4: 可以通过以下方式集成 OceanBase 监控到现有监控系统:

  1. Prometheus:如果现有监控系统基于 Prometheus,可以直接将 OceanBase 监控目标添加到 Prometheus 配置中
  2. Zabbix:如果现有监控系统基于 Zabbix,可以安装 Zabbix Agent 并配置 OceanBase 监控脚本
  3. API 集成:使用 OceanBase 提供的监控 API,将监控数据推送到现有监控系统
  4. 第三方中间件:使用 Telegraf 等中间件,将 OceanBase 监控数据转发到现有监控系统

Q5: 如何优化 OceanBase 监控性能?

A5: 可以通过以下方式优化 OceanBase 监控性能:

  1. 调整监控采样率:根据实际需求调整监控采样率,减少监控对系统性能的影响
  2. 优化监控指标:只监控关键指标,避免监控过多非关键指标
  3. 合理设置监控间隔:根据指标变化频率,合理设置监控间隔
  4. 使用分布式监控:对于大型集群,使用分布式监控架构,分散监控负载
  5. 优化监控存储:对监控数据进行采样和压缩,减少存储成本

监控工具比较

监控工具优势劣势适用场景
Prometheus + Grafana开源免费、功能强大、可视化效果好、社区活跃需要一定的技术门槛、配置复杂中大型 OceanBase 集群
Zabbix成熟稳定、配置简单、支持多种监控方式可视化效果一般、扩展性有限中小型 OceanBase 集群
OCP专为 OceanBase 设计、功能全面、操作简单商业软件、成本较高企业级 OceanBase 集群
自研监控完全定制化、符合业务需求开发成本高、维护难度大特殊业务场景