Enviar alertas de integridade do serviço do Azure com o ServiceNow usando webhooks
Este artigo mostra como integrar alertas de integridade do serviço do Azure com o ServiceNow usando um webhook. Depois de configurar a integração do webhook com sua instância ServiceNow, você recebe alertas por meio de sua infraestrutura de notificação existente quando problemas de serviço do Azure o afetam. Sempre que um alerta de Integridade do Serviço do Azure é acionado, ele chama um webhook por meio da API REST com script do ServiceNow.
Criando uma API REST com script no ServiceNow
Certifique-se de que se inscreveu e iniciou sessão na sua conta ServiceNow .
Navegue até a seção Serviços Web do Sistema no ServiceNow e selecione APIs REST com script.
Selecione Novo para criar um novo serviço REST com script.
Adicione um Nome à sua API REST e defina o ID da API como
azureservicehealth
.Selecione Submeter.
Selecione a API REST que você criou e, na guia Recursos , selecione Novo.
Nomeie seu novo recurso
event
e altere o método HTTP paraPOST
.Na seção Script, adicione o seguinte código JavaScript:
Nota
Você precisa atualizar o
<secret>
,<group>
, e<email>
valor no script abaixo.<secret>
deve ser uma cadeia de caracteres aleatória, como um GUID<group>
deve ser o grupo ServiceNow ao qual você deseja atribuir o incidente<email>
deve ser a pessoa específica à qual você deseja atribuir o incidente (opcional)
(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);
Na guia segurança, desmarque Requer autenticação e selecione Enviar. Em vez disso, o
<secret>
conjunto você protege essa API.De volta à seção APIs REST com script, você deve encontrar o caminho da API base para sua nova API REST:
O URL de integração completo tem a seguinte aparência:
https://<yourInstanceName>.service-now.com/<baseApiPath>?apiKey=<secret>
Criar um alerta usando ServiceNow no portal do Azure
Para um novo grupo de ação:
Siga as etapas 1 a 8 neste artigo para criar um alerta com um novo grupo de ações.
Defina na lista de Ações:
a. Tipo de ação: Webhook
b. Detalhes: A URL de integração ServiceNow que você salvou anteriormente.
c. Nome: nome, alias ou identificador do Webhook.
Selecione Salvar quando terminar para criar o alerta.
Para um grupo de ação existente:
No portal do Azure, selecione Monitor.
Na seção Configurações, selecione Grupos de ações.
Localize e selecione o grupo de ações que deseja editar.
Adicionar à lista de Ações:
a. Tipo de ação: Webhook
b. Detalhes: A URL de integração ServiceNow que você salvou anteriormente.
c. Nome: nome, alias ou identificador do Webhook.
Selecione Salvar quando terminar para atualizar o grupo de ações.
Testando sua integração de webhook por meio de uma solicitação HTTP POST
Crie a carga útil de integridade do serviço que você deseja enviar. Você pode encontrar um exemplo de carga de webhook de integridade do serviço em Webhooks para alertas de log de atividades do Azure.
Crie uma solicitação HTTP POST da seguinte maneira:
POST https://<yourInstanceName>.service-now.com/<baseApiPath>?apiKey=<secret> HEADERS Content-Type: application/json BODY <service health payload>
Você deve receber uma
200 OK
resposta com a mensagem "Incidente criado".Vá para ServiceNow para confirmar que sua integração foi configurada com êxito.
Próximos passos
- Saiba como configurar notificações de webhook para sistemas de gerenciamento de problemas existentes.
- Revise o esquema de webhook de alerta de registro de atividades.
- Saiba mais sobre as notificações de integridade do serviço.
- Saiba mais sobre grupos de ação.