如果触发警报,我正在尝试让 grafana 在 ServiceNow 中自动提出票证。
我正在考虑为此使用 webhook 警报通道,但问题是为了能够做到这一点,我需要发送一个带有一些硬编码值的自定义正文,否则 servicenow 会拒绝呼叫。
有没有办法自定义随 webhook 发送的正文?
如果触发警报,我正在尝试让 grafana 在 ServiceNow 中自动提出票证。
我正在考虑为此使用 webhook 警报通道,但问题是为了能够做到这一点,我需要发送一个带有一些硬编码值的自定义正文,否则 servicenow 会拒绝呼叫。
有没有办法自定义随 webhook 发送的正文?
如果您使用 webhook 路由平台(例如 Pipedream 或同等产品),这很容易做到。您创建一个端点来接受来自 Grafana 的 webhook 请求,修改正文并将请求转发到您的 ServiceNow 端点。
我创建了一个示例管道,向您展示了它是如何工作的。它采用一个示例事件(我在grafana 文档中找到了一个),并使用一些 Node.js 代码来修改正文,然后将请求转发到另一个 HTTP 端点。
这是示例事件:
{
"title": "My alert",
"ruleId": 1,
"ruleName": "Load peaking!",
"ruleUrl": "http://url.to.grafana/db/dashboard/my_dashboard?panelId=2",
"state": "alerting",
"imageUrl": "http://s3.image.url",
"message": "Load is peaking. Make sure the traffic is real and spin up more webfronts",
"evalMatches": [
{
"metric": "requests",
"tags": {},
"value": 122
}
]
}
我正在使用 RequestBin URL,因此您可以看到正在修改的正文(这里是 bin)。
这是事件的差异:
{
body:{
"new_data": "NEW VALUE HERE",
},
}
如果您单击上面的管道,它应该会生成一个特定于您的管道的自定义 URL。它将提供一个端点 URL,您最终将其设置为 Grafana 的 webhook 接收器,您应该开始看到新事件的出现。
这假设您的 ServiceNow webhook URL 是可公开访问的。Pipedream 管道的所有代码都是公开的,因此如果您想保持端点私有,您可以创建一个环境变量并在 Node.js 代码中引用它,将 RequestBin URL 替换为该环境变量的值。
例如,我可能会创建一个名为 SERVICENOW_ENDPOINT 的环境变量并替换:
网址:' https ://en1lkcjsapobv.x.pipedream.net '
和
网址:process.env.SERVICENOW_ENDPOINT
让我知道这是否有帮助或您有任何其他问题。