Cuando se activa una alerta, active Autopilot para ejecutar un análisis de causa raíz y publicar los resultados directamente en un canal de Slack. Si Autopilot no devuelve una respuesta utilizable, el flujo de trabajo envía un aviso de error en su lugar para que el equipo sepa que debe investigar manualmente.
Antes de usar este flujo de trabajo, asegúrese de tener:
- Un ID de problema de alerta de New Relic en formato UUID
- Un destino de Slack configurado en New Relic — consulte Crear destinos
- El UUID del destino y el nombre del canal de Slack objetivo
Sugerencia
Al activar este flujo de trabajo desde Alert Workflows, use {{ issueId }} como valor para la entrada issueId. Esta variable pasa automáticamente el ID del problema de la alerta desencadenante al flujo de trabajo.
Este flujo de trabajo completa los siguientes pasos:
- Envía un mensaje inicial de Slack para confirmar la alerta y avisar al equipo que el RCA está en marcha
- Ejecuta Autopilot con un símbolo de análisis de causa raíz limitado al ID del problema de la alerta
- Comprueba si Autopilot devolvió una respuesta utilizable
- Si Autopilot se ejecuta correctamente, reformatea la respuesta como bloques de Slack Block Kit y publica los resultados en Slack
- Si Autopilot falla, publica un mensaje de error con el ID del problema
Este flujo de trabajo usa newrelic.autopilot.run y newrelic.notification.sendSlack.
Importante
Los valores del selector expression deben escribirse en una sola línea. Los escalares de bloque YAML de varias líneas (| o |-) no se evalúan para las expresiones de selector y no producen ninguna salida de forma silenciosa.
Sugerencia
El campo finalAnswer de Autopilot puede devolverse como una cadena de texto sin formato o como un objeto codificado en JSON, según el contexto del símbolo. El selector analysisText en este flujo de trabajo maneja ambas formas automáticamente.
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: endCómo funciona
El paso runAutopilot usa dos selectores para manejar la variabilidad de forma de finalAnswer en la capa de extracción de datos:
analysisRawcaptura el valorfinalAnswersin procesar. El pasocheckAgentResponseusa esto para determinar si Autopilot devolvió algo.analysisTextnormaliza el valor —sifinalAnsweres una cadena codificada en JSON, la analiza primero y luego extrae el contenido de texto de.card.body. El pasobuildSlackBlocksusaanalysisTextdirectamente, lo que mantiene simple la lógica de formato.
buildSlackBlocks convierte los marcadores de encabezado **bold** y ###/## al formato mrkdwn de Slack, divide el resultado en saltos de línea y envuelve cada línea no vacía en un bloque section de Block Kit.
Temas relacionados
Descripción general de Autopilot
Aprenda cómo Autopilot investiga alertas e incidentes
Lógica condicional
Usar declaraciones de cambio para ramificar en caso de éxito o fracaso
Enviar notificaciones de Slack
Referencia completa para la acción sendSlack
Crear destinos
Configure el destino de Slack requerido por este flujo de trabajo
Solucionar problemas de automatización de flujo de trabajo
Soluciones para problemas comunes de integración de Autopilot y Slack