跳转到主要内容

在 Flashduty On-call


您可通过以下2种方式,获取一个集成推送地址,任选其一即可。

使用专属集成

当您不需要将告警事件路由到不同的协作空间,优先选择此方式,更简单。
  1. 进入 Flashduty 控制台,选择 协作空间,进入某个空间的详情页面
  2. 选择 集成数据 tab,点击 添加一个集成,进入添加集成页面
  3. 选择 OceanBase 集成,点击 保存,生成卡片。
  4. 点击生成的卡片,可以查看到 推送地址,复制备用,完成。

使用共享集成

当您需要根据告警事件的 Payload 信息,将告警路由到不同的协作空间,优先选择此方式。
  1. 进入 Flashduty 控制台,选择 集成中心=>告警事件,进入集成选择页面。
  2. 选择 OceanBase 集成:
    • 集成名称:为当前集成定义一个名称。
  3. 配置默认路由,并选择对应的协作空间(集成创建后可以前往 路由 进行更多路由规则的配置)。
  4. 点击 保存 后,复制当前页面的新生成的 推送地址 备用。
  5. 完成。

在 OceanBase


一、OceanBase告警推送配置

步骤1:配置告警通道

  1. 登录您的OceanBase控制台,选择告警中心。
  2. 进入告警通道 ,单击新建通道按钮,开始新建。
  3. 通道类型选择 自定义脚本
  4. 基本配置内容,如下图所示:
drawing
  1. 配置通道中复制以下脚本内容,同时请将脚本中的 integration_key 参数补充上 Flashduty 推送地址中的 integration_key 值
#!/usr/bin/env bash

function sendToFlashduty() {
    URL="${address}/event/push/alert/standard?integration_key=${integration_key}"
    curl -s -X POST ${URL} -H 'Content-Type: application/json' -d '{
        "event_status": "'${alert_level}'",
        "alert_key": "'${alarm_id}'",
        "description": "'"${alarm_description//\"/\\\"}"'",
        "title_rule": "$app_types::$name::$alarm_targets",
        "event_time":'${timestamp}',
        "labels": {
            "app_types":"'${app_type}'",
            "id":"'${alarm_id}'",
            "name":"'${alarm_name}'",
            "alarm_level":"'${alarm_level}'",
            "alarm_status":"'${alarm_status}'",
            "alarm_active_at":"'${alarm_active_at}'",
            "alarm_threshold":"'${alarm_threshold}'",
            "alarm_type":"'${alarm_type}'",
            "alarm_targets":"'${alarm_target}'",
            "ob_cluster_group":"'${ob_cluster_group}'",
            "ob_cluster":"'${ob_cluster}'",
            "hostIP":"'${host_ip}'",
            "app_cluster":"'${app_cluster}'",
            "alarm_description":"'"${alarm_description//\"/\\\"}"'",
            "alarm_url":"'${alarm_url}'"
        }
    }'

    return $?
}

alarm_name=$(echo ${alarm_name} | sed  "s/ /_/g")
alarm_target=$(echo ${alarm_target} | sed  "s/ /_/g")

#使用告警更新时间作为告警产生时间
timestamp=$(TZ=UTC date -d "${alarm_updated_at}" +%s)

#OceanBase告警通知的状态和级别是中文,所以先转Md5,再做判断
levelMd5=$(echo ${alarm_level} | md5sum | awk '{print$1}')
statusMd5=$(echo ${alarm_status} | md5sum | awk '{print$1}')

#状态Md5
active="048d106318302b41372b4292b5696ad4"
Inactive="bf7da164d431439fe9668fbc964110c4"

#告警级别Md5
down="2e1558b0a152fae2dd15884561b1508d"
critical="59b9b38574ca2ee4f5e264b56f49a83f"
alert="723931b03a5d1cec59eac40cf0703580"   
caution="abf4d55ba8926eff32cb44065e634ed3"
info="6aae3f4254789d72aa0cc8ed55b8f11f"

address="https://api.flashcat.cloud"
integration_key=""

#将OceanBase的告警级别定义做转换
if [[ ${statusMd5} == ${Inactive} ]];then
    alert_level="Ok"
    timestamp=$(TZ=UTC date -d "${alarm_resolved_at}" +%s)
elif [[ ${statusMd5} == "${active}" ]];then
    if [[ ${levelMd5} == ${down} || ${levelMd5} == ${critical} ]];then
        alert_level="Critical"
    elif [[ ${levelMd5} == ${alert} ]];then
        alert_level="Warning"
    elif [[ ${levelMd5} == ${caution}  ||  ${levelMd5} == ${info} ]];then
        alert_level="Info"
    fi
fi

#只有状态是告警中或恢复告警才发通知,屏蔽或抑制的不发通知
if [[ ${statusMd5} == ${active} || ${statusMd5} == ${Inactive} ]];then
    sendToFlashduty
fi
  1. Response 校验信息填写 即可。
  2. 消息配置中的告警消息格式选择 Markdown。
  3. 告警消息模板 选择简体中文,并填写以下内容并提交。
OCP告警通知-单条告警
- 告警ID: ${alarm_id}
- 名称:${alarm_name}
- 级别:${alarm_level}
- 告警对象:${alarm_target}
- 服务: ${service}
- 概述:${alarm_summary}
- 生成时间:${alarm_active_at}
- 更新时间: ${alarm_updated_at}
- 恢复时间:${alarm_resolved_at}
- 详情:${alarm_description}
- 状态: ${alarm_status}
- 告警类型: ${alarm_type}
- 告警阈值: ${alarm_threshold}
- 集群组: ${ob_cluster_group}
- 集群: ${ob_cluster}
- 主机: ${host_ip}
- 应用集群: ${app_cluster}
- OCP链接:${alarm_url}

步骤2:配置告警推送

  1. 新建推送配置,路径:告警中心=>告警推送=>新建推送配置
  2. 推送类型、指定对象按需配置即可。
drawing
  1. 推送语言选择 简体中文
  2. 告警通道选择 Flashduty
  3. 开启 恢复通知
  4. 提交。
drawing

二、状态对照

OceanBaseFlashduty状态
停服Critical严重
严重Warning严重
警告Warning警告
注意Info提醒
提醒Info提醒

状态对照


OceanBaseFlashduty状态
停服Critical严重
严重Warning严重
警告Warning警告
注意Info提醒
提醒Info提醒