Skip to content

OceanBase 告警通知

告警通知是 OceanBase 数据库监控系统的重要组成部分,用于及时向运维人员发送告警信息,以便快速响应和处理数据库异常。告警通知包括告警规则配置、通知渠道设置和告警处理流程三个主要部分。

告警规则配置

告警规则是指触发告警的条件和阈值,包括告警名称、告警级别、监控指标、告警条件和持续时间等参数。

告警规则类型

基于阈值的告警

基于阈值的告警是指当监控指标超过或低于设定的阈值时触发告警。这种告警规则适用于大多数监控指标,如 CPU 使用率、内存使用率、IO 负载等。

基于趋势的告警

基于趋势的告警是指当监控指标的变化趋势符合设定条件时触发告警。这种告警规则适用于监控指标的变化率,如 QPS 突增、响应时间变长等。

基于状态的告警

基于状态的告警是指当监控对象的状态发生变化时触发告警。这种告警规则适用于监控对象的状态变化,如节点故障、集群状态异常等。

告警规则配置步骤

1. 登录 OCP 控制台

bash
# 打开浏览器,访问 OCP 控制台
https://ocp_host:8080

2. 进入告警规则管理页面

  • 点击左侧导航栏中的 "系统管理"
  • 选择 "告警管理" -> "告警规则"

3. 创建告警规则

sql
-- 通过 SQL 命令创建告警规则
ALTER ALARM RULE alarm_name 
SET 
  metric = 'metric_name',
  condition = 'metric_value > threshold',
  duration = 60,
  level = 'warning',
  description = '告警描述';

4. 配置告警参数

  • 告警名称:告警规则的唯一标识
  • 告警级别:告警的严重程度,包括紧急、严重、警告和提示四个级别
  • 监控指标:触发告警的监控指标
  • 告警条件:触发告警的条件表达式
  • 持续时间:告警条件持续的时间,单位为秒
  • 告警描述:告警的详细描述信息
  • 恢复条件:告警恢复的条件表达式

常用告警规则示例

CPU 使用率告警

sql
-- CPU 使用率超过 80% 持续 60 秒触发警告
ALTER ALARM RULE cpu_usage_warning 
SET 
  metric = 'cpu_usage',
  condition = 'cpu_usage > 80',
  duration = 60,
  level = 'warning',
  description = 'CPU 使用率超过 80%';

-- CPU 使用率超过 90% 持续 30 秒触发严重告警
ALTER ALARM RULE cpu_usage_critical 
SET 
  metric = 'cpu_usage',
  condition = 'cpu_usage > 90',
  duration = 30,
  level = 'critical',
  description = 'CPU 使用率超过 90%';

内存使用率告警

sql
-- 内存使用率超过 85% 持续 60 秒触发警告
ALTER ALARM RULE memory_usage_warning 
SET 
  metric = 'memory_usage',
  condition = 'memory_usage > 85',
  duration = 60,
  level = 'warning',
  description = '内存使用率超过 85%';

-- 内存使用率超过 95% 持续 30 秒触发严重告警
ALTER ALARM RULE memory_usage_critical 
SET 
  metric = 'memory_usage',
  condition = 'memory_usage > 95',
  duration = 30,
  level = 'critical',
  description = '内存使用率超过 95%';

IO 负载告警

sql
-- IO 负载超过 100 持续 60 秒触发警告
ALTER ALARM RULE io_load_warning 
SET 
  metric = 'io_load',
  condition = 'io_load > 100',
  duration = 60,
  level = 'warning',
  description = 'IO 负载超过 100';

-- IO 负载超过 200 持续 30 秒触发严重告警
ALTER ALARM RULE io_load_critical 
SET 
  metric = 'io_load',
  condition = 'io_load > 200',
  duration = 30,
  level = 'critical',
  description = 'IO 负载超过 200';

通知渠道设置

通知渠道是指告警信息的发送方式,包括邮件、短信、电话、微信和企业微信等。

通知渠道类型

邮件通知

邮件通知是最常用的告警通知方式,适用于大多数告警场景。邮件通知可以包含详细的告警信息和恢复建议。

短信通知

短信通知适用于紧急告警场景,可以快速通知运维人员。短信通知的内容应简洁明了,包含告警级别、告警名称和告警摘要。

电话通知

电话通知适用于严重和紧急告警场景,可以确保运维人员及时收到告警信息。电话通知的内容应简洁明了,包含告警级别和告警摘要。

微信通知

微信通知适用于移动办公场景,可以通过微信公众号或企业微信推送告警信息。微信通知可以包含详细的告警信息和恢复建议。

企业微信通知

企业微信通知适用于企业内部告警场景,可以通过企业微信推送告警信息和@相关人员。企业微信通知可以包含详细的告警信息和恢复建议。

通知渠道配置

邮件通知配置

sql
-- 配置邮件服务器
ALTER ALARM NOTIFICATION CHANNEL email 
SET 
  smtp_server = 'smtp.example.com',
  smtp_port = 465,
  smtp_username = 'alarm@example.com',
  smtp_password = 'password',
  smtp_ssl = true,
  sender = 'alarm@example.com';

-- 配置邮件接收人
ALTER ALARM NOTIFICATION RECIPIENT email 
SET 
  recipients = 'admin1@example.com,admin2@example.com';

短信通知配置

sql
-- 配置短信服务器
ALTER ALARM NOTIFICATION CHANNEL sms 
SET 
  sms_server = 'sms.example.com',
  sms_port = 8080,
  api_key = 'api_key',
  secret_key = 'secret_key';

-- 配置短信接收人
ALTER ALARM NOTIFICATION RECIPIENT sms 
SET 
  recipients = '13800138000,13900139000';

微信通知配置

sql
-- 配置微信公众号
ALTER ALARM NOTIFICATION CHANNEL wechat 
SET 
  app_id = 'app_id',
  app_secret = 'app_secret',
  template_id = 'template_id';

-- 配置微信接收人
ALTER ALARM NOTIFICATION RECIPIENT wechat 
SET 
  recipients = 'user1,user2';

企业微信通知配置

sql
-- 配置企业微信
ALTER ALARM NOTIFICATION CHANNEL wework 
SET 
  corpid = 'corpid',
  agentid = 'agentid',
  corpsecret = 'corpsecret';

-- 配置企业微信接收人
ALTER ALARM NOTIFICATION RECIPIENT wework 
SET 
  recipients = 'user1,user2',
  departments = '1,2';

告警处理流程

告警处理流程是指从接收到告警信息到告警恢复的整个过程,包括告警确认、故障定位、故障修复和告警恢复四个主要步骤。

告警确认

接收告警

运维人员通过通知渠道接收到告警信息,包括告警级别、告警名称、告警描述和告警时间等。

确认告警

运维人员确认告警的真实性和严重程度,判断是否需要立即处理。

故障定位

查看告警详情

sql
-- 查看告警详情
SELECT * FROM oceanbase.GV$OB_ALARMS WHERE ALARM_ID = alarm_id;

-- 查看告警历史
SELECT * FROM oceanbase.GV$OB_ALARM_HISTORY WHERE ALARM_NAME = 'alarm_name' ORDER BY ALARM_TIME DESC;

-- 查看相关监控指标
SELECT * FROM oceanbase.GV$OB_METRICS WHERE METRIC_NAME = 'metric_name' ORDER BY SAMPLE_TIME DESC LIMIT 100;

分析告警原因

  • 查看告警的监控指标趋势
  • 分析告警发生前后的系统日志
  • 检查相关组件的运行状态
  • 排查可能的故障原因

故障修复

制定修复方案

根据故障定位的结果,制定详细的修复方案,包括修复步骤、风险评估和回滚计划。

执行修复操作

按照修复方案执行修复操作,监控修复过程,确保修复过程安全可控。

验证修复结果

sql
-- 验证监控指标
SELECT * FROM oceanbase.GV$OB_METRICS WHERE METRIC_NAME = 'metric_name' ORDER BY SAMPLE_TIME DESC LIMIT 10;

-- 验证告警状态
SELECT * FROM oceanbase.GV$OB_ALARMS WHERE ALARM_ID = alarm_id;

告警恢复

确认告警恢复

当故障修复完成后,确认告警是否自动恢复。如果告警没有自动恢复,手动确认告警恢复。

记录告警处理过程

记录告警的处理过程,包括告警时间、告警级别、告警原因、修复方案、修复结果和恢复时间等。

告警通知最佳实践

告警级别划分

  • 紧急:数据库不可用,业务受到严重影响,需要立即处理
  • 严重:数据库性能严重下降,业务受到影响,需要尽快处理
  • 警告:数据库存在潜在问题,需要关注并处理
  • 提示:数据库状态变化,需要了解情况

告警规则设计

合理设置阈值

  • 根据业务需求和系统容量设置阈值
  • 避免设置过于敏感的阈值,导致频繁告警
  • 避免设置过于宽松的阈值,导致漏告警

考虑告警持续时间

  • 对于瞬时波动的指标,设置适当的持续时间
  • 对于重要指标,设置较短的持续时间
  • 对于次要指标,设置较长的持续时间

避免告警风暴

  • 避免同一故障触发多个告警
  • 合理设置告警的抑制规则
  • 对同一类型的告警进行聚合

通知渠道选择

根据告警级别选择通知渠道

  • 紧急:电话通知 + 短信通知 + 邮件通知
  • 严重:短信通知 + 邮件通知
  • 警告:邮件通知 + 微信通知
  • 提示:邮件通知

配置多个通知渠道

  • 配置至少两个通知渠道,确保告警信息能够及时送达
  • 对于重要告警,配置多种通知渠道

告警处理流程优化

建立告警处理团队

  • 明确告警处理的责任人
  • 建立告警处理的轮值机制
  • 制定告警处理的 SLA

自动化告警处理

  • 对于常见告警,实现自动化处理
  • 配置告警的自动恢复规则
  • 使用自动化工具处理告警

定期 review 告警规则

  • 定期 review 告警规则的有效性
  • 根据系统变化调整告警规则
  • 优化告警规则,减少误告警和漏告警

告警通知案例

案例一:CPU 使用率告警

场景:OceanBase 节点 CPU 使用率超过 90% 持续 30 秒触发严重告警

处理流程

  1. 接收告警:运维人员通过短信和邮件接收到告警信息
  2. 确认告警:确认告警的真实性和严重程度
  3. 故障定位:查看 CPU 使用率趋势和相关进程
  4. 故障修复:优化 SQL 查询或调整资源配置
  5. 告警恢复:确认 CPU 使用率恢复正常,告警自动恢复
  6. 记录处理过程:记录告警处理过程和经验教训

结果:告警在 5 分钟内得到处理,业务未受到影响

案例二:节点故障告警

场景:OceanBase 节点状态变为 inactive 触发紧急告警

处理流程

  1. 接收告警:运维人员通过电话、短信和邮件接收到告警信息
  2. 确认告警:确认节点状态确实为 inactive
  3. 故障定位:查看节点日志和系统日志
  4. 故障修复:重启节点或迁移业务
  5. 告警恢复:确认节点状态恢复为 active,告警自动恢复
  6. 记录处理过程:记录告警处理过程和经验教训

结果:告警在 15 分钟内得到处理,业务中断时间 10 分钟

常见问题(FAQ)

Q1: 如何避免频繁告警?

A1: 避免频繁告警的方法:

  • 合理设置告警阈值和持续时间
  • 避免同一故障触发多个告警
  • 对同一类型的告警进行聚合
  • 定期 review 告警规则

Q2: 如何确保告警信息及时送达?

A2: 确保告警信息及时送达的方法:

  • 配置多个通知渠道
  • 根据告警级别选择合适的通知渠道
  • 定期测试通知渠道的有效性
  • 建立告警处理的轮值机制

Q3: 如何处理误告警?

A3: 处理误告警的方法:

  • 分析误告警的原因
  • 调整告警规则,避免误告警
  • 记录误告警的情况,定期 review
  • 对于频繁的误告警,临时禁用告警规则

Q4: 如何实现告警的自动恢复?

A4: 实现告警自动恢复的方法:

  • 配置告警的恢复条件
  • 对于常见告警,实现自动化处理脚本
  • 使用自动化工具处理告警

Q5: 如何优化告警处理流程?

A5: 优化告警处理流程的方法:

  • 建立清晰的告警处理流程
  • 明确告警处理的责任人
  • 实现告警的分级处理
  • 定期 review 告警处理流程

Q6: 如何配置告警的抑制规则?

A6: 配置告警抑制规则的方法:

  • 配置同一类型告警的抑制时间
  • 配置关联告警的抑制规则
  • 配置基于条件的告警抑制

Q7: 如何查看告警历史?

A7: 查看告警历史的方法:

  • 使用 OCP 控制台查看告警历史
  • 查询 oceanbase.GV$OB_ALARM_HISTORY 视图
  • 导出告警历史到日志系统

Q8: 如何配置告警的升级规则?

A8: 配置告警升级规则的方法:

  • 配置告警的升级时间
  • 配置告警的升级级别
  • 配置告警的升级通知渠道

Q9: 如何测试告警通知?

A9: 测试告警通知的方法:

  • 使用 OCP 控制台的测试功能
  • 手动触发告警测试
  • 模拟故障场景,测试告警触发

Q10: 如何实现告警的可视化?

A10: 实现告警可视化的方法:

  • 使用 OCP 控制台的告警仪表盘
  • 集成第三方监控系统,如 Prometheus + Grafana
  • 开发自定义的告警可视化页面