• /
  • EnglishEspañolFrançais日本語한국어Português
  • EntrarComeçar agora

Esta tradução de máquina é fornecida para sua comodidade.

Caso haja alguma divergência entre a versão em inglês e a traduzida, a versão em inglês prevalece. Acesse esta página para mais informações.

Criar um problema

RCA de alerta com Autopilot e Slack

|View as Markdown (English)

Quando um alerta é disparado, acione Autopilot para executar uma análise de causa raiz e publicar as descobertas diretamente em um canal do Slack. Se o Autopilot não retornar uma resposta utilizável, o fluxo de trabalho envia um aviso de erro para que a equipe saiba que deve investigar manualmente.

Antes de usar este fluxo de trabalho, certifique-se de ter:

  • Um ID de problema de alerta da New Relic em formato UUID
  • Um destino do Slack configurado no New Relic — consulte Criar Destinos
  • O UUID do destino e o nome do canal do Slack de destino

Dica

Ao acionar este fluxo de trabalho a partir de Alert Workflows, use {{ issueId }} como o valor para a entrada issueId. Esta variável passa automaticamente o ID do problema do alerta acionador para o fluxo de trabalho.

Este fluxo de trabalho completa as seguintes etapas:

  1. Envia uma mensagem inicial do Slack para reconhecer o alerta e informar à equipe que a RCA está em andamento
  2. Executa Autopilot com um prompt de análise de causa raiz com escopo no ID do problema do alerta
  3. Verifica se Autopilot retornou uma resposta utilizável
  4. Se Autopilot for bem-sucedido, reformata a resposta como blocos do Slack Block Kit e publica as descobertas no Slack
  5. Se Autopilot falhar, publica uma mensagem de erro com o ID do problema

Este fluxo de trabalho usa newrelic.autopilot.run e newrelic.notification.sendSlack.

Importante

Os valores do seletor expression devem ser escritos em uma única linha. Escalares de bloco YAML de várias linhas (| ou |-) não são avaliados para expressões de seletor e, silenciosamente, não produzem saída.

Dica

O campo finalAnswer do Autopilot pode retornar como uma string simples ou um objeto codificado em JSON, dependendo do contexto do prompt. O seletor analysisText neste fluxo de trabalho processa ambos os formatos automaticamente.

name: autopilotSlackRCA
description: Automatically analyze New Relic alerts with Autopilot and send cleanly formatted findings to Slack
workflowInputs:
issueId:
type: String
required: true
validations:
- errorMessage: Must be a valid New Relic issue ID in UUID format
pattern: '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$'
type: regex
slackDestinationId:
type: String
required: true
validations:
- pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$
errorMessage: "Invalid format. Please provide a valid UUID."
type: regex
channel:
type: String
required: true
steps:
- name: notifyAlertReceived
type: action
action: newrelic.notification.sendSlack
version: 1
inputs:
destinationId: ${{ .workflowInputs.slackDestinationId }}
channel: ${{ .workflowInputs.channel }}
text: |-
🔔 *Alert Received — Starting Root Cause Analysis*
⏳ Running Autopilot for RCA, please wait...
- name: runAutopilot
type: action
action: newrelic.autopilot.run
version: 1
inputs:
prompt: >-
Perform a root cause analysis for the following New Relic alert:
Issue ID: ${{ .workflowInputs.issueId }}
Provide your comprehensive analysis including Summary, Root Cause, and Remediation Actions.
selectors:
- name: analysisRaw
expression: .response.finalAnswer
- name: analysisText
expression: '(.response.finalAnswer | if type=="string" then fromjson else . end).card.body | map(.value) | join("\n\n")'
ignoreErrors: true
- name: checkAgentResponse
type: switch
switch:
- condition: ${{ (.steps.runAutopilot.outputs.analysisRaw // "") != "" }}
next: buildSlackBlocks
next: sendAutopilotError
- name: buildSlackBlocks
type: assign
inputs:
blocks: '${{ (.steps.runAutopilot.outputs.analysisText // "") | gsub("\\*\\*"; "*") | gsub("### "; "*") | gsub("## "; "*") as $text | ([ $text / "\n" ]) as $lines | [ { "type": "header", "text": { "type": "plain_text", "text": "✅ Autopilot RCA Complete" } }, { "type": "divider" } ] + [ $lines[][] | select(. != "") | { "type": "section", "text": { "type": "mrkdwn", "text": . } } ] }}'
next: sendRcaFindings
- name: sendRcaFindings
type: action
action: newrelic.notification.sendSlack
version: 1
inputs:
destinationId: ${{ .workflowInputs.slackDestinationId }}
channel: ${{ .workflowInputs.channel }}
blocks: ${{ .steps.buildSlackBlocks.outputs.blocks }}
next: end
- name: sendAutopilotError
type: action
action: newrelic.notification.sendSlack
version: 1
inputs:
destinationId: ${{ .workflowInputs.slackDestinationId }}
channel: ${{ .workflowInputs.channel }}
text: |-
🟥 *Autopilot RCA Failed*
Could not extract findings from Autopilot response for issue: ${{ .workflowInputs.issueId }}
Please investigate manually.
next: end

Como funciona

A etapa runAutopilot usa dois seletores para lidar com a variabilidade de formato de finalAnswer na camada de extração de dados:

  • analysisRaw captura o valor bruto de finalAnswer. A etapa checkAgentResponse usa isso para determinar se Autopilot retornou algo.
  • analysisText normaliza o valor — se finalAnswer for uma string codificada em JSON, ele a analisa primeiro e, em seguida, extrai o conteúdo de texto de .card.body. A etapa buildSlackBlocks usa analysisText diretamente, o que mantém a lógica de formatação simples.

buildSlackBlocks converte os marcadores de cabeçalho **bold** e ###/## para o formato mrkdwn do Slack, divide o resultado por quebras de linha e envolve cada linha não vazia em um bloco section do Block Kit.

Visão geral do Autopilot

Saiba como o Autopilot investiga alertas e incidentes

Lógica condicional

Utilize instruções switch para ramificar em caso de sucesso ou falha

Enviar notificações do Slack

Referência completa para a ação sendSlack

Criar destinos

Configure o destino do Slack exigido por este fluxo de trabalho

Solução de problemas de automação de fluxo de trabalho

Soluções para problemas comuns de integração do Autopilot e Slack

Copyright © 2026 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.