您可以将 MongoDB Ops Manager 配置为发送警报通知到 Webhook 终结点,作为 HTTP POST 请求以进行程序化处理。Webhooks 允许您将 MongoDB Ops Manager 警报与自定义监控系统、事件管理平台或自动化工作流集成。
必需的访问权限
要将 MongoDB Ops Manager 与 Webhook 集成,您必须拥有该项目的 Project Monitoring Admin 访问权限。
验证 Webhook 请求
您可以使用以下方法对 Webhook 请求进行身份验证:
Webhook 密钥:MongoDB Ops Manager 使用该密钥生成
X-MMS-Signature标头。MongoDB Ops Manager 不会发送密钥本身作为身份验证标头或 Bearer token。要学习如何验证签名,请参阅 验证 Webhook 请求。OAuth 2.0 客户端凭证:MongoDB Ops Manager 从您的 OAuth 2.0 令牌终结点获取持有者访问令牌,并将其发送到
Authorization标头中。要配置此方法,请参阅 配置 Webhook 集成。
您可以选择使用其中一种方法、两种都使用,或者都不使用。如果您同时配置了这两种方法,MongoDB Ops Manager 会在同一个请求中包含 Authorization 和 X-MMS-Signature 标头。
MongoDB Ops Manager 会缓存 OAuth 2.0 访问令牌,并在令牌过期时对其进行刷新。如果您的 Webhook 终结点返回 401 响应,MongoDB Ops Manager 将刷新令牌并重试一次请求。
自定义标头模板行为
如果您配置了自定义标头模板,它将替换请求中的默认标头。MongoDB Ops Manager 不会为您添加 X-MMS-Signature 或 Authorization 标头。要包含任一标头,请将其添加到您的模板中:
"X-MMS-Signature": "${signature}""Authorization": "Bearer ${oauthToken}"
要了解有关 Webhook 模板的更多信息,请参阅配置 Webhook 模板。
其他身份验证方法
如果 webhook 密钥和 OAuth 2.0 客户端凭证无法满足您的需求,您可以通过以下方式之一处理身份验证:
查询参数:在 Webhook URL 中包含身份验证凭证作为查询参数。示例:
https://example.com/webhook?token=your-auth-tokenIP访问列表:配置您的Webhook终结点,使其仅接受来自您的MongoDB Ops Manager实例IP地址的请求。
反向代理或 API 网关:使用反向代理或 API 网关,先处理身份验证,然后再转发请求到您的 webhook 终结点。
验证 Webhook 请求
要验证 webhook 请求是否源自 MongoDB Ops Manager,请验证 X-MMS-Signature 标头:
配置 Webhook 集成
配置身份验证。
输入以下至少一种身份验证选项:
Webhook Secret:输入密钥。MongoDB Ops Manager 使用此密钥生成
X-MMS-Signature标头以进行请求验证。OAuth2 Token URL, OAuth2 Client ID 和 OAuth2 Client Secret:输入 MongoDB Ops Manager 为获取访问令牌而调用的令牌终结点,以及您在 OAuth 2.0 提供商处注册的应用程序的凭证。将这三个值一起设置,或者将这三个值都留空。
您可以同时使用这两个选项。要了解更多信息,请参阅对 Webhook 请求进行身份验证。
要将警报发送到您的 webhook,请配置警报通知。要了解更多信息,请参阅在 MongoDB Ops Manager 中配置警报设置。
请求头
MongoDB Ops Manager 会在每个 webhook 请求中包含以下 HTTP 标头:
Ops Manager 添加了一个名为X-MMS-Event的请求标头,以区分各种警报状态。此标头的可能值是:
| 警报刚刚打开。 |
| 警报已解决。 |
| 先前打开的警报仍处于打开状态。 |
| 警报已得到确认。 |
| 警报无效并被取消。 |
| 表示信息警报,即时间点事件,例如“主节点当选”。 |
如果您在 Webhook Secret 字段中指定键,则 MongoDB Ops Manager 会添加 X-MMS-Signature 请求标头。此标头包含请求主体的 base 编码的64 HMAC -SHA-1 签名。MongoDB Ops Manager 使用提供的密钥创建签名。
如果您配置 OAuth 2.0 客户端凭证,MongoDB Ops Manager 会添加 Authorization 请求标头。此标头包含 MongoDB Ops Manager 从您的 OAuth 2.0 令牌终结点获取的持有者访问令牌。
请求正文
请求正文包含一个 JSON 文档,该文档使用与 MongoDB Ops Manager API 警报资源相同的格式。负载包含关键字段,如:
id: 警报的唯一标识符。eventTypeName: 触发警报的事件类型。created: 创建警报的时间戳。status: 警报的当前状态(示例OPEN、CLOSED)。humanReadable:警报的人类可读说明。
有关字段的完整列表,请参阅 Get One 警报 终结点文档。
示例 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 模板
您可以使用 FreeMarker 模板自定义请求标头和正文内容。有关 Webhook 模板的详细信息,包括可用的模板变量、正则表达式辅助工具和示例,请参阅配置 Webhook 模板。
限制
使用 Webhook 集成时,请考虑以下限制:
未包含警报严重程度
Webhook 有效负载不包含您在 MongoDB Ops Manager 中配置的警报严重性级别。要检索配置的严重性,请使用 webhook 有效负载中的 alertConfigId 对 获取一个警报配置 终结点进行额外调用。
无手动测试警报
MongoDB Ops Manager 不提供手动 trigger 测试警报的方法。要测试您的 webhook 终结点,您可以暂时设置一个具有您可以 trigger 的条件的警报,例如:
测试部署中的低磁盘空间阈值。
可以通过打开多个连接来 trigger 的连接计数阈值。
测试副本集上的复制延迟阈值。
确认网络钩正确接收警报后,您可以删除测试警报配置。
防火墙配置
由于 MongoDB Ops Manager 是自行托管的,请确保您的网络允许从 MongoDB Ops Manager 服务器向 Webhook 终结点发出出站 HTTP 请求。如果您的 webhook 终结点位于防火墙后,请将 MongoDB Ops Manager 服务器的 IP 地址添加到终结点的 IP 访问列表。
解决 Webhook 交付问题
如果您的 Webhook 未收到警报: