Udostępnij za pośrednictwem


Wysyłanie alertów usługi Azure Service Health za pomocą usługi ServiceNow przy użyciu elementów webhook

W tym artykule pokazano, jak zintegrować alerty usługi Azure Service Health z usługą ServiceNow przy użyciu elementu webhook. Po skonfigurowaniu integracji elementu webhook z wystąpieniem usługi ServiceNow otrzymasz alerty za pośrednictwem istniejącej infrastruktury powiadomień, gdy wystąpią problemy z usługą platformy Azure. Za każdym razem, gdy alert usługi Azure Service Health jest wyzwalany, wywołuje element webhook za pośrednictwem interfejsu API REST skryptu usługi ServiceNow.

Tworzenie skryptowego interfejsu API REST w usłudze ServiceNow

  1. Upewnij się, że masz konto i zalogowano się do konta usługi ServiceNow .

  2. Przejdź do sekcji System Web Services w usłudze ServiceNow i wybierz pozycję Skryptowe interfejsy API REST.

    Sekcja

  3. Wybierz pozycję Nowy , aby utworzyć nową usługę REST ze skryptami.

    Przycisk

  4. Dodaj nazwę do interfejsu API REST i ustaw identyfikator interfejsu API na azureservicehealthwartość .

  5. Wybierz Prześlij.

    Ustawienia interfejsu API REST w usłudze ServiceNow

  6. Wybierz utworzony interfejs API REST, a następnie na karcie Zasoby wybierz pozycję Nowy.

    Karta

  7. Nadaj nowemu zasobowi nazwę i zmień metodę HTTP na POST.event

  8. W sekcji Skrypt dodaj następujący kod JavaScript:

    Uwaga

    Musisz zaktualizować wartość <secret><group>, i <email> w poniższym skry skrycie.

    • <secret> powinien być losowym ciągiem, na przykład identyfikatorem GUID
    • <group> powinna być grupą usługi ServiceNow, do której chcesz przypisać zdarzenie
    • <email> powinna być konkretną osobą, do której chcesz przypisać zdarzenie (opcjonalnie)
    (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. Na karcie Zabezpieczenia usuń zaznaczenie pola wyboru Wymaga uwierzytelniania i wybierz pozycję Prześlij. Zestaw <secret> chroni ten interfejs API.

    Pole wyboru

  10. Wróć do sekcji Skryptowe interfejsy API REST, aby znaleźć podstawową ścieżkę interfejsu API dla nowego interfejsu API REST:

  11. Pełny adres URL integracji wygląda następująco:

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

Tworzenie alertu przy użyciu usługi ServiceNow w witrynie Azure Portal

Dla nowej grupy akcji:

  1. Wykonaj kroki od 1 do 8 w tym artykule , aby utworzyć alert z nową grupą akcji.

  2. Zdefiniuj na liście akcji:

    a. Typ akcji: element webhook

    b. Szczegóły: wcześniej zapisany adres URL integracji usługi ServiceNow.

    c. Nazwa: nazwa elementu webhook, alias lub identyfikator.

  3. Wybierz pozycję Zapisz po zakończeniu, aby utworzyć alert.

Dla istniejącej grupy akcji:

  1. W witrynie Azure Portal wybierz pozycję Monitoruj.

  2. W sekcji Ustawienia wybierz pozycję Grupy akcji.

  3. Znajdź i wybierz grupę akcji, którą chcesz edytować.

  4. Dodaj do listy akcji:

    a. Typ akcji: element webhook

    b. Szczegóły: wcześniej zapisany adres URL integracji usługi ServiceNow.

    c. Nazwa: nazwa elementu webhook, alias lub identyfikator.

  5. Wybierz pozycję Zapisz po zakończeniu, aby zaktualizować grupę akcji.

Testowanie integracji elementu webhook za pośrednictwem żądania HTTP POST

  1. Utwórz ładunek kondycji usługi, który chcesz wysłać. Przykładowy ładunek elementu webhook kondycji usługi można znaleźć w sekcji Elementy webhook dla alertów dziennika aktywności platformy Azure.

  2. Utwórz żądanie HTTP POST w następujący sposób:

    POST        https://<yourInstanceName>.service-now.com/<baseApiPath>?apiKey=<secret>
    
    HEADERS     Content-Type: application/json
    
    BODY        <service health payload>
    
  3. Powinna zostać wyświetlona 200 OK odpowiedź z komunikatem "Zdarzenie utworzone".

  4. Przejdź do usługi ServiceNow , aby potwierdzić, że integracja została pomyślnie skonfigurowana.

Następne kroki