Delen via


Azure Service Health-waarschuwingen verzenden met ServiceNow met behulp van webhooks

In dit artikel leest u hoe u Azure Service Health-waarschuwingen integreert met ServiceNow met behulp van een webhook. Nadat u webhookintegratie met uw ServiceNow-exemplaar hebt ingesteld, ontvangt u waarschuwingen via uw bestaande meldingsinfrastructuur wanneer problemen met de Azure-service van invloed zijn op u. Telkens wanneer een Azure Service Health-waarschuwing wordt geactiveerd, wordt er een webhook aangeroepen via de ServiceNow Scripted REST API.

Een script-REST API maken in ServiceNow

  1. Zorg ervoor dat u zich hebt geregistreerd en bent aangemeld bij uw ServiceNow-account .

  2. Navigeer naar de sectie Systeemwebservices in ServiceNow en selecteer Scripted REST API's.

    De sectie 'Scripted Web Service' in ServiceNow

  3. Selecteer Nieuw om een nieuwe scripted REST-service te maken.

    De knop 'Nieuwe scripted REST API' in ServiceNow

  4. Voeg een naam toe aan uw REST API en stel de API-id in op azureservicehealth.

  5. Selecteer Indienen.

    De 'REST API-instellingen' in ServiceNow

  6. Selecteer de REST API die u hebt gemaakt en selecteer onder het tabblad Resources de optie Nieuw.

    Het tabblad Resource in ServiceNow

  7. Geef uw nieuwe resource event een naam en wijzig de HTTP-methode in POST.

  8. Voeg in de sectie Script de volgende JavaScript-code toe:

    Notitie

    U moet het en<group><email> de <secret>waarde in het onderstaande script bijwerken.

    • <secret> moet een willekeurige tekenreeks zijn, zoals een GUID
    • <group> moet de ServiceNow-groep zijn waaraan u het incident wilt toewijzen
    • <email> moet de specifieke persoon zijn aan wie u het incident wilt toewijzen (optioneel)
    (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);
    
  9. Schakel op het tabblad Beveiliging de optie Verificatie vereist uit en selecteer Verzenden. De <secret> door u ingestelde api beveiligt in plaats daarvan.

    Het selectievakje Verificatie vereist in ServiceNow

  10. Terug in de sectie Scripted REST API's vindt u het basis-API-pad voor uw nieuwe REST API:

    Het 'Basis-API-pad' in ServiceNow

  11. Uw volledige integratie-URL ziet er als volgt uit:

    https://<yourInstanceName>.service-now.com/<baseApiPath>?apiKey=<secret>
    

Een waarschuwing maken met Behulp van ServiceNow in Azure Portal

Voor een nieuwe actiegroep:

  1. Volg stap 1 tot en met 8 in dit artikel om een waarschuwing te maken met een nieuwe actiegroep.

  2. Definiƫren in de lijst met acties:

    a. Actietype: Webhook

    b. Details: de ServiceNow-integratie-URL die u eerder hebt opgeslagen.

    c. Naam: de naam, alias of id van de webhook.

  3. Selecteer Opslaan wanneer u klaar bent om de waarschuwing te maken.

Voor een bestaande actiegroep:

  1. Selecteer Monitor in Azure Portal.

  2. Selecteer actiegroepen in de sectie Instellingen.

  3. Zoek en selecteer de actiegroep die u wilt bewerken.

  4. Toevoegen aan de lijst met acties:

    a. Actietype: Webhook

    b. Details: de ServiceNow-integratie-URL die u eerder hebt opgeslagen.

    c. Naam: de naam, alias of id van de webhook.

  5. Selecteer Opslaan wanneer u klaar bent om de actiegroep bij te werken.

Uw webhookintegratie testen via een HTTP POST-aanvraag

  1. Maak de nettolading van de servicestatus die u wilt verzenden. U vindt een voorbeeld van een webhooklading voor servicestatus in Webhooks voor waarschuwingen voor azure-activiteitenlogboeken.

  2. Maak als volgt een HTTP POST-aanvraag:

    POST        https://<yourInstanceName>.service-now.com/<baseApiPath>?apiKey=<secret>
    
    HEADERS     Content-Type: application/json
    
    BODY        <service health payload>
    
  3. U ontvangt een 200 OK reactie met het bericht 'Incident gemaakt'.

  4. Ga naar ServiceNow om te bevestigen dat uw integratie is ingesteld.

Volgende stappen