您可以配置Cloud Manager ,以将警报通知作为HTTP POST 请求发送到 Webhook 端点,以进行编程处理。 Webhook 允许您将Cloud Manager警报与自定义监控系统、事件管理平台或自动化工作流程集成。
必需的访问权限
要将Cloud Manager与 Webhook 集成,您必须拥有项目的Project Monitoring Admin访问权限。
配置 Webhook 集成
在MongoDB Cloud Manager中,转到 Project Settings 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
在侧边栏中,单击 Project Settings。
显示项目设置页面。
要将警报发送到 Webhook,请配置警报通知。要了解更多信息,请参阅配置警报设置。
请求头
Cloud Manager在每个 Webhook请求中包含以下HTTP 头部:
Cloud Manager 添加了一个名为X-MMS-Event的请求标头,以区分各种警报状态。此标头的可能值是:
| 警报刚刚打开。 |
| 警报已解决。 |
| 先前打开的警报仍处于打开状态。 |
| 警报已得到确认。 |
| 警报无效并被取消。 |
| 表示信息警报,即时间点事件,例如“主节点当选”。 |
如果您在 Webhook Secret字段中指定键, MongoDB Cloud Manager会添加 X-MMS-Signature请求标头。此标头包含请求正文的 base64-encoded HMAC -SHA-1 签名。 MongoDB Cloud Manager使用提供的密钥创建签名。
请求正文
请求正文包含一个JSON 文档,其格式与Cloud Manager API警报资源相同。有效负载包括以下关键字段:
id: 警报的唯一标识符。eventTypeName: 触发警报的事件类型。created: 创建警报的时间戳。status:警报的当前状态(示例、OPEN、CLOSED)。humanReadable:人类可读的警报描述。
示例 Webhook 负载
以下示例显示了指标阈值警报的示例Webhook 有效负载:
{ "id": "5d1b6f8e8c2e4e2d3c4a5b6c", "groupId": "5d1b6f8e8c2e4e2d3c4a5b6d", "eventTypeName": "OUTSIDE_METRIC_THRESHOLD", "status": "OPEN", "created": "2024-01-15T10:30:00Z", "updated": "2024-01-15T10:30:00Z", "lastNotified": "2024-01-15T10:30:00Z", "humanReadable": "Disk space used on data partition is 95.2%.", "metricName": "DISK_PARTITION_SPACE_USED_DATA", "currentValue": { "number": 95.2, "units": "RAW" } }
自定义 Webhook 模板
您可以通过在 Webhook 通知上设置 webhookHeadersTemplate 和 webhookBodyTemplate 字段来自定义 Webhook 请求头和主体内容。每个模板都支持 ${field} 插值:发送通知时,Cloud Manager 会将每个 ${field} 占位符替换为警报文档中匹配字段的值。
您可以插值警报文档返回的任何字段,例如 ${eventTypeName}、${clusterName}、${status} 和 ${created}。有关可插值字段的完整列表,请参阅 Get One 警报 终结点的响应字段。
示例,主体模板 {"event": "${eventTypeName}", "cluster": "${clusterName}"} 会在 Cloud Manager 发送请求之前使用其警报值渲染每个占位符。
呈现的正文必须是有效的JSON ,并与 Content-Type: application/json 标头一起发送。呈现的标头必须形成一个JSON对象,该对象将每个标头名称映射到其值。 Cloud Manager不会向模板公开 Webhook 密钥或签名标头,并编辑API响应中的这两个模板字段。
如果模板无法呈现、超过大小限制或生成无效输出, Cloud Manager会改为发送其默认负载和标头,但仍会传递通知。
要在保存警报之前预览渲染的输出,请单击 Post test message to webhook 按钮,该按钮会针对示例警报数据渲染您的模板。
验证 Webhook 请求
Webhook Secret字段存储Cloud Manager仅用于生成用于请求验证的 X-MMS-Signature 标头的密钥。 Cloud Manager不会直接将密钥作为身份验证标头或不记名令牌发送。
如果您的 Webhook 终结点需要身份验证,则必须使用以下方法之一独立处理:
查询参数:在 Webhook URL 中包含身份验证凭证作为查询参数。示例:
https://example.com/webhook?token=your-auth-token反向代理或API网关:使用反向代理或API网关在将请求转发到 Webhook 端点之前处理身份验证。
验证 Webhook 请求
要验证 Webhook请求是否源自Cloud Manager,请验证 X-MMS-Signature 标头:
使用 Webhook 密钥计算请求正文的 Base64-encoded HMAC -SHA-1 签名。
限制
使用 Webhook 集成时,请考虑以下限制:
未包含警报严重程度
Webhook 有效负载不包括您在Cloud Manager中配置的警报严重性级别。要检索配置的严重性,请使用 Webhook 有效负载中的 alertConfigId 对“获取一个警报配置”端点进行额外调用。
无手动测试警报
Cloud Manager不提供手动触发测试警报的方法。要测试您的 Webhook 端点,您可以使用易于触发的条件临时设立警报,例如:
测试部署的磁盘空间阈值较低。
可以通过打开多个连接来 trigger 的连接计数阈值。
测试副本集上的复制延迟阈值。
确认网络钩正确接收警报后,您可以删除测试警报配置。
防火墙配置
如果防火墙要求配置IP访问列表,请允许从Cloud Manager IP地址访问权限,以便Cloud Manager可以与 Webhook 端点通信。
解决 Webhook 交付问题
如果您的 Webhook 未收到警报: