Отправка оповещений о работоспособности служб Azure для ServiceNow с помощью веб-перехватчиков
В этой статье показано, как с помощью веб-перехватчика интегрировать ServiceNow с оповещениями о работоспособности служб Azure. Если вы настроите интеграцию веб-перехватчика с экземпляром ServiceNow, в вашу привычную среду уведомлений будут поступать оповещения о проблемах со службами Azure, которые могут вас затронуть. Каждый раз, когда оповещение о работоспособности службы Azure запускает веб-перехватчик через REST API ServiceNow Scripted.
Создание REST API на основе скриптов в ServiceNow
Убедитесь, что у вас есть учетная запись ServiceNow и выполните вход в нее.
Перейдите к разделу System Web Services (Системные веб-службы) в ServiceNow и выберите элемент Scripted REST APIs (REST API на основе скриптов).
Выберите действие Создать, чтобы создать новую службу REST на основе скриптов.
Укажите Имя нового REST API и установите для параметра Идентификатор API значение
azureservicehealth
.Выберите Отправить.
Выберите только что созданный REST API и на вкладке Ресурсы выберите Создать.
В поле Имя для нового ресурса введите
event
, а для параметра Метод HTTP укажите значениеPOST
.В разделе Скрипт добавьте следующий код JavaScript.
Примечание.
В приведенном ниже скрипте следует изменить значения параметров
<secret>
,<group>
и<email>
.<secret>
должен содержать произвольную строку, например уникальный идентификатор.<group>
должен обозначать группу ServiceNow, которой вы хотите назначить этот инцидент.<email>
должен обозначать конкретного пользователя, которому вы хотите назначить этот инцидент (необязательно).
(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) { var apiKey = request.queryParams['apiKey']; var secret = '<secret>'; if (apiKey == secret) { var event = request.body.data; var responseBody = {}; if (event.data.context.activityLog.operationName == 'Microsoft.ServiceHealth/incident/action') { var inc = new GlideRecord('incident'); var incidentExists = false; inc.addQuery('number', event.data.context.activityLog.properties.trackingId); inc.query(); if (inc.hasNext()) { incidentExists = true; inc.next(); } else { inc.initialize(); } var short_description = "Azure Service Health"; if (event.data.context.activityLog.properties.incidentType == "Incident") { short_description += " - Service Issue - "; } else if (event.data.context.activityLog.properties.incidentType == "Maintenance") { short_description += " - Planned Maintenance - "; } else if (event.data.context.activityLog.properties.incidentType == "Informational" || event.data.context.activityLog.properties.incidentType == "ActionRequired") { short_description += " - Health Advisory - "; } short_description += event.data.context.activityLog.properties.title; inc.short_description = short_description; inc.description = event.data.context.activityLog.properties.communication; inc.work_notes = "Impacted subscription: " + event.data.context.activityLog.subscriptionId; if (incidentExists) { if (event.data.context.activityLog.properties.stage == 'Active') { inc.state = 2; } else if (event.data.context.activityLog.properties.stage == 'Resolved') { inc.state = 6; } else if (event.data.context.activityLog.properties.stage == 'Closed') { inc.state = 7; } inc.update(); responseBody.message = "Incident updated."; } else { inc.number = event.data.context.activityLog.properties.trackingId; inc.state = 1; inc.impact = 2; inc.urgency = 2; inc.priority = 2; inc.assigned_to = '<email>'; inc.assignment_group.setDisplayValue('<group>'); var subscriptionId = event.data.context.activityLog.subscriptionId; var comments = "Azure portal Link: https://app.azure.com/h"; comments += "/" + event.data.context.activityLog.properties.trackingId; comments += "/" + subscriptionId.substring(0, 3) + subscriptionId.slice(-3); var impactedServices = JSON.parse(event.data.context.activityLog.properties.impactedServices); var impactedServicesFormatted = ""; for (var i = 0; i < impactedServices.length; i++) { impactedServicesFormatted += impactedServices[i].ServiceName + ": "; for (var j = 0; j < impactedServices[i].ImpactedRegions.length; j++) { if (j != 0) { impactedServicesFormatted += ", "; } impactedServicesFormatted += impactedServices[i].ImpactedRegions[j].RegionName; } impactedServicesFormatted += "\n"; } comments += "\n\nImpacted Services:\n" + impactedServicesFormatted; inc.comments = comments; inc.insert(); responseBody.message = "Incident created."; } } else { responseBody.message = "Hello from the other side!"; } response.setBody(responseBody); } else { var unauthorized = new sn_ws_err.ServiceError(); unauthorized.setStatus(401); unauthorized.setMessage('Invalid apiKey'); response.setError(unauthorized); } })(request, response);
На вкладке "Безопасность" снимите флажки Требуется проверка подлинности и щелкните Отправить. Вместо проверки подлинности защиту этого API обеспечит настроенный вами
<secret>
.Вернитесь в раздел "REST API на основе скриптов", где указан параметр Base API Path (Базовый путь к API) для нового REST API.
Полный URL-адрес интеграции выглядит следующим образом.
https://<yourInstanceName>.service-now.com/<baseApiPath>?apiKey=<secret>
Создание предупреждения для ServiceNow на портале Azure
Для новой группы действий сделайте следующее.
Выполните шаги с 1 по 8, описанные в этой статье, чтобы создать предупреждение в новой группе действий.
В списке Действия определите следующие сведения.
a. Тип действия: веб-перехватчик
b. Подробности.URL-адрес интеграции для ServiceNow, который вы сохранили ранее.
c. Имя: имя, псевдоним или идентификатор веб-перехватчика.
Завершив создание оповещения, нажмите кнопку Сохранить.
Для существующей группы действий сделайте следующее.
На портале Azure выберите Монитор.
В разделе Параметры выберите Группы действий.
Найдите и выберите группу действий, для которой нужно изменить сведения.
В список Действия добавьте следующие сведения.
a. Тип действия: веб-перехватчик
b. Подробности.URL-адрес интеграции для ServiceNow, который вы сохранили ранее.
c. Имя: имя, псевдоним или идентификатор веб-перехватчика.
Завершив изменение группы действий, нажмите кнопку Сохранить.
Проверка интеграции с веб-перехватчиком с помощью запроса HTTP POST
Создайте полезные данные о работоспособности служб, которые хотите отправить. Пример полезных данных для веб-перехватчика службы работоспособности служб см. в статье Веб-перехватчики для оповещений журнала действий Azure.
Создайте запрос HTTP POST следующим образом:
POST https://<yourInstanceName>.service-now.com/<baseApiPath>?apiKey=<secret> HEADERS Content-Type: application/json BODY <service health payload>
Вы должны получить ответ
200 OK
с сообщением "Incident created" (Инцидент создан).Откройте ServiceNow и убедитесь, что интеграция настроена успешно.
Следующие шаги
- Узнайте, как настроить уведомления веб-перехватчика для существующих систем управления проблемами.
- Просмотрите схему веб-перехватчика оповещений журнала действий в статье Объекты webhook для оповещений журнала действий Azure.
- Дополнительные сведения об уведомлениях о работоспособности службы см. в этой статье.
- Дополнительные сведения о группах действий см. в статье Создание групп действий и управление ими на портале Azure.