Grafana 警报中的自定义 json 正文

Ste*_*eve 5 grafana grafana-alerts

如果触发警报,我试图让 grafana 自动在 ServiceNow 中提出票证。

我正在考虑使用 webhook 警报通道来实现此目的,但问题是,为了能够执行此操作,我需要发送带有一些硬编码值的自定义正文,否则 servicenow 会拒绝调用。

有没有办法自定义通过 webhook 发送的正文?

mav*_*dev 3

如果您使用 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
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我使用的是 RequestBin URL,这样您就可以看到正在修改的正文(这里是 bin)。

这是该事件的差异:

{
    body:{
       "new_data": "NEW VALUE HERE",
    },
}
Run Code Online (Sandbox Code Playgroud)

如果您单击上面的管道,它应该会生成特定于您的管道的自定义 URL。它将提供一个端点 URL,您最终将其设置为 Grafana 的 Webhook 接收器,并且您应该开始看到新的事件通过。

这假设您的 ServiceNow Webhook URL 是可公开访问的。Pipedream 管道的所有代码都是公共的,因此如果您想将端点保持私有,您可以创建一个环境变量并在 Node.js 代码中引用该变量,将 RequestBin URL 替换为该环境变量的值。

例如,我可以创建一个名为 SERVICENOW_ENDPOINT 的环境变量并替换:

网址:' https://en1lkcjsapobv.x.pipedream.net '

网址:process.env.SERVICENOW_ENDPOINT

如果这有帮助或者您有任何其他问题,请告诉我。