Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Conectando ServiceNow
En este tutorial se explica cómo conectar una ServiceNow instancia con el AWS DevOps agente para que este pueda iniciar automáticamente las investigaciones de respuesta a los incidentes cuando se crea un ticket y publicar sus hallazgos clave en el ticket original. También contiene ejemplos sobre cómo configurar la ServiceNow instancia para enviar solo tickets específicos a un espacio de DevOps agentes y cómo organizar el enrutamiento de los tickets entre varios espacios de DevOps agentes.
Configuración inicial
El primer paso es crear ServiceNow un cliente de aplicación OAuth que AWS DevOps puedas usar para acceder a tu ServiceNow instancia.
Crea un cliente de aplicación ServiceNow OAuth
Habilita la propiedad del sistema de credenciales de cliente de tu instancia
Busca
sys_properties.listen el cuadro de búsqueda del filtro y, a continuación, pulsa Entrar (no se mostrará la opción, pero pulsar Entrar funciona)Elige «Nuevo»
Agregue el nombre como
glide.oauth.inbound.client.credential.grant_type.enabledy el valor a true con el tipo true | false
Navegue hasta System OAuth > Application Registry desde el cuadro de búsqueda del filtro
Seleccione «Nuevo» > «Nueva experiencia de integración entrante» > «Nueva integración» > «OAuth: concesión de credenciales de cliente»
Elige un nombre, configura el usuario de la aplicación OAuth como «Administrador de problemas» y selecciona «Guardar»
Conecta tu cliente de ServiceNow OAuth a AWS DevOps Agente
Puede iniciar este proceso en dos lugares. En primer lugar, vaya a la página de proveedores de capacidades, busque ServiceNow en Comunicación y, a continuación, seleccione Registrarse. También puede seleccionar cualquier espacio de DevOps agente que haya creado y navegar hasta Capacidades → Comunicaciones → Agregar → ServiceNow y elegir Registrarse.
A continuación, autorice al DevOps agente a acceder a su ServiceNow instancia mediante el cliente de la aplicación OAuth que acaba de crear.
Cada registro se conecta a una ServiceNow instancia. Para conectar instancias adicionales, repita este proceso para cada una de ellas.
Siga los pasos siguientes y guarde la información resultante sobre el webhook
importante
No volverás a ver esta información
Configura tu regla de negocio ServiceNow
Una vez que haya establecido la conectividad, tendrá que configurar una regla de negocio ServiceNow para enviar los tickets a sus espacios de DevOps agente.
Diríjase a Suscripciones de actividades → Administración → Reglas empresariales y seleccione Nuevo.
Cambie el campo «Tabla» a «Incidente [incidente]», marque la casilla «Avanzado» y configure la regla para que se ejecute después de insertar, actualizar y eliminar.
Diríjase a la pestaña «Avanzado» y añada el siguiente script de webhook, insertando el secreto y la URL del webhook donde se indique, y seleccione Enviar.
(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);
Si has registrado tu ServiceNow conexión desde la página de proveedores de capacidades, dirígete al espacio de DevOps agentes donde deseas investigar las ServiceNow incidencias. Seleccione Capacidades, luego Comunicaciones y, a continuación, elija la ServiceNow instancia que ha registrado en la página de proveedores de capacidades. Un único espacio de DevOps agente puede usar más de un ServiceNow registro. Para agregar otra instancia, repita este paso. Ahora, todo debería estar configurado y todos los incidentes en los que la persona que llama esté configurada como «administrador de problemas» (para imitar los permisos que concediste al cliente de AWS DevOps OAuth) activarán una investigación de respuesta a los incidentes en el espacio de agente configurado. DevOps Para comprobarlo, cree un nuevo incidente ServiceNow y defina el campo «Administrador de problemas» en el campo correspondiente a la persona que llama.
ServiceNow actualizaciones de tickets
Durante todas las investigaciones de respuesta a los incidentes que se inicien, su DevOps agente actualizará sus principales hallazgos, analizará las causas fundamentales y los planes de mitigación en el ticket original. Las conclusiones de los agentes se publican junto a los comentarios de un incidente y, por el momento, solo publicamos los registros de los agentes relacionados con el tipo finding y las actualizaciones del estado de la investigación (p. ej.AWS DevOps Agent started/finished its investigation). cause investigation_summary mitigation_summary
Ejemplos de distribución y organización de tickets
Escenario: filtrar los incidentes que se envían a un espacio de DevOps agentes
Este es un escenario sencillo, pero necesita cierta configuración ServiceNow para crear un campo ServiceNow que permita rastrear el origen del incidente. Para este ejemplo, cree un nuevo campo Source (u_source) con el generador de formularios SNOW. Esto permitirá rastrear el origen del incidente y usarlo para dirigir las solicitudes de una fuente en particular a un espacio de DevOps agentes. El enrutamiento se logra creando una regla empresarial de Service Now y, en la pestaña Cuándo ejecutar, configurando «Cuándo» los activadores y las «condiciones de filtrado». En este ejemplo, las condiciones del filtro se establecen de la siguiente manera:
Escenario: enrutar los incidentes entre varios espacios de agentes DevOps
Este ejemplo muestra cómo iniciar una investigación en el espacio de DevOps agentes B cuando la urgencia es1, la categoría es Software o el servicio esAWS, y cómo iniciar una investigación en el espacio de DevOps agentes A cuando el servicio es AWS y la fuente esDynatrace.
Este escenario se puede llevar a cabo de dos maneras. El propio script del webhook se puede actualizar para incluir esta lógica empresarial. En este escenario, mostraremos cómo lograrlo con una regla de ServiceNow negocio, para mayor transparencia y simplificar la depuración. El enrutamiento se logra mediante la creación de dos reglas de negocio de Service Now.
Cree una regla de negocio ServiceNow para el espacio de DevOps agente A y cree una condición mediante el generador de condiciones para enviar únicamente los eventos en función de la condición especificada.
A continuación, cree otra regla de negocio ServiceNow para AgentSpace B, cuya regla de negocio solo se activará cuando el servicio sea AWS y el origen sea Dynatrace.
Ahora, cuando cree un nuevo incidente que cumpla la condición especificada, se iniciará una investigación en el Agent Space A o en el DevOps DevOps Agent Space B, lo que le proporcionará un control detallado sobre el enrutamiento de los incidentes.