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 pueda iniciar automáticamente investigaciones de respuesta a incidentes cuando se crea un ticket y publicar sus hallazgos clave en el ticket de origen. También contiene ejemplos sobre cómo configurar la ServiceNow instancia para enviar solo tickets específicos a un espacio de DevOps agente y cómo organizar el enrutamiento de los tickets entre varios espacios de DevOps agente.

Configuración inicial

El primer paso consiste en crear ServiceNow un cliente de aplicación OAuth que AWS DevOps puedas utilizar 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 enter (no mostrará la opción, pero pulsar enter funciona)

    2. Elige Nuevo

    3. Añada el nombre como glide.oauth.inbound.client.credential.grant_type.enabled y el valor a true y escriba true | false

El formulario de propiedades del sistema muestra el tipo de concesión de credenciales de cliente entrante de OAuth activado.
  1. Ve a Sistema > OAuth > Registro de aplicaciones desde el cuadro de búsqueda del filtro

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

  3. Elija un nombre y establezca el usuario de la aplicación OAuth como «Administrador de problemas» y haga clic en «Guardar»

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

Conecta tu cliente 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 y busque en Comunicación y, ServiceNowa continuación, haga clic en Registrar. También puede seleccionar cualquier espacio de DevOps agente que haya creado y navegar hasta Capacidades → Comunicaciones → Añadir → ServiceNow y hacer clic en Registrar.

  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.

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 empresarial ServiceNow para enviar los tickets a sus espacios de DevOps agente.

  1. Vaya a Suscripciones de actividades → Administración → Reglas empresariales y haga clic en Nuevo.

  2. Defina el campo «Tabla» como «Incidente [incidente]», marque la casilla «Avanzado» y configure la regla para que se ejecute después de Insertar, Actualizar y Eliminar.

Formulario de reglas de negocio para CloudSmith la integración en la tabla de incidentes.
  1. Vaya a la pestaña «Avanzado» y añada el siguiente script de webhook, inserte el secreto del webhook y la URL donde se indique, y haga clic en 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 ha decidido registrar su ServiceNow conexión desde la página de proveedores de capacidades, ahora tiene que ir al espacio de DevOps agentes en el que desea investigar las denuncias de ServiceNow incidentes, seleccionar Capacidades → Comunicaciones y, a continuación, registrar la ServiceNow instancia que registró en la página de proveedores de capacidades. Ahora, todo está listo y todos los incidentes en los que la persona que llama tenga el nombre de «administrador de problemas» (para imitar los permisos otorgados al cliente de AWS DevOps OAuth) darán lugar a una investigación de respuesta al incidente en el espacio de agente configurado. DevOps Para comprobarlo, crea un nuevo incidente ServiceNow y configura el campo de llamada del incidente como «Administrador de problemas».

ServiceNow formulario de incidencia con el número INC0010001 con la llamada del administrador del problema.

ServiceNow actualizaciones de tickets

Durante todas las investigaciones de respuesta a incidentes que se inicien, su DevOps agente actualizará sus hallazgos clave, sus análisis de las causas fundamentales y los planes de mitigación en la solicitud de origen. Las conclusiones del agente se publican junto con los comentarios de un incidente y, por el momento, solo publicaremos los registros de los agentes relacionados con las actualizaciones del tipo finding causeinvestigation_summary,mitigation_summary, y del estado de la investigación (p. ej.AWS DevOps Agent started/finished its investigation).

Ejemplos de enrutamiento y organización de tickets

Escenario: filtrar qué incidentes se envían a un espacio de DevOps agentes

Se trata de un escenario sencillo, pero requiere 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 la fuente del incidente y usarla para enrutar las solicitudes de una fuente en particular a un espacio de DevOps agente. El enrutamiento se logra creando una regla de negocio de Service Now y, en la pestaña Cuándo ejecutar, configurando «Cuándo» se activan y «Condiciones de filtrado». En este ejemplo, las condiciones del filtro se establecen de la siguiente manera:

Cuándo ejecutar la pestaña antes de activar y filtrar. La fuente contiene Dynatrace.

Escenario: enrutar los incidentes a través de varios espacios de agentes DevOps

En este ejemplo, se muestra cómo iniciar una investigación en el espacio de DevOps agentes B cuando la urgencia es1, la categoría o el servicioAWS, y cómo iniciar una investigación en el espacio de DevOps agentes A cuando el servicio lo es AWS y la fuente esDynatrace. Software

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 aumentar la transparencia y simplificar la depuración. El enrutamiento se logra mediante la creación de dos reglas comerciales de Service Now.

  • Cree una regla de negocio ServiceNow para el espacio de DevOps agentes A y cree una condición utilizando el generador de condiciones para enviar únicamente los eventos en función de nuestra condición especificada.

Formulario de configuración de reglas de negocio con condiciones de filtrado por urgencia y categoría.
  • A continuación, cree otra regla de negocio ServiceNow para AgentSpace B para que la regla de negocio solo se active cuando el servicio sea AWS y la fuente sea Dynatrace.

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

Ahora, cuando cree un nuevo incidente que cumpla con la condición especificada, se iniciará una investigación en el Agent Space A o DevOps en el DevOps Agent Space B, lo que le proporcionará un control pormenorizado sobre la ruta de los incidentes.