前言
我们曾讨论完善的告警策略是整个数据监控系统的重要组成部分(参见《机智的告警策略,完善监控系统的重要一环》),介绍了如何配置告警通知以及场景示例,帮助用户及时更多潜在的故障和问题,有效地保障系统稳定运行和持续优化。为了实现故障发现、告警、处理的全闭环,我们可以利用 Webhook 或者本地 DataFlux Func 联动第三方告警响应中心,建立一个自动化的故障处理流程,提高系统的稳定性和可靠性。本文将介绍在观测云中如何配置 Webhook 和本地 DataFlux Func 连接第三方系统,从而发送告警通知到用户。
Webhook 自定义告警通知
当您需要通过 Webhook 自定义来配置告警通知对象时,可以在观测云的监控 > 通知对象管理 > 新建通知对象,选择 Webhook 自定义并填写 URL 地址。
告警通知细节
观测云的 HTTP 告警通知为【固定格式的 POST 请求】,请求体格式为application/json
,您可以参考以下请求详情示例:
POST {填写的 Webhook 地址}
Content-Type: application/json
{
"timestamp" : 1625638440,
"df_status" : "warning",
"df_event_id" : "event-xxxxxxxxxx",
"df_title" : "web001 存在问题",
"df_message" : "web001 存在问题、nCPU 使用率大于 90\n 内存使用率大于 90",
"df_dimension_tags" : "{\"host\":\"web001\"}",
"df_monitor_id" : "monitor_xxxxxxxxxx",
"df_monitor_name" : "异常检测名",
"df_monitor_checker_id" : "rul_xxxxxxxxxx",
"df_monitor_checker_name" : "异常检测项目名",
"df_monitor_checker_value": "99",
"df_event_link" : "https://console.guance.com/keyevents/monitorChart?xxxxxxxxxx",
"df_workspace_uuid" : "wksp_xxxxxxxxxx",
"df_workspace_name" : "我的工作空间",
"Result" : 99,
"... 其他更多字段": "略",
// 以下为旧版字段
"date" : 1625638440,
"workspace_uuid": "wksp_xxxxxxxxxx",
"workspace_name": "我的工作空间",
}
具体的字段说明,参见:事件 - 观测云文档
一般来说,对接第三方消息平台时,只需要用到df_title
和df_message
两个字段即可。
对接方式
观测云为您提供两种监控告警通知对象 「Webhook 自定义」的对接方式:直接对接和 DataFlux Func 中转对接。根据您的实际情况,您可以自由选择并配置。
直接对接
在观测云中,支持用户配置 Webhook 自定义告警通知对象,以便在发生异常事件告警时,向用户指定的 URL 发送 HTTP 请求,实现告警信息的的传递,以便用户能够及时对故障进行响应和处理。直接对接方式即在观测云监控 > 通知对象管理的「Webhook 自定义」中直接填写客户系统/第三方系统 URL,这样观测云就能够将异常事件请求详情直接发送到第三方系统的告警响应中心。需要注意的是,采用这种方式需要客户系统/第三方系统能够处理观测云发出的上述类型请求;否则需要以下方式 DataFlux Func 作为“接口转换器”对接客户系统或第三方系统。
DataFlux Func 中转对接
我们都知道 Webhook 在传递数据或通知时发出的请求是有固定格式的。因此,一旦客户系统或第三方系统无法满足观测云的「Webhook 自定义」方式发出的 HTTP 请求格式需求(即上文所述告警通知细节),如请求体为 XML、String 或其他格式,我们就需要 DataFlux Func 即观测云开发集成的一款集函数开发、管理、执行为一体的平台,只需简单配置及编辑脚本即可实现告警通知的对接。
所以,在观测云产生事件时,将自动向本地 DataFlux Func 的授权链接发送固定格式的 HTTP 请求,再由 DataFlux Func 中编写的脚本向第三方告警响应中心发送请求。这样,用户就可以有更多第三方系统的选择来自定义告警通知对象,让故障响应变的更加及时和便捷。
当然,采用这种方式不仅需要合适的网络环境,还需要您了解基础 Python 开发知识以及 DataFlux Func 的使用方法(参见:https://func.guance.com/doc/intro-guide/)。
实际场景示例
由于某用户告警短信平台的接受请求格式与观测云「Webhook 自定义」发出的 HTTP 请求格式不同,需要利用 DataFlux Func 中转对接来发送观测云监控器异常事件的告警通知到其告警短信平台。
假设用户的告警短信平台调用方式如下:
GET http://some-domain/send-sms?to=13000000000&msg=短信正文
那么,结合上文所述的「告警通知细节」的内容,即可写出以下脚本:
import requests
SMS_API = 'http://some-domain/send-sms'
@DFF.API('Webhook 对接')
def webhook_accept(**event):
print(f'事件数据:{event}')
params = {
'to' : '13000000000',
'msg': event.get('df_title') or '您在观测云有新事件',
}
r = requests.get(SMS_API, params=params, timeout=3)
print(f'接口返回:{r.status_code} {r.text}')
return r.status_code, r.text
在 DataFlux Func 完成脚本发布后,我们就可以在管理>授权链接中为函数添加授权链接。
创建授权链接后,在授权链接的「示例」中,复制「POST 简化形式请求」中的 URL 地址(以 /simplified
结尾)。
转到观测云 ,将 URL 地址填入通知对象管理中的「Webhook 自定义」即可。
完成以上操作,用户就可以在观测云产生事件时,及时收到告警通知。根据不同的等级的异常情况,快速响应并处理故障,有效的保障用户系统的稳定运行。
结语
Webhook 作为基于 HTTP 的回调函数,有效地实现服务器之间的实时数据传输和通知。在观测云中,您不仅可以直接设置「Webhook 自定义」通知对象,也结合观测云开发集成的 DataFlux Func,快速实现与第三方告警响应中心的联动,避免错过重要异常情况信息,从而实现故障发现、告警和处理的全闭环,帮助企业将系统动荡遏制在摇篮里!