Odesílání upozornění služby Azure Service Health pomocí ServiceNow pomocí webhooků
V tomto článku se dozvíte, jak integrovat upozornění služby Azure Service Health s ServiceNow pomocí webhooku. Po nastavení integrace webhooku s vaší instancí ServiceNow dostanete upozornění prostřednictvím stávající infrastruktury oznámení, když vás ovlivňují problémy se službou Azure. Pokaždé, když se aktivuje upozornění služby Azure Service Health, volá webhook prostřednictvím skriptovaného rozhraní REST API ServiceNow.
Vytvoření skriptovaného rozhraní REST API ve službě ServiceNow
Ujistěte se, že jste se zaregistrovali a jste přihlášení ke svému účtu ServiceNow .
Přejděte do části Systémové webové služby v ServiceNow a vyberte Skriptovaná rozhraní REST API.
Výběrem možnosti Nový vytvořte novou skriptovanou službu REST.
Přidejte do rozhraní REST API název a nastavte ID rozhraní API na
azureservicehealth
.Vyberte položku Odeslat.
Vyberte rozhraní REST API, které jste vytvořili, a na kartě Prostředky vyberte Nový.
Pojmenujte nový prostředek
event
a změňte metodu HTTP naPOST
.V části Skript přidejte následující kód JavaScriptu:
Poznámka:
Potřebujete aktualizovat
<secret>
<group>
hodnotu a<email>
hodnotu ve skriptu níže.<secret>
by měl být náhodný řetězec, například identifikátor GUID.<group>
by měla být skupina ServiceNow, ke které chcete incident přiřadit.<email>
by měla být konkrétní osoba, ke které chcete incident přiřadit (volitelné).
(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 kartě Zabezpečení zrušte zaškrtnutí políčka Vyžaduje ověření a vyberte Odeslat. Nastavené
<secret>
rozhraní API místo toho chrání.Zpátky v části Skriptovaná rozhraní REST API byste měli najít cestu základního rozhraní API pro nové rozhraní REST API:
Úplná adresa URL integrace vypadá takto:
https://<yourInstanceName>.service-now.com/<baseApiPath>?apiKey=<secret>
Vytvoření upozornění pomocí ServiceNow na webu Azure Portal
Pro novou skupinu akcí:
Podle kroků 1 až 8 v tomto článku vytvořte upozornění s novou skupinou akcí.
Definujte v seznamu akcí:
a. Typ akce: Webhook
b. Podrobnosti: Adresa URL integrace ServiceNow, kterou jste dříve uložili.
c. Název: Název, alias nebo identifikátor webhooku.
Výběrem možnosti Uložit po dokončení vytvořte upozornění.
Pro existující skupinu akcí:
Na webu Azure Portal vyberte Monitorovat.
V části Nastavení vyberte skupiny akcí.
Najděte a vyberte skupinu akcí, kterou chcete upravit.
Přidat do seznamu akcí:
a. Typ akce: Webhook
b. Podrobnosti: Adresa URL integrace ServiceNow, kterou jste dříve uložili.
c. Název: Název, alias nebo identifikátor webhooku.
Výběrem možnosti Uložit po dokončení aktualizujte skupinu akcí.
Testování integrace webhooku prostřednictvím požadavku HTTP POST
Vytvořte datovou část stavu služby, kterou chcete odeslat. Ukázkovou datovou část webhooku stavu služby najdete v webhoocích pro upozornění protokolu aktivit Azure.
Následujícím způsobem vytvořte požadavek HTTP POST:
POST https://<yourInstanceName>.service-now.com/<baseApiPath>?apiKey=<secret> HEADERS Content-Type: application/json BODY <service health payload>
Měli byste obdržet odpověď se zprávou
200 OK
"Incident byl vytvořen".Přejděte do ServiceNow a ověřte, že vaše integrace byla úspěšně nastavena.
Další kroky
- Zjistěte, jak nakonfigurovat oznámení webhooku pro stávající systémy správy problémů.
- Zkontrolujte schéma webhooku upozornění protokolu aktivit.
- Přečtěte si informace o oznámeních o stavu služby.
- Přečtěte si další informace o skupinách akcí.