Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как интегрировать оповещения о работоспособности служб Azure с ServiceNow с помощью веб-перехватчика. Если вы настроите интеграцию веб-перехватчика с экземпляром 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>должен быть произвольной строкой, например, как GUID (уникальный идентификатор). -
<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);-
На вкладке "Безопасность" снимите флажки Требуется проверка подлинности и щелкните Отправить. Настроенный вами
<secret>вместо этого защищает этот API.
Вернитесь в раздел "REST API на основе скриптов", где указан параметр Base API Path (Базовый путь к API) для нового REST API.
Полный URL-адрес интеграции выглядит следующим образом.
https://<yourInstanceName>.service-now.com/<baseApiPath>?apiKey=<secret>
Создание предупреждения для ServiceNow на портале Azure
Для новой группы действий сделайте следующее.
Выполните шаги 1–8 в группах действий и создайте оповещение с новой группой действий.
В списке Действия определите следующие сведения.
a. Тип действия:вебхук
б. Подробности.URL-адрес интеграции для ServiceNow, который вы сохранили ранее.
с. Имя: имя, псевдоним или идентификатор вебхука.
Завершив создание оповещения, нажмите кнопку Сохранить.
Для существующей группы действий сделайте следующее.
На портале Azure выберите Монитор.
В разделе Параметры выберите Группы действий.
Найдите и выберите группу действий, которую вы хотите изменить.
В список Действия добавьте следующие сведения.
a. Тип действия:вебхук
б. Подробности.URL-адрес интеграции для ServiceNow, который вы сохранили ранее.
с. Имя: имя, псевдоним или идентификатор веб-перехватчика.
Завершив изменение группы действий, нажмите кнопку Сохранить.
Проверка интеграции с вебхуком посредством 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 и убедитесь, что интеграция настроена успешно.
Следующие шаги
- Узнайте, как настроить уведомления вебхуков для существующих систем управления проблемами.
- Просмотрите схему веб-перехватчика оповещений журнала действий activity log alert webhook schema.
- Узнайте о уведомлениях о работоспособности службы.
- Узнайте больше о группах действий.
- Узнайте о часто задаваемых вопросах о работоспособности служб