首批通过分布式安全可靠测评,为关键业务系统打造
告警通道配置示例
更新时间:2023-08-10 11:45:58
本文档为您列举常见的告警通道配置示例,供您参考。
钉钉通道
可以基于钉钉群机器人的 Webhook 实现群消息发送,配置钉钉告警通道需要进行两部分操作:
- 在接收告警的钉钉群配置机器人。
- 在 OCP 中配置钉钉通道信息。
配置钉钉群机器人
在 PC 端打开需要接收告警通知的钉钉群。
单击上方菜单栏的 群设置 按钮。
在弹出的面板中单击 智能群助手 > 添加机器人。
在 群机器人 弹窗中单击
,选择要添加的机器人。单击 自定义 机器人,在 机器人详情 弹窗中单击 添加。
设置机器人信息,包括 机器人名字 及 安全设置。
安全设置包括三种模式:自定义关键词、加签 及 IP 地址段。您可参考 自定义机器人安全设置 根据所需选择一种进行配置,此处以 自定义关键词 为例。

勾选 我已阅读并同意 《自定义机器人服务及免责条款》,单击 完成。
在 添加机器人 对话框中复制生成的机器人 Webhook 地址,单击 完成。
配置钉钉通道信息
登录 OCP。
在左侧导航栏中单击 系统管理 > 告警 。
在 告警通道 页签单击 新建通道 。
配置通道 基本信息。
参数 说明 通道类型 选择 钉钉。 通道名 告警通道的名称, Webhook 地址 配置钉钉机器人后生成的 Webhook 地址,即 配置钉钉群机器人 中 步骤 8 复制的地址。 签名密钥 可选填。在钉钉机器人安全设置时,选择 加签 模式后所获取的签名密钥字符串。 指定用户 可选填。钉钉群成员的手机号码。 代理 可选填。请填写发送告警信息的代理,格式为 http:ip:port。其中, ip 为代理服务器的 IP,port 为发送告警使用的端口。 若代理服务器的 IP 为 xxx.xxx.xxx.xxx,规划使用 80 端口发送告警消息,则可配置为http:xxx.xxx.xxx.xxx:80。
(可选)配置通道告警消息。
钉钉消息支持 markdown,以下样例借助 markdown 的格式化能力配置富文本消息。 配置方式和文本格式的消息是一样的,差别在于几个模板的配置。 比如通过引用
${alarm_level_color}实现消息字体颜色的配置。钉钉支持消息类型参见 钉钉开发文档。
* 消息模板 ```javascript <font color=${alarm_level_color}>OCP聚合通知-单条告警</font> > - 名称:`${alarm_name}` > - 级别:`${alarm_level}` > - 告警对象:`${alarm_target}` > - 概述:`${alarm_summary}` > - 生成时间: `${alarm_active_at}` > - 详情:`${alarm_description}` > - [到OCP查看](${alarm_url}) ``` * 聚合消息模板 ```javascript <font color=${alarm_level_color}>OCP聚合通知-多条告警</font> > - 名称:`${alarm_name}` > - 级别:`${alarm_level}` > - 告警数量:`${alarm_count}` > - 聚合分组:`${alarm_group_by}` > - 告警对象:`${alarm_target}` > - 生成时间: `${alarm_active_at}` ``` * Body 模板 ```javascript { "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 json
import requests
import os
import sys
ACCESS_TOKEN = "Ding Talk Token"
def send_alarm():
"""
可以通过 os.environ 从环境变量获取 告警相关的变量值。
支持的变量列表参见 《用户指南/附录4 OCP 告警模板变量》。
"""
message = os.environ['message']
data = {
"msgtype": "markdown",
"markdown": {
"text": message
}
}
resp = requests.post("https://oapi.dingtalk.com/robot/send?access_token=" + ACCESS_TOKEN, json=data)
resp.close()
response = json.loads(resp.text)
# 将返回结果输入到标准错误(stderr)或标准输出(stdout),会被用于验证告警是否发送成功,优先验证stderr。
if not response['errcode'] == 0:
sys.stderr.write(resp.text)
else:
print(resp.text)
def main():
"""
若发送成功,返回值为 0
若发送失败,错误输出到 stderr,返回值不为 0
"""
try:
send_alarm()
return 0
except Exception as e:
sys.stderr.write(str(e))
return 1
if __name__ == "__main__":
sys.exit(main())
Bash 脚本示例
#!/usr/bin/env bash
# should contains shebang in first line, only python/bash are supported
# 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='Ding Talk Token'
URL="https://oapi.dingtalk.com/robot/send?access_token=$token"
# if message is json format, use "'"${message}"'" or "${message}", do not wrapper a new json body
# if message is not json format, use "${message}"
# do not use '${message}'
# print the response to stderr or stdout, which will be validated if success, validate stderr firstly.
curl -s -X POST ${URL} -H 'Content-Type: application/json' -d '{"msgtype":"text","text":{"content":"'"${message}"'"}}'
return $?
}
# invoke function to
send
说明
目前支持的 Shebang 包括 python、bash、sh、/bin/bash、/bin/sh、/usr/bin/python、/usr/bin/bash、/usr/bin/env python 和 /usr/bin/env。 bashShebang 的正确写法为 #!/bin/sh,推荐使用 #!/usr/bin/env bash 这种写法,执行时会去 $PATH 中找第一个符合的命令来执行。