Пользовательское тело json в оповещениях Grafana - PullRequest
1 голос
/ 13 июня 2019

Я пытаюсь заставить графану автоматически поднять билет в ServiceNow, если сработало оповещение.

Я смотрю на использование канала оповещения webhook для этого, но проблема в том, что для этого мне нужно отправить собственное тело с некоторыми жестко закодированными значениями или servicenow отклонит вызов.

Есть ли способ настроить тело, отправляемое с помощью webhook?

1 Ответ

1 голос
/ 15 июня 2019

Это легко сделать, если вы используете платформу маршрутизации webhook (например, Pipedream или аналогичную).Вы создаете конечную точку для приема запросов webhook от Grafana, изменяете тело и перенаправляете запрос в конечную точку ServiceNow.

Я создал пример конвейера , который показывает, как это работает.Он берет пример события (я нашел его в 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
    }
  ]
}

Я использую URL RequestBin, чтобы вы могли видеть изменяемое тело ( здесь - это корзина ).

Вот разница для события:

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

Если вы нажмете на конвейер выше, он должен сгенерировать пользовательский URL, специфичный для вашего конвейера.Он предоставит URL-адрес конечной точки, который вы в конечном итоге зададите в качестве получателя веб-крюка для Grafana, и вы должны начать видеть новые события.

Это предполагает, что ваш URL-адрес веб-крюка ServiceNow является общедоступным.Весь код для конвейеров Pipedream является общедоступным, поэтому, если вы хотите сохранить свою конечную точку частной, вы можете создать переменную среды и сослаться на нее в коде Node.js, заменив URL-адрес RequestBin значением этой переменной среды.

Например, я могу создать переменную среды SERVICENOW_ENDPOINT и заменить:

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

на

url: process.env.SERVICENOW_ENDPOINT

Дайте мне знать, если это поможет или у вас есть другие вопросы.

...