View a markdown version of this page

Conectando ServiceNow - AWS DevOps Agente

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Conectando ServiceNow

Este tutorial explica como conectar uma ServiceNow instância ao AWS DevOps Agente para permitir que ele inicie automaticamente investigações de resposta a incidentes quando um ticket é criado e publique suas principais descobertas no ticket de origem. Ele também contém exemplos de como configurar sua ServiceNow instância para enviar somente tickets específicos para um DevOps Agent Space e como orquestrar o roteamento de tickets em vários DevOps Agent Spaces.

Configuração inicial

A primeira etapa é criar ServiceNow um cliente de aplicativo OAuth que AWS DevOps possa ser usado para acessar sua ServiceNow instância.

Crie um cliente de ServiceNow aplicativo OAuth

  1. Ative a propriedade do sistema de credenciais do cliente da sua instância

    1. Pesquise sys_properties.list na caixa de pesquisa do filtro e pressione enter (não mostrará a opção, mas pressionar enter funciona)

    2. Escolha Novo

    3. Adicione o nome como glide.oauth.inbound.client.credential.grant_type.enabled e o valor como true com o tipo true | false

Formulário de propriedades do sistema mostrando o tipo de concessão de credencial do cliente de entrada OAuth ativado.
  1. Navegue até System OAuth > Application Registry na caixa de pesquisa de filtro

  2. Escolha “Novo” > “Nova experiência de integração de entrada” > “Nova integração” > “OAuth - Concessão de credenciais do cliente”

  3. Escolha um nome e defina o usuário do aplicativo OAuth como “Administrador do problema”, escolha “Salvar”

Novo formulário de registro para credenciais do cliente OAuth com campos para nome, ID do cliente e segredo.

Conecte seu cliente ServiceNow OAuth ao AWS DevOps Agente

  1. Você pode iniciar esse processo em dois lugares. Primeiro, navegando até a página Provedores de Capacidades e localizando ServiceNow em Comunicação, depois escolhendo Registrar. Como alternativa, você pode selecionar qualquer Espaço do DevOps Agente que você tenha criado e navegar até Capacidades → Comunicações → Adicionar → ServiceNow e escolher Registrar.

  2. Em seguida, autorize o DevOps Agente a acessar sua ServiceNow instância usando o cliente do aplicativo OAuth que você acabou de criar.

Cada registro se conecta a uma ServiceNow instância. Para conectar instâncias adicionais, repita esse processo para cada uma.

ServiceNow formulário de registro com campos para nome do cliente, ID do cliente e URL da instância.
  • Siga as próximas etapas e salve as informações resultantes sobre o webhook

Importante

Você não verá essas informações novamente

Painel de configuração do webhook mostrando o status conectado e o URL do webhook.

Configurar sua regra ServiceNow de negócios

Depois de estabelecer a conectividade, você precisará configurar uma regra de negócios para enviar tickets ServiceNow para o (s) seu (s) Espaço (s) do DevOps agente.

  1. Navegue até Assinaturas de atividades → Administração → Regras de negócios e escolha Novo.

  2. Defina o campo “Tabela” como “Incidente [incidente]”, marque a caixa “Avançado” e defina a regra para ser executada após Inserir, Atualizar e Excluir.

Formulário de regras de negócios para CloudSmith integração na tabela de incidentes.
  1. Navegue até a guia “Avançado” e adicione o seguinte script de webhook, inserindo o segredo e a URL do webhook onde indicado, e escolha 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);

Se você registrou sua ServiceNow conexão na página Provedores de Capacidades, navegue até o Espaço do DevOps Agente em que deseja investigar os tíquetes de ServiceNow incidentes. Escolha Capacidades, depois Comunicações e, em seguida, escolha a ServiceNow instância que você registrou na página Provedores de Capacidades. Um único DevOps Agent Space pode usar mais de um ServiceNow registro. Para adicionar outra instância, repita essa etapa. Agora, tudo deve estar configurado, e todos os incidentes em que o chamador está definido como “Administrador do problema” (para imitar as permissões que você concedeu ao cliente AWS DevOps OAuth) acionarão uma investigação de resposta a incidentes no Espaço do Agente configurado. DevOps Você pode testar isso criando um novo incidente ServiceNow e definindo o campo Chamador do incidente como “Administrador do problema”.

ServiceNow formulário de incidente mostrando o número INC0010001 com o chamador do Administrador de Problemas.

ServiceNow atualizações de ingressos

Durante todas as investigações de resposta a incidentes acionadas, seu DevOps agente fornecerá atualizações de suas principais descobertas, análises de causa raiz e planos de mitigação no ticket de origem. As descobertas do agente são publicadas nos comentários de um incidente e, atualmente, publicaremos apenas registros do agente do tipofinding,, cause investigation_summarymitigation_summary, e atualizações do status da investigação (por exemploAWS DevOps Agent started/finished its investigation).

Exemplos de roteamento e orquestração de tickets

Cenário: filtrar quais incidentes são enviados para um DevOps Agent Space

Esse é um cenário simples, mas precisa de alguma configuração ServiceNow para criar um campo ServiceNow para rastrear a origem do incidente. Para o propósito deste exemplo, crie um novo campo Fonte (u_source) usando o construtor de formulários SNOW. Isso permitirá rastrear a origem do incidente e usá-la para encaminhar solicitações de uma fonte específica para um Espaço do DevOps Agente. O roteamento é realizado criando uma regra de negócios do Service Now e, na guia Quando executar, a configuração “Quando” aciona e “Condições do filtro”. Neste exemplo, as condições do filtro são definidas da seguinte forma:

Quando executar, a guia com antes do gatilho e do filtro para Fonte contém Dynatrace.

Cenário: roteamento de incidentes em vários DevOps espaços de agentes

Este exemplo mostra como acionar uma investigação no espaço do DevOps agente B quando a urgência é1, a categoria é Software ou o serviço éAWS, e acionar uma investigação no espaço do DevOps agente A quando o serviço é AWS e a fonte éDynatrace.

Esse cenário pode ser realizado de duas maneiras. O script do webhook em si pode ser atualizado para incluir essa lógica de negócios. Neste cenário, mostraremos como fazer isso com uma regra de ServiceNow negócios, para transparência e simplificação da depuração. O roteamento é realizado com a criação de duas regras de negócios do Service Now.

  • Crie uma regra de negócios ServiceNow para o DevOps Agent Space A e crie uma condição usando o construtor de condições para enviar somente os eventos com base em nossa condição especificada.

Formulário de configuração de regras de negócios com condições de filtro para urgência e categoria.
  • Em seguida, crie outra regra de negócios ServiceNow para AgentSpace B para a qual a regra de negócios só será acionada quando o serviço for AWS e a fonte for Dynatrace.

Formulário de configuração de regras de negócios para enviar eventos ao Agent Space B.

Agora, quando você cria um novo incidente que corresponda à condição especificada, ele acionará uma investigação no DevOps Agente Espaço A ou no DevOps Agente Espaço B, fornecendo a você um controle detalhado sobre o roteamento do incidente.