View a markdown version of this page

Connessione ServiceNow - AWS DevOps Agente

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Connessione ServiceNow

Questo tutorial illustra come connettere un' ServiceNow istanza all' AWS DevOps agente per consentirgli di avviare automaticamente le indagini sulla risposta agli incidenti quando viene creato un ticket e di pubblicare i risultati chiave nel ticket di origine. Contiene anche esempi su come configurare l' ServiceNow istanza per inviare solo ticket specifici a un DevOps Agent Space e su come orchestrare il routing dei ticket su più Agent Spaces. DevOps

Configurazione iniziale

Il primo passaggio consiste nel creare ServiceNow un client applicativo OAuth che AWS DevOps possa essere utilizzato per accedere ServiceNow all'istanza.

Crea un client applicativo ServiceNow OAuth

  1. Abilita la proprietà del sistema di credenziali client della tua istanza

    1. Cerca sys_properties.list nella casella di ricerca del filtro e poi premi invio (non mostrerà l'opzione ma premendo invio funziona)

    2. Scegli Nuovo

    3. Aggiungi il nome as glide.oauth.inbound.client.credential.grant_type.enabled e il valore a true con il tipo true | false

Modulo delle proprietà di sistema che mostra il tipo di concessione delle credenziali del client in entrata OAuth abilitato.
  1. Vai a System OAuth > Application Registry dalla casella di ricerca del filtro

  2. Scegli «Nuovo» > «Nuova esperienza di integrazione in entrata» > «Nuova integrazione» > «OAuth - Client Credentials Grant»

  3. Scegli un nome e imposta l'utente dell'applicazione OAuth su «Problem Administrator», scegli «Salva»

Nuovo modulo di registrazione per le credenziali del client OAuth con campi per nome, ID cliente e segreto.

Connetti il tuo ServiceNow client OAuth a AWS DevOps Agente

  1. Puoi iniziare questo processo in due punti. Innanzitutto, accedendo alla pagina dei fornitori di capacità e trovandola ServiceNow in Comunicazione, quindi scegliendo Registra. In alternativa, puoi selezionare qualsiasi DevOps Agent Space che potresti aver creato e accedere a Funzionalità → Comunicazioni → Aggiungi → ServiceNow e scegliere Registra.

  2. Quindi, autorizza DevOps Agent ad accedere alla tua ServiceNow istanza utilizzando il client applicativo OAuth appena creato.

Ogni registrazione si connette a un'istanza. ServiceNow Per connettere istanze aggiuntive, ripeti questa procedura per ognuna di esse.

ServiceNow modulo di registrazione con campi per Nome cliente, ID cliente e URL dell'istanza.
  • Segui i passaggi successivi e salva le informazioni risultanti sul webhook

Importante

Queste informazioni non verranno più visualizzate

Pannello di configurazione Webhook che mostra lo stato della connessione e l'URL del webhook.

Configura la tua regola aziendale ServiceNow

Una volta stabilita la connettività, dovrai configurare una regola aziendale ServiceNow per inviare i ticket ai tuoi DevOps Agent Space.

  1. Vai su Abbonamenti alle attività → Amministrazione → Regole aziendali e scegli Nuovo.

  2. Imposta il campo «Tabella» su «Incidente [incidente]», seleziona la casella «Avanzate» e imposta la regola da eseguire dopo Inserisci, Aggiorna ed Elimina.

Modulo Business Rule per CloudSmith l'integrazione nella tabella Incident.
  1. Vai alla scheda «Avanzate» e aggiungi il seguente script webhook, inserendo il segreto del webhook e l'URL dove indicato, e scegli Invia.

(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);

Se hai registrato la tua ServiceNow connessione dalla pagina Capability Providers, accedi all' DevOps Agent Space dove desideri esaminare ServiceNow i ticket relativi agli incidenti. Scegli Capabilities, quindi Communications, quindi scegli l' ServiceNow istanza che hai registrato nella pagina Capability Providers. Un singolo DevOps Agent Space può utilizzare più di una ServiceNow registrazione. Per aggiungere un'altra istanza, ripeti questo passaggio. Ora, tutto dovrebbe essere impostato e tutti gli incidenti in cui il chiamante è impostato su «Amministratore dei problemi» (per simulare le autorizzazioni concesse al client AWS DevOps OAuth) attiveranno un'indagine sulla risposta agli incidenti nell'Agent Space configurato. DevOps Puoi verificarlo creando un nuovo incidente ServiceNow e impostando il campo Chiamante dell'incidente come «Amministratore dei problemi».

ServiceNow modulo per l'incidente che riporta il numero INC0010001 con il chiamante di Problem Administrator.

ServiceNow aggiornamenti dei ticket

Durante tutte le indagini sulla risposta agli incidenti attivati, il vostro DevOps agente fornirà aggiornamenti sui principali risultati, sulle analisi delle cause principali e sui piani di mitigazione nel ticket di origine. I risultati degli agenti vengono pubblicati nei commenti di un incidente e al momento pubblicheremo solo i record degli agenti riguardanti il tipofinding, cause investigation_summarymitigation_summary, e gli aggiornamenti sullo stato dell'indagine (ad esempio). AWS DevOps Agent started/finished its investigation

Esempi di routing e orchestrazione dei ticket

Scenario: filtraggio degli incidenti inviati a un Agent Space DevOps

Si tratta di uno scenario semplice, ma richiede una certa configurazione ServiceNow per creare un campo per ServiceNow tracciare l'origine degli incidenti. Ai fini di questo esempio, crea un nuovo campo Source (u_source) utilizzando il generatore di moduli SNOW. Ciò consentirà di tracciare la fonte dell'incidente e di utilizzarla per indirizzare le richieste da una particolare fonte a un DevOps Agent Space. Il routing viene eseguito creando una regola aziendale di Service Now e nella scheda Quando eseguire impostando i trigger «Quando» e «Condizioni di filtro». In questo esempio le condizioni del filtro sono impostate come segue:

Quando eseguire tab with prima che il trigger and filter for Source contenga Dynatrace.

Scenario: instradamento degli incidenti su più Agent Spaces DevOps

Questo esempio mostra come attivare un'indagine nell' DevOps Agent Space B quando l'urgenza1, la categoria è Software o il servizio è AWS e attivare un'indagine nell' DevOps Agent Space A quando il servizio è e la fonte èAWS. Dynatrace

Questo scenario può essere realizzato in due modi. Lo script webhook stesso può essere aggiornato per includere questa logica aziendale. In questo scenario mostreremo come farlo con una ServiceNow Business Rule, per trasparenza e semplificazione del debugging. Il routing viene eseguito creando due Service Now Business Rules.

  • Crea una regola aziendale ServiceNow per DevOps Agent Space A e crea una condizione utilizzando il generatore di condizioni per inviare solo gli eventi in base alla condizione specificata.

Modulo di configurazione delle regole aziendali con condizioni di filtro per Urgenza e Categoria.
  • Quindi, crea un'altra regola aziendale ServiceNow per AgentSpace B, la cui regola aziendale verrà attivata solo quando il servizio è AWS e l'origine è Dynatrace.

Modulo di configurazione delle regole aziendali per l'invio di eventi ad Agent Space B.

Ora, quando si crea un nuovo Incidente che corrisponde alla condizione specificata, viene avviata un'indagine su DevOps Agent Space A o DevOps Agent Space B, offrendoti un controllo preciso sul routing degli incidenti.