View a markdown version of this page

Verbindung herstellen ServiceNow - AWS DevOps Agentin

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verbindung herstellen ServiceNow

In diesem Tutorial erfahren Sie, wie Sie eine ServiceNow Instanz mit dem AWS DevOps Agenten verbinden, damit dieser bei der Erstellung eines Tickets automatisch Untersuchungen zur Reaktion auf Vorfälle einleiten und die wichtigsten Ergebnisse im ursprünglichen Ticket veröffentlichen kann. Es enthält auch Beispiele dafür, wie Sie Ihre ServiceNow Instanz so konfigurieren, dass nur bestimmte Tickets an einen DevOps Agent Space gesendet werden, und wie Sie das Ticket-Routing über mehrere DevOps Agent Spaces hinweg orchestrieren.

Ersteinrichtung

Der erste Schritt besteht darin, ServiceNow einen OAuth-Anwendungsclient zu erstellen, mit dem Sie auf Ihre ServiceNow Instanz zugreifen AWS DevOps können.

Erstellen Sie einen ServiceNow OAuth-Anwendungsclient

  1. Aktivieren Sie die Systemeigenschaft für Client-Anmeldeinformationen Ihrer Instanz

    1. Suchen Sie sys_properties.list im Filter-Suchfeld und drücken Sie dann die Eingabetaste (die Option wird nicht angezeigt, aber das Drücken der Eingabetaste funktioniert)

    2. Wählen Sie „Neu“

    3. Fügen Sie den Namen als glide.oauth.inbound.client.credential.grant_type.enabled und den Wert zu true hinzu und geben Sie den Typ true | false ein

Das Formular mit den Systemeigenschaften zeigt, dass der Typ für die Gewährung eingehender OAuth-Anmeldeinformationen für Clients aktiviert ist.
  1. Navigieren Sie im Filtersuchfeld zu System OAuth > Anwendungsregistrierung

  2. Wählen Sie „Neu“ > „Neues Integrationserlebnis für eingehenden Datenverkehr“ > „Neue Integration“ > „OAuth — Client Credentials Grant“

  3. Wählen Sie einen Namen und setzen Sie den Benutzer der OAuth-Anwendung auf „Problem Administrator“ und klicken Sie auf „Speichern“

Neues Datensatzformular für OAuth-Client-Anmeldeinformationen mit Feldern für Name, Client-ID und Geheimnis.

Connect Sie Ihren ServiceNow OAuth-Client mit AWS DevOps Agent

  1. Sie können diesen Vorgang an zwei Stellen starten. Rufen Sie zunächst die Seite Capability Providers auf, suchen Sie ServiceNowunter Kommunikation und klicken Sie dann auf Registrieren. Alternativ können Sie einen beliebigen DevOps Agent-Bereich auswählen, den Sie möglicherweise erstellt haben, und zu Funktionen → Kommunikation → Hinzufügen → navigieren ServiceNow und auf Registrieren klicken.

  2. Autorisieren Sie als Nächstes den DevOps Agenten, mithilfe des OAuth-Anwendungsclients, den Sie gerade erstellt haben, auf Ihre ServiceNow Instanz zuzugreifen.

ServiceNow Registrierungsformular mit Feldern für Kundenname, Client-ID und Instanz-URL.
  • Folgen Sie den nächsten Schritten und speichern Sie die resultierenden Informationen über den Webhook

Wichtig

Sie werden diese Informationen nicht wieder sehen

Das Webhook-Konfigurationsfenster zeigt den Verbindungsstatus und die Webhook-URL an.

Konfigurieren Sie Ihre Geschäftsregel ServiceNow

Sobald Sie die Konnektivität hergestellt haben, müssen Sie eine Geschäftsregel konfigurieren ServiceNow , um Tickets an Ihre DevOps Agentenbereiche zu senden.

  1. Navigieren Sie zu Activity Subscriptions → Administration → Business Rules und klicken Sie auf Neu.

  2. Stellen Sie das Feld „Tabelle“ auf „Vorfall [Vorfall]“ ein, aktivieren Sie das Kästchen „Erweitert“ und legen Sie fest, dass die Regel nach Einfügen, Aktualisieren und Löschen ausgeführt wird.

Formular für Geschäftsregeln für die CloudSmith Integration in der Tabelle „Vorfall“.
  1. Navigieren Sie zur Registerkarte „Erweitert“ und fügen Sie das folgende Webhook-Skript hinzu, fügen Sie Ihr Webhook-Geheimnis und Ihre URL an der angegebenen Stelle ein und klicken Sie auf Senden.

(function executeRule(current, previous /*null when async*/ ) { var WEBHOOK_CONFIG = { webhookSecret: GlideStringUtil.base64Encode('<<< INSERT WEBHOOK SECRET HERE >>>'), webhookUrl: '<<< INSERT WEBHOOK URL HERE >>>' }; function generateHMACSignature(payloadString, secret) { try { var mac = new GlideCertificateEncryption(); var signature = mac.generateMac(secret, "HmacSHA256", payloadString); return signature; } catch (e) { gs.error('HMAC generation failed: ' + e); return null; } } function callWebhook(payload, config) { try { var timestamp = new Date().toISOString(); var payloadString = JSON.stringify(payload); var payloadWithTimestamp =`${timestamp}:${payloadString}`; var signature = generateHMACSignature(payloadWithTimestamp, config.webhookSecret); if (!signature) { gs.error('Failed to generate signature'); return false; } gs.info('Generated signature: ' + signature); var request = new sn_ws.RESTMessageV2(); request.setEndpoint(config.webhookUrl); request.setHttpMethod('POST'); request.setRequestHeader('Content-Type', 'application/json'); request.setRequestHeader('x-amzn-event-signature', signature); request.setRequestHeader('x-amzn-event-timestamp', timestamp); request.setRequestBody(payloadString); var response = request.execute(); var httpStatus = response.getStatusCode(); var responseBody = response.getBody(); if (httpStatus >= 200 && httpStatus < 300) { gs.info('Webhook sent successfully. Status: ' + httpStatus); return true; } else { gs.error('Webhook failed. Status: ' + httpStatus + ', Response: ' + responseBody); return false; } } catch (ex) { gs.error('Error sending webhook: ' + ex.getMessage()); return false; } } function createReference(field) { if (!field || field.nil()) { return null; } return { link: field.getLink(true), value: field.toString() }; } function getStringValue(field) { if (!field || field.nil()) { return null; } return field.toString(); } function getIntValue(field) { if (!field || field.nil()) { return null; } var val = parseInt(field.toString()); return isNaN(val) ? null : val; } var eventType = (current.operation() == 'insert') ? "create" : "update"; var incidentEvent = { eventType: eventType.toString(), sysId: current.sys_id.toString(), priority: getStringValue(current.priority), impact: getStringValue(current.impact), active: getStringValue(current.active), urgency: getStringValue(current.urgency), description: getStringValue(current.description), shortDescription: getStringValue(current.short_description), parent: getStringValue(current.parent), incidentState: getStringValue(current.incident_state), severity: getStringValue(current.severity), problem: createReference(current.problem), additionalContext: {} }; incidentEvent.additionalContext = { number: current.number.toString(), opened_at: getStringValue(current.opened_at), opened_by: current.opened_by.nil() ? null : current.opened_by.getDisplayValue(), assigned_to: current.assigned_to.nil() ? null : current.assigned_to.getDisplayValue(), category: getStringValue(current.category), subcategory: getStringValue(current.subcategory), knowledge: getStringValue(current.knowledge), made_sla: getStringValue(current.made_sla), major_incident: getStringValue(current.major_incident) }; for (var key in incidentEvent.additionalContext) { if (incidentEvent.additionalContext[key] === null) { delete incidentEvent.additionalContext[key]; } } gs.info(JSON.stringify(incidentEvent, null, 2)); // Pretty print for logging only if (WEBHOOK_CONFIG.webhookUrl && WEBHOOK_CONFIG.webhookSecret) { callWebhook(incidentEvent, WEBHOOK_CONFIG); } else { gs.info('Webhook not configured.'); } })(current, previous);

Wenn Sie sich dafür entschieden haben, Ihre ServiceNow Verbindung auf der Seite Capability Providers zu registrieren, müssen Sie jetzt zu dem DevOps Agentenbereich navigieren, in dem Sie ServiceNow Incident-Tickets untersuchen möchten, Capabilities → Communications auswählen und dann die ServiceNow Instance registrieren, die Sie auf der Capability Provider-Seite registriert haben. Jetzt sollte alles eingerichtet sein, und alle Vorfälle, bei denen der Anrufer auf „Problem Administrator“ eingestellt ist (um die Berechtigungen nachzuahmen, die Sie dem AWS DevOps OAuth-Client erteilt haben), lösen im konfigurierten Agent Space eine Incident-Response-Untersuchung aus. DevOps Sie können dies testen, indem Sie einen neuen Incident erstellen ServiceNow und das Anrufer-Feld des Incidents auf „Problem Administrator“ setzen.

ServiceNow Vorfallformular mit der Nummer INC0010001 und dem Anrufer des Problemadministrators.

ServiceNow Ticketaktualisierungen

Während aller Untersuchungen zur Reaktion auf Vorfälle aktualisiert DevOps Ihr Mitarbeiter die wichtigsten Ergebnisse, Ursachenanalysen und Pläne zur Schadensbegrenzung in das ursprüngliche Ticket. Die Ergebnisse des Sachbearbeiters werden in den Kommentaren zu einem Vorfall veröffentlicht. Derzeit veröffentlichen wir nur Agentendatensätze vom Typfinding,, cause investigation_summarymitigation_summary, und Aktualisierungen zum Ermittlungsstatus (z. B.AWS DevOps Agent started/finished its investigation).

Beispiele für die Weiterleitung und Orchestrierung von Tickets

Szenario: Filtern, welche Incidents an einen DevOps Agent Space gesendet werden

Dies ist ein einfaches Szenario, für das jedoch einige Konfigurationen erforderlich sind ServiceNow , um ein Feld zur Nachverfolgung der Vorfallquelle ServiceNow zu erstellen. Für dieses Beispiel erstellen Sie mit dem SNOW Form Builder ein neues Quellfeld (u_source). Auf diese Weise können Sie die Quelle des Vorfalls nachverfolgen und anhand dieser Informationen Anfragen von einer bestimmten Quelle an einen DevOps Agent Space weiterleiten. Die Weiterleitung erfolgt, indem eine Service Now-Geschäftsregel erstellt wird und auf der Registerkarte „Wann ausgeführt“ die Einstellungen „Wann“ und „Filterbedingungen“ ausgelöst werden. In diesem Beispiel sind die Filterbedingungen wie folgt festgelegt:

Wann sollte die Registerkarte mit vor dem Trigger ausgeführt werden, und der Filter für Source enthält Dynatrace.

Szenario: Weiterleitung von Vorfällen über mehrere Agent Spaces DevOps

Dieses Beispiel zeigt, wie eine Untersuchung in DevOps Agent Space B ausgelöst wird, wenn die Dringlichkeit1, Kategorie oder Service istAWS, und eine Untersuchung in DevOps Agent Space A ausgelöst wirdAWS, wenn der Service und die Quelle istDynatrace. Software

Dieses Szenario kann auf zwei Arten erreicht werden. Das Webhook-Skript selbst kann aktualisiert werden, um diese Geschäftslogik einzubeziehen. In diesem Szenario werden wir zeigen, wie dies mit einer ServiceNow Geschäftsregel erreicht werden kann, um Transparenz zu gewährleisten und das Debuggen zu vereinfachen. Das Routing erfolgt durch die Erstellung von zwei Service Now-Geschäftsregeln.

  • Erstellen Sie eine Geschäftsregel ServiceNow für DevOps Agent Space A und erstellen Sie mithilfe des Condition Builders eine Bedingung, sodass nur Ereignisse gesendet werden, die auf unserer angegebenen Bedingung basieren.

Formular zur Konfiguration von Geschäftsregeln mit Filterbedingungen für Dringlichkeit und Kategorie.
  • Erstellen Sie als Nächstes eine weitere Geschäftsregel in ServiceNow für AgentSpace B, für die die Geschäftsregel nur ausgelöst wird, wenn Service aktiviert ist AWS und die Quelle Dynatrace ist.

Formular zur Konfiguration von Geschäftsregeln zum Senden von Ereignissen an Agent Space B.

Wenn Sie nun einen neuen Incident erstellen, der der angegebenen Bedingung entspricht, löst er entweder eine Untersuchung in DevOps Agent Space A oder DevOps Agent Space B aus, sodass Sie eine genaue Kontrolle über die Weiterleitung von Vorfällen haben.