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 Agent para permitir que ela 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 verdadeiro com o tipo verdadeiro | falso

Formulário de propriedade 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 do filtro

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

  3. Escolha um nome e defina o usuário do aplicativo OAuth como “Administrador do problema”, clique em “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, encontrando ServiceNowem Comunicação e, em seguida, clicando em Registrar. Como alternativa, você pode selecionar qualquer Espaço do DevOps Agente que você possa ter criado e navegar até Capacidades → Comunicações → Adicionar → ServiceNow e clicar em 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.

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 da conexão e o URL do webhook.

Configure 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) de DevOps agente.

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

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

Formulário de regra 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 o URL do webhook onde indicado, e clique em 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ê optou por registrar sua ServiceNow conexão na página Capability Providers, agora você precisa navegar até o DevOps Agent Space no qual deseja investigar os tickets de ServiceNow incidentes, selecionar Capabilities → Communications e, em seguida, registrar a ServiceNow instância registrada na página Capability Providers. Agora, tudo deve estar configurado e todos os incidentes em que o chamador está configurado 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 do problema.

ServiceNow atualizações de ingressos

Durante todas as investigações de resposta a incidentes acionados, seu DevOps agente fornecerá atualizações de suas principais descobertas, análises da 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: filtrando quais incidentes são enviados para um espaço de agente DevOps

Esse é um cenário simples, mas precisa de alguma configuração ServiceNow para criar um campo ServiceNow para rastrear a origem do incidente. Para fins 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 rotear 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, definindo os gatilhos “Quando” e “Condições do filtro”. Neste exemplo, as condições do filtro são definidas da seguinte forma:

Quando executar a guia com o gatilho anterior e o filtro para Source 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 origem é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. Nesse 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 origem for o Dynatrace.

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

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