Dela via


Skicka Hälsoaviseringar för Azure-tjänsten med ServiceNow med hjälp av webhooks

Den här artikeln visar hur du integrerar Azure-tjänstens hälsoaviseringar med ServiceNow med hjälp av en webhook. När du har konfigurerat webhook-integrering med din ServiceNow-instans får du aviseringar via din befintliga meddelandeinfrastruktur när Problem med Azure-tjänsten påverkar dig. Varje gång en Azure Service Health-avisering utlöses anropas en webhook via SERVICENow Scripted REST API.

Skapa ett skriptat REST-API i ServiceNow

  1. Kontrollera att du har registrerat dig för och är inloggad på ditt ServiceNow-konto .

  2. Gå till avsnittet System Web Services i ServiceNow och välj Skriptade REST-API:er.

    Avsnittet

  3. Välj Ny för att skapa en ny skriptad REST-tjänst.

    Knappen

  4. Lägg till ett namn i rest-API:et och ange API-ID:t till azureservicehealth.

  5. Välj Skicka.

  6. Välj rest-API:et som du skapade och välj Nytt under fliken Resurser.

    Fliken Resurs i ServiceNow

  7. Namnge den nya resursen event och ändra HTTP-metoden till POST.

  8. I avsnittet Skript lägger du till följande JavaScript-kod:

    Kommentar

    Du måste uppdatera <secret>värdet ,<group>och <email> i skriptet nedan.

    • <secret> bör vara en slumpmässig sträng, som ett GUID
    • <group> ska vara den ServiceNow-grupp som du vill tilldela incidenten till
    • <email> bör vara den specifika person som du vill tilldela incidenten till (valfritt)
    (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. På fliken Säkerhet avmarkerar du Kräver autentisering och väljer Skicka. Du <secret> anger skyddar det här API:et i stället.

    Kryssrutan

  10. I avsnittet Skriptade REST-API:er hittar du den grundläggande API-sökvägen för ditt nya REST API:

  11. Din fullständiga integrations-URL ser ut så här:

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

Skapa en avisering med Hjälp av ServiceNow i Azure Portal

För en ny åtgärdsgrupp:

  1. Följ steg 1 till och med 8 i den här artikeln för att skapa en avisering med en ny åtgärdsgrupp.

  2. Definiera i listan över åtgärder:

    a. Åtgärdstyp: Webhook

    b. Information: Url:en för ServiceNow-integrering som du sparade tidigare.

    c. Namn: Webhooks namn, alias eller identifierare.

  3. Välj Spara när du är klar för att skapa aviseringen.

För en befintlig åtgärdsgrupp:

  1. I Azure Portal väljer du Övervaka.

  2. I avsnittet Inställningar väljer du Åtgärdsgrupper.

  3. Leta upp och välj den åtgärdsgrupp som du vill redigera.

  4. Lägg till i listan över åtgärder:

    a. Åtgärdstyp: Webhook

    b. Information: Url:en för ServiceNow-integrering som du sparade tidigare.

    c. Namn: Webhooks namn, alias eller identifierare.

  5. Välj Spara när du är klar för att uppdatera åtgärdsgruppen.

Testa webhook-integreringen via en HTTP POST-begäran

  1. Skapa nyttolasten för tjänstens hälsotillstånd som du vill skicka. Du hittar ett exempel på en webhook-nyttolast för tjänsthälsa på Webhooks för Azure-aktivitetsloggaviseringar.

  2. Skapa en HTTP POST-begäran enligt följande:

    POST        https://<yourInstanceName>.service-now.com/<baseApiPath>?apiKey=<secret>
    
    HEADERS     Content-Type: application/json
    
    BODY        <service health payload>
    
  3. Du bör få ett 200 OK svar med meddelandet "Incident skapad".

  4. Gå till ServiceNow för att bekräfta att integreringen har konfigurerats.

Nästa steg