基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
告警通道配置样例
更新时间:2023-07-31 10:26:07
本文档为您列举常见的告警通道配置样例,供您参考。
钉钉群消息
可以基于钉钉群机器人的 Webhook 实现群消息发送,群机器人介绍参见 钉钉群机器人官方文档 。
配置步骤
在钉钉群中配置机器人。
在钉钉群中配置群机器人,需要记录 Webhook URL。目前钉钉群自定义机器人需要进行安全配置才可以使用,OCP 告警 HTTP 通道仅支持 自定义关键词 和 IP地址(段 )安全设置。钉钉机器人的安全设置界面如下图所示。

设置 自定义关键词 。 设置的自定义关键词和 OCP 告警通道配置的消息模板匹配即可,如果默认模板的第一行内容包含"OCP告警通知",可以配置自定义关键词为 "OCP告警"。
设置 IP 地址(段) 。 这里需要注意,设置的 IP 地址必须是 OCP 服务器的公网 IP,可使用命令
curl -w "\n\n" -s http://whatismijnip.nl查看服务器公网 IP。由于服务器可能没有固定的公网 IP,请联系您的网络管理员获取服务器的公网 IP 网段。
在告警通道中新建通道,通道类型选择 HTTP ,接收人字段选择 手机号 ,是否群消息通道勾选 是 。
配置通知内容。
配置通道
请求方法:POST
URL 模板:
Content-Type:application/json; charset=utf-8说明
URL 模板即为步骤 1 中记录的 Webhook URL。
Header 模板:
Content-Type:application/json; charset=utf-8Body 模板
{ "msgtype": "text", "text": { "content": ${message_json} }, "at": { "atMobiles": ${recipients_json_array}, "isAtAll": false } }说明
这里 Body 的格式为 Json,引用
_json和json_array结尾的变量时,不使用 "(双引号) 括起来,因为变量值已经加了 Json 序列化处理,加上 " 会导致 Json 格式错误。 作为对比,引用非 Json 变量时需要使用 " 括起来,例如"{message}"。
钉钉群消息 markdown 格式
钉钉消息支持 markdown,以下样例借助 markdown 的格式化能力配置富文本消息。 配置方式和文本格式的消息是一样的,差别在于几个模板的配置。 比如通过引用 ${alarm_level_color} 实现消息字体颜色的配置。
钉钉支持消息类型参见 钉钉开发文档。
消息模板
<font color=${alarm_level_color}>OCP聚合通知-单条告警</font> > - 名称:`${alarm_name}` > - 级别:`${alarm_level}` > - 告警对象:`${alarm_target}` > - 概述:`${alarm_summary}` > - 生成时间: `${alarm_active_at}` > - 详情:`${alarm_description}` > - [到OCP查看](${alarm_url})聚合消息模板
<font color=${alarm_level_color}>OCP聚合通知-多条告警</font> > - 名称:`${alarm_name}` > - 级别:`${alarm_level}` > - 告警数量:`${alarm_count}` > - 聚合分组:`${alarm_group_by}` > - 告警对象:`${alarm_target}` > - 生成时间: `${alarm_active_at}`Body 模板
{ "msgtype": "markdown", "markdown": { "title": "OCP告警钉钉消息markdown测试", "text": ${message_json} } }
自定义脚本通道
自定义脚本通道,是为了满足特殊的告警对接场景而设计的。一般用于无法通过 HTTP 的方式配置或者对告警格式有特殊要求的场景,您可以在脚本中定制一些特殊的逻辑。比如:告警时间的转换,对第三方告警网关默认参数的添加等,均可以通过自定义脚本通道来实现。
基本信息:通道类型选择自定义脚本,其他选项根据具体需求进行选择。
消息模板
OCP告警通知-单条告警 - 名称:${alarm_name} - 级别:${alarm_level} - 告警对象:${alarm_target} - 概述:${alarm_summary} - 生成时间:${alarm_active_at} - 详情:${alarm_description} - OCP链接:${alarm_url}聚合消息模板
OCP告警通知-多条告警 - 名称:${alarm_name} - 级别:${alarm_level} - 告警数量:${alarm_count} - 聚合分组:${alarm_group_by} - 告警对象:${alarm_target} - 生成时间:${alarm_active_at}脚本文件名:系统默认有一个自定义脚本样例
alarm_send_script_demo.sh,您可以在其基础上进行修改,也可以参考 Python 脚本示例 和 Bash 脚本示例 新增自定义的脚本。在修改或新增文件时,请确保该脚本文件已存放在每个 OCP 的/home/admin目录下。发送测试消息:调试脚本时,可以使用发送测试消息来测试,默认消息内容使用脚本中的变量${message},请确保该变量在发送的消息体中。由于自定义脚本发送成功的判断逻辑需要视具体情况而定,系统认为只要脚本执行成功,即代表发送成功。不过,在浏览器的开发者模式中,用户可以根据发送测试消息对应的 _test 请求的 Response 内容进行调试。

Python 脚本示例
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 注意:脚本内容第一行必须是 shebang 指定执行的程序,只支持 python 和 bash
import os
import sys
def send_alarm():
"""
可以通过 os.environ 从环境变量获取 告警相关的变量值。
支持的变量列表参见 《用户指南/附录4 OCP 告警模板变量》。
"""
message = os.environ['message']
print("告警消息内容为:{}".format(message))
with open("./alarm_output.txt", "a") as file_object:
file_object.write("{}\n".format(message))
def main():
"""
若发送成功,返回值为 0
若发送失败,错误输出到 stderr,返回值不为 0
"""
try:
send_alarm()
print("send alarm success")
return 0
except Exception as e:
sys.stderr.write(str(e))
return 1
if __name__ == "__main__":
sys.exit(main())
Bash 脚本示例
#!/bin/env bash
# should contains shebang in first line, only python/bash are supported
echo "Below is a list of alarm paras"
# below variables can be referenced by prefix "$", for example, $alarm_name or ${alarm_name}
echo "alarm_name:$alarm_name"
echo "app_type:$app_type"
echo "alarm_threshold:$alarm_threshold"
echo "alarm_time=$alarm_time"
echo "alarm_last_interval:$alarm_last_interval"
echo "alarm_time:$alarm_time"
echo "alarm_level:$alarm_level"
echo "alarm_type:$alarm_type"
echo "alarm_summary:$alarm_summary"
echo "alarm_url:$alarm_url"
echo "app:$app"
echo "alarm_duration:$alarm_duration"
echo "alarm_status:$alarm_status"
echo "alarm_scope:$alarm_scope"
echo "alarm_active_at:$alarm_active_at"
echo "alarm_target:$alarm_target"
echo "alarm_description:$alarm_description"
echo "message:$message"
echo "receiver:$receiver"
echo "alarm_id:$alarm_id"
# this function defines to how to assembly request by yourself according to your requirements
# this demo shows you how to send alarm to ding ding
function send() {
# this token is ding ding group token, please apply and assign it to variable token
token=''
# URL="https://oapi.dingtalk.com/robot/send?access_token=$token"
URL=''
curl -X POST ${URL} -H 'Content-Type: application/json' -d '{"msgtype":"text","text":{"content":"'"${message}"'"}}'
return $?
}
# invoke function to
send
return $?