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 collegare un' ServiceNow istanza ad AWS DevOps Agent per consentirgli di avviare automaticamente le indagini sulla risposta agli incidenti quando viene creato un ticket e di pubblicarne i risultati principali 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 nella creazione di ServiceNow un'applicazione client OAuth da utilizzare per accedere ServiceNow all'istanza. AWS DevOps
Crea un client applicativo ServiceNow OAuth
Abilita la proprietà del sistema di credenziali del client dell'istanza
Cerca
sys_properties.listnella casella di ricerca del filtro e poi premi invio (non mostrerà l'opzione ma premere invio funziona)Scegli Nuovo
Aggiungi il nome as
glide.oauth.inbound.client.credential.grant_type.enablede il valore a true con type as true | false
Passa a System OAuth > Application Registry dalla casella di ricerca del filtro
Scegli «Nuovo» > «Nuova esperienza di integrazione in entrata» > «Nuova integrazione» > «OAuth - Client Credentials Grant»
Scegli un nome e imposta l'utente dell'applicazione OAuth su «Problem Administrator», fai clic su «Salva»
Connect il tuo ServiceNow client OAuth a AWS DevOps Agente
Puoi iniziare questo processo in due punti. Innanzitutto, accedendo alla pagina Capability Provider e trovandola nella ServiceNowsezione Comunicazione, quindi facendo clic su Registra. In alternativa, puoi selezionare qualsiasi DevOps Agent Space che potresti aver creato e accedere a Capacità → Comunicazioni → Aggiungi → ServiceNow e fare clic su Registra.
Successivamente, autorizza l' DevOps agente ad accedere alla tua ServiceNow istanza utilizzando il client applicativo OAuth che hai appena creato.
Segui i passaggi successivi e salva le informazioni risultanti sul webhook
Importante
Queste informazioni non verranno più visualizzate
Configura la tua regola aziendale ServiceNow
Una volta stabilita la connettività, dovrai configurare una regola aziendale per ServiceNow inviare i ticket al/i tuo/i DevOps Agent Space.
Vai su Activity Subscriptions → Administration → Business Rules e fai clic su Nuovo.
Imposta il campo «Tabella» su «Incidente [incidente]», seleziona la casella «Avanzate» e imposta la regola in modo che venga eseguita dopo l'inserimento, l'aggiornamento e l'eliminazione.
Vai alla scheda «Avanzate» e aggiungi il seguente script webhook, inserendo il segreto e l'URL del webhook dove indicato, e fai clic su 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 scelto di registrare la ServiceNow connessione dalla pagina Provider di funzionalità, ora devi accedere all' DevOps Agent Space in cui desideri esaminare i ticket relativi agli ServiceNow incidenti, selezionare Capacità → Comunicazioni e quindi registrare l' ServiceNow istanza registrata nella pagina Provider di capacità. Ora, tutto dovrebbe essere configurato e tutti gli incidenti in cui il chiamante è impostato su «Problem Administrator» (per simulare le autorizzazioni concesse al client AWS DevOps OAuth) attiveranno un'indagine sulla risposta agli incidenti nello spazio DevOps agente configurato. Puoi verificarlo creando un nuovo incidente ServiceNow e impostando il campo Caller dell'incidente come «Problem Administrator».
ServiceNow aggiornamenti dei ticket
Durante tutte le indagini relative alla risposta agli incidenti innescati, il tuo DevOps agente fornirà aggiornamenti sui risultati principali, sulle analisi delle cause principali e sui piani di mitigazione nel ticket di origine. I risultati dell'agente vengono pubblicati nei commenti relativi a un incidente e al momento pubblicheremo solo i dati relativi al tipofinding, cause investigation_summarymitigation_summary, e agli aggiornamenti sullo stato delle indagini (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
Questo è uno scenario semplice ma richiede una configurazione ServiceNow per creare un campo in cui ServiceNow tracciare l'origine dell'incidente. Ai fini di questo esempio, crea un nuovo campo Source (u_source) utilizzando il generatore di moduli SNOW. Ciò consentirà di tracciare l'origine 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 «When» e «Filter Conditions». In questo esempio le condizioni di filtro sono impostate come segue:
Scenario: instradamento degli incidenti su più Agent Spaces DevOps
Questo esempio mostra come attivare un'indagine in DevOps Agent Space B quando l'urgenza è1, la categoria è Software o il servizio è AWS e avviare un'indagine in DevOps Agent Space A quando il servizio è e l'origine AWS sì. 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 realizzarlo con una ServiceNow Business Rule, per la trasparenza e la semplificazione del debug. Il routing viene eseguito creando due regole aziendali di Service Now.
Crea una regola aziendale in ServiceNow DevOps Agent Space A e crea una condizione utilizzando il generatore di condizioni per inviare solo gli eventi in base alla nostra condizione specificata.
Quindi, crea un'altra regola aziendale in ServiceNow per AgentSpace B per la quale la regola aziendale verrà attivata solo quando il servizio è AWS e l'origine è Dynatrace.
Ora, quando crei un nuovo Incidente che corrisponde alla condizione specificata, verrà avviata un'indagine su DevOps Agent Space A o DevOps Agent Space B, fornendoti un controllo granulare sul routing degli incidenti.