View a markdown version of this page

Conectando ServiceNow - AWS DevOps Agente

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

  1. Habilita la propiedad del sistema de credenciales de cliente de tu instancia

    1. Busca sys_properties.list en el cuadro de búsqueda del filtro y, a continuación, pulsa Entrar (no se mostrará la opción, pero pulsar Entrar funciona)

    2. Elige «Nuevo»

    3. Agregue el nombre como glide.oauth.inbound.client.credential.grant_type.enabled y el valor a true con el tipo true | false

Formulario de propiedades del sistema que muestra el tipo de concesión de credenciales de cliente entrante de OAuth habilitado.
  1. Navegue hasta System OAuth > Application Registry desde el cuadro de búsqueda del filtro

  2. Seleccione «Nuevo» > «Nueva experiencia de integración entrante» > «Nueva integración» > «OAuth: concesión de credenciales de cliente»

  3. Elige un nombre, configura el usuario de la aplicación OAuth como «Administrador de problemas» y selecciona «Guardar»

Nuevo formulario de registro para las credenciales de los clientes de OAuth con campos para el nombre, el ID de cliente y el secreto.

Conecta tu cliente de ServiceNow OAuth a AWS DevOps Agente

  1. 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.

  2. 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.

ServiceNow formulario de registro con campos para el nombre del cliente, el ID del cliente y la URL de la instancia.
  • Siga los pasos siguientes y guarde la información resultante sobre el webhook

importante

No volverás a ver esta información

El panel de configuración del webhook muestra el estado de conexión y la URL del webhook.

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.

  1. Diríjase a Suscripciones de actividades → Administración → Reglas empresariales y seleccione Nuevo.

  2. 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.

Formulario de reglas empresariales para CloudSmith la integración en la tabla de incidentes.
  1. 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 formulario de incidente en el que aparezca el número INC0010001 con la persona que llama al administrador del problema.

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:

Cuándo ejecutar la pestaña con el disparador anterior y el filtro para Source contiene Dynatrace.

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.

Formulario de configuración de reglas de negocio con condiciones de filtro por urgencia y categoría.
  • 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.

Formulario de configuración de reglas de negocio para enviar eventos al Agent Space B.

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.