对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。

配置 Webhook 模板

Ops Manager支持使用FreeMarker模板语法进行Webhook模板化。您可以自定义发送到 Webhook 终结点的HTTP 头部和请求正文内容。两个模板都必须生成有效的JSON输出。

您可以在标头和正文模板中使用各种变量。有关更多详细信息,请查看警报模型文档,单击 post test message 按钮(随机数据)或保存警报并检查 Webhook 有效负载(变量名称与JSON键匹配)。

注意

并非所有变量都包含在每个 Webhook 调用中。可用字段取决于警报类型和状态。确保模板处理null 值,以避免呈现错误。

Webhook 模板中提供了以下变量:

变量
说明

${acknowledgedUntil}

已确认警报的时间戳,采用 ISO 8601 日期和时间格式(UTC 时间)。

${acknowledgementComment}

确认警报的用户留下的评论。

${acknowledgingUsername}

确认警报的用户的用户名。

${alertConfigId}

触发此警报的警报配置的唯一标识符。

${clusterId}

此警报适用的集群的唯一标识符。

${clusterName}

此警报适用的集群的名称。

${created}

打开警报时采用 ISO 8601 日期和时间格式(UTC 格式)的时间戳。

${currentValue}

(对象)触发警报的指标的当前值。

${currentValue.number}

指标的值。

${currentValue.units}

值的单位。 值取决于指标类型。

${event}

此警报通知的操作或省/市/自治区更改(默认 X-Mms-Event 标头 - alert.opened、alert.closed、alert.update、alert.acknowledge、alert.cancel、alert.inform)。

${eventTypeName}

触发警报的事件的名称。

${groupId}

为其打开此警报的群组(项目)的唯一标识符。

${hostId}

指标所属托管的唯一标识符。

${hostnameAndPort}

警报应用于每个托管主机名和端口。这可以是主机名、FQDN、IPv4解决或 IPv6解决。

${humanReadable}

人类可读的警报说明。

${id}

警报的唯一标识符。

${lastNotified}

为该警报发送最后一次通知时采用 ISO 8601 日期和时间格式(UTC 时间)的时间戳。

${links}

(对象数组)指向子资源或相关资源的一个或多个链接。

${links[i].rel}

描述链接资源的关系类型(例如,self 表示当前资源)。

${links[i].href}

资源链接。

${metricName}

Go阈值的测量名称。

${oauthToken}

Webhook请求的 OAuth 2.0 不记名令牌。仅在自定义标头模板中且仅在配置 OAuth 2.0客户端凭证时可用。

${orgId}

为其打开此警报的组织的唯一标识符。

${orgName}

为其打开此警报的组织名称。

${projectName}

为其打开此警报的项目(群组)的名称。

${replicaSetName}

副本集名称。

${requestId}

请求的唯一标识符。(默认 X-Mms-Request-Id 标头)。

${resolved}

警报关闭时采用 ISO 8601 日期和时间格式(UTC 时间)的时间戳。

${signature}

请求签名,仅在标头模板中可用。(默认 X-Mms-Signature 标头)。

${status}

警报的当前省/市/自治区 (TRACKING | OPEN | CLOSED | CANCELLED | INFORMATIONAL)

${sourceTypeName}

eventTypeName 时正在备份的托管类型:BACKUP

${tags}

正在为此警报设置标识标签。

${updated}

上次更新警报时采用 ISO 8601 日期和时间格式(UTC 时间)的时间戳。

注意

自定义标头模板将替换默认的Webhook 标头。如果配置 OAuth 2.0客户端凭证并使用自定义标头模板,请将 "Authorization": "Bearer ${oauthToken}" 添加到模板以发送不记名令牌。要学习;了解更多信息,请参阅对 Webhook 请求进行身份验证。

此外,还提供了一个自定义辅助工具,即 re 辅助工具,它允许您使用正则表达式从模板内的文本中提取数据。

  • re.group(input, regex, group)

    从第一个匹配中返回指定的捕获群组。如果没有匹配项,则返回空字符串。

    示例: ${re.group("abc-123", "([a-z]+)-(\\d+)", 2)} → 123

  • re.findAllGroup(input, regex, group)

    返回所有群组匹配项的列表。

    示例:

    <#list re.findAllGroup("error1:12;error2:98;error3:33", "error\\d+:(\\d+)", 1) as val>${val} </#list>

    输出: 12 98 33

注意

群组索引基于 1。如果未找到匹配项,则返回空字符串或空列表。

{ "X-Static": "static-value", "X-Secret": "${signature}", "X-Request-Id": "${requestId}", "X-Event": "${event}", "X-Org-Name": "${orgName!''}", "X-Test-Regex-Helper": "${re.group(\"abc-123\", \"([a-z]+)-(\\d+)\", 2)}"}
{ "staticValue": "This value is static", "testRegexHelper": [ <#list re.findAllGroup("error1:12;error2:98;error3:33", "error\\d+:(\\d+)", 1) as val> "${val}"<#if val_has_next>,</#if></#list> ], "replicaSetName": "${replicaSetName!''}", "metricName": "${metricName!''}", "orgName": "${orgName!''}", "created": "${created!''}", "groupId": "${groupId!''}", "hostId": "${hostId!''}", "hostnameAndPort": "${hostnameAndPort!''}", "humanReadable": "${humanReadable?js_string}", "orgId": "${orgId!''}", "alertConfigId": "${alertConfigId!''}", "eventTypeName": "${eventTypeName!''}", "links": [ <#list links![] as link> { "rel": "${link.rel!''}", "href": "${link.href!''}" }<#if link_has_next>,</#if> </#list> ], "id": "${id!''}", "projectName": "${projectName!''}", "updated": "${updated!''}", "currentValue": { "number": ${(currentValue.number)!0}, "units": "${(currentValue.units)!''}" }, "status": "${status!''}"}

配置 Webhook 模板后,可以使用警报配置界面中的 Test Alert 按钮进行测试。这会发送包含示例数据的测试通知,以验证模板是否正确渲染。