Envoyer des alertes Azure Service Health avec ServiceNow à l’aide de webhooks
Cet article vous explique comment intégrer les alertes sur l’intégrité du service Azure avec ServiceNow à l’aide d’un Webhook. Après avoir configuré l’intégration de Webhook avec votre instance ServiceNow, vous obtenez des alertes via votre infrastructure de notification existante lorsque des problèmes liés au service Azure vous affectent. Chaque fois qu’une alerte Azure Service Health se déclenche, celle-ci appelle un Webhook via l’API REST de script ServiceNow.
Création d’une API REST de script dans ServiceNow
Vérifiez que vous êtes inscrit et connecté à votre compte ServiceNow.
Accédez à la section Services web du système dans ServiceNow, puis sélectionnez API REST de script.
Sélectionnez Nouveau pour créer un service REST de script.
Ajoutez un nom à votre API REST et définissez l’ID de l’API sur
azureservicehealth
.Sélectionnez Soumettre.
Sélectionnez l’API REST créée, puis, sous l’onglet Ressources sélectionnez Nouveau.
Nommez votre nouvelle ressource
event
et modifiez la méthode HTTP pour la faire passer àPOST
.Dans la section Script, ajoutez le code JavaScript suivant :
Remarque
Vous devez mettre à jour les valeurs
<secret>
,<group>
et<email>
dans le script ci-dessous.<secret>
doit être une chaîne aléatoire, comme un GUID<group>
doit être le groupe ServiceNow auquel vous voulez attribuer l’incident<email>
doit être la personne spécifique à laquelle vous voulez attribuer l’incident (facultatif)
(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);
Dans l’onglet sécurité, décochez la case Authentification requise et sélectionnez Envoyer. Le
<secret>
défini protège cette API.Lorsque vous revenez à la section de l’API REST de script, vous devez rechercher le chemin d’accès à l’API de base pour votre nouvelle API REST :
Votre URL d’intégration complète ressemble à ce qui suit :
https://<yourInstanceName>.service-now.com/<baseApiPath>?apiKey=<secret>
Créer une alerte à l’aide de ServiceNow dans le portail Azure
Pour un nouveau groupe d’action :
Suivez les étapes 1 à 8 de cet article pour créer une alerte avec un nouveau groupe d’actions.
À définir dans la liste des Actions :
a. Type d’action : Webhook
b. Détails :URL d’intégration ServiceNow précédemment enregistrée.
c. Nom : nom, alias ou identificateur du Webhook.
Quand vous avez terminé, sélectionnez Enregistrer pour créer l’alerte.
Pour un groupe d’actions existant :
Dans le portail Azure, sélectionnez Moniteur.
Dans la section Paramètres, sélectionnez Groupes d’actions.
Recherchez et sélectionnez le groupe d’actions que vous souhaitez modifier.
À ajouter à la liste des Actions :
a. Type d’action : Webhook
b. Détails :URL d’intégration ServiceNow précédemment enregistrée.
c. Nom : nom, alias ou identificateur du Webhook.
Quand vous avez terminé, sélectionnez Enregistrer pour mettre à jour le groupe d’actions.
Tester l’intégration à Webhook via une demande HTTP POST
Créez la charge utile d’intégrité du service que vous souhaitez envoyer. Vous trouverez un exemple de charge utile du Webhook d’intégrité du service dans la page Webhook pour des alertes du journal d’activité Azure.
Créez une requête HTTP POST comme suit :
POST https://<yourInstanceName>.service-now.com/<baseApiPath>?apiKey=<secret> HEADERS Content-Type: application/json BODY <service health payload>
Vous devez recevoir une réponse
200 OK
avec le message indiquant que l’incident est créé.Accédez à ServiceNow pour confirmer que votre intégration a été définie avec succès.
Étapes suivantes
- Découvrez comment configurer des notifications de Webhook pour les systèmes de gestion de problème existants.
- Consultez le schéma webhook des alertes de journal d’activité.
- En savoir plus sur les notifications sur l’intégrité du service.
- En savoir plus sur les groupes d’actions.