Esta plantilla ejecuta Autopilot en una alerta de New Relic y publica el análisis de causa raíz en un canal de Slack. Si Autopilot no devuelve ninguna respuesta útil, el flujo de trabajo envía un aviso de error en su lugar. Para ver los requisitos previos compartidos y las notas de configuración, consulte Plantillas de flujo de trabajo de Autopilot RCA.
Antes de usar este flujo de trabajo, asegúrese de tener:
- Un destino de Slack configurado en New Relic — consulte Crear destinos
- El UUID del destino y el nombre del canal de Slack objetivo
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
- Reformatea la respuesta como bloques de Slack Block Kit y publica los hallazgos en Slack (si Autopilot devuelve una respuesta)
- Publica un mensaje de error con el ID del problema (si Autopilot no devuelve ninguna respuesta)
Este flujo de trabajo usa newrelic.autopilot.run y newrelic.notification.sendSlack.
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 pasobuildSlackBlocksutilizaanalysisTextdirectamente, sin ningún análisis adicional.
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
Plantillas de flujo de trabajo de RCA de Autopilot
Requisitos previos compartidos y notas de configuración para todas las plantillas de RCA de Autopilot
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
RCA de alerta con Autopilot y correo electrónico
Enviar los hallazgos del RCA por correo electrónico en lugar de Slack
Solucionar problemas de automatización de flujo de trabajo
Soluciones para problemas comunes de integración de Autopilot y Slack