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:
- Envia uma mensagem inicial do Slack para reconhecer o alerta e informar à equipe que a RCA está em andamento
- Executa Autopilot com um prompt de análise de causa raiz com escopo no ID do problema do alerta
- Verifica se Autopilot retornou uma resposta utilizável
- Se Autopilot for bem-sucedido, reformata a resposta como blocos do Slack Block Kit e publica as descobertas no Slack
- 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: autopilotSlackRCAdescription: Automatically analyze New Relic alerts with Autopilot and send cleanly formatted findings to SlackworkflowInputs: 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: truesteps: - 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: endComo funciona
A etapa runAutopilot usa dois seletores para lidar com a variabilidade de formato de finalAnswer na camada de extração de dados:
analysisRawcaptura o valor bruto definalAnswer. A etapacheckAgentResponseusa isso para determinar se Autopilot retornou algo.analysisTextnormaliza o valor — sefinalAnswerfor uma string codificada em JSON, ele a analisa primeiro e, em seguida, extrai o conteúdo de texto de.card.body. A etapabuildSlackBlocksusaanalysisTextdiretamente, 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.
Tópicos relacionados
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