Grafana警报中的自定义JSON正文

时间:2019-06-13 07:07:20

标签: grafana grafana-alerts

我正在尝试让grafana在发生警报时自动在ServiceNow中升票。

我正在为此目的使用webhook警报通道,但是问题是,要做到这一点,我需要发送带有一些硬编码值的自定义主体,或者servicenow拒绝该呼叫。

是否可以自定义通过Webhook发送的正文?

1 个答案:

答案 0 :(得分:1)

如果您使用Webhook路由平台(例如Pipedream或等效版本),这很容易做到。您创建一个端点来接受来自Grafana的webhook请求,修改主体,并将请求转发到ServiceNow端点。

我创建了一个example pipeline,向您展示了它是如何工作的。它采用了一个示例事件(我在grafana docs中找到了一个事件),并使用少量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,因此您可以看到正在修改的正文(here is the bin)。

这是事件的区别:

{
    body:{
       "new_data": "NEW VALUE HERE",
    },
}

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

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

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

url:'https://en1lkcjsapobv.x.pipedream.net'

使用

url:process.env.SERVICENOW_ENDPOINT

让我知道这是否有帮助,或者您还有其他问题。