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
Ative a propriedade do sistema de credenciais do cliente da sua instância
Pesquise
sys_properties.listna caixa de pesquisa do filtro e pressione enter (não mostrará a opção, mas pressionar enter funciona)Escolha Novo
Adicione o nome como
glide.oauth.inbound.client.credential.grant_type.enablede o valor como true com o tipo true | false
Navegue até System OAuth > Application Registry na caixa de pesquisa de filtro
Escolha “Novo” > “Nova experiência de integração de entrada” > “Nova integração” > “OAuth - Concessão de credenciais do cliente”
Escolha um nome e defina o usuário do aplicativo OAuth como “Administrador do problema”, escolha “Salvar”
Conecte seu cliente ServiceNow OAuth ao AWS DevOps Agente
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.
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.
Siga as próximas etapas e salve as informações resultantes sobre o webhook
Importante
Você não verá essas informações novamente
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.
Navegue até Assinaturas de atividades → Administração → Regras de negócios e escolha Novo.
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.
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 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:
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.
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.
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.