Cree y administre recursos de alertas con Terraform - Amazon Managed Grafana

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Cree y administre recursos de alertas con Terraform

Este tema de documentación está diseñado para los espacios de trabajo de Grafana que admiten la versión 9.x de Grafana.

Para ver los espacios de trabajo de Grafana que admiten la versión 10.x de Grafana, consulte. Trabajando en Grafana versión 10

Para ver los espacios de trabajo de Grafana que admiten la versión 8.x de Grafana, consulte. Trabajando en Grafana versión 8

Utilice el proveedor Grafana de Terraform para administrar sus recursos de alerta y aprovisionarlos en su sistema Grafana. El soporte del proveedor de Terraform para Grafana Alerting facilita la creación, la administración y el mantenimiento de toda su pila de alertas de Grafana como código.

Para obtener más información sobre la administración de sus recursos de alertas mediante Terraform, consulte la documentación del proveedor de Grafana en la documentación de Terraform.

Complete las siguientes tareas para crear y administrar sus recursos de alertas con Terraform.

  1. Cree una clave de API para el aprovisionamiento.

  2. Configure el proveedor de Terraform.

  3. Defina sus recursos de alerta en Terraform.

  4. Corre terraform apply para aprovisionar tus recursos de alerta.

Requisitos previos

  • Asegúrese de tener el proveedor Terraform de grafana/grafana 1.27.0 o superior.

  • Asegúrese de utilizar Grafana 9.1 o superior. Si creaste tu instancia de Grafana gestionada por Amazon con la versión 9 de Grafana, será así.

Crea una clave de API para el aprovisionamiento

Puede crear una clave de API de Grafana normal para autenticar Terraform con Grafana. La mayoría de las herramientas existentes que utilizan claves de API deberían funcionar automáticamente con el nuevo soporte de alertas de Grafana. Para obtener información específica sobre la creación de claves para su uso con Terraform, consulte Uso de Terraform para la automatización de Grafana gestionada por Amazon.

Para crear una clave de API para el aprovisionamiento
  1. Cree una nueva cuenta de servicio para su canalización de CI.

  2. Asigne la función «Acceder a la API de aprovisionamiento de las reglas de alerta».

  3. Cree un nuevo token de cuenta de servicio.

  4. Asigne un nombre al token y guárdelo para usarlo en Terraform.

Como alternativa, puede utilizar la autenticación básica. Para ver todos los formatos de autenticación compatibles, consulte Autenticación de Grafana en la documentación de Terraform.

Configure el proveedor de Terraform

El soporte de alertas de Grafana se incluye como parte del proveedor Grafana Terraform.

El siguiente es un ejemplo que puede usar para configurar el proveedor de Terraform.

terraform { required_providers { grafana = { source = "grafana/grafana" version = ">= 1.28.2" } } } provider "grafana" { url = <YOUR_GRAFANA_URL> auth = <YOUR_GRAFANA_API_KEY> }

Aprovisione puntos de contacto y plantillas

Los puntos de contacto conectan una pila de alertas con el mundo exterior. Le dicen a Grafana cómo conectarse a sus sistemas externos y dónde enviar las notificaciones. Hay más de quince integraciones diferentes entre las que elegir. En este ejemplo, se utiliza un punto de contacto de Slack.

Para aprovisionar puntos de contacto y plantillas
  1. Copie este bloque de código en un archivo.tf en su máquina local. Sustituye < slack-webhook-url > por la URL de tu webhook de Slack (u otro contacto)

    En este ejemplo, se crea un punto de contacto que envía notificaciones de alerta a Slack.

    resource "grafana_contact_point" "my_slack_contact_point" { name = "Send to My Slack Channel" slack { url = <slack-webhook-url> text = <<EOT {{ len .Alerts.Firing }} alerts are firing! Alert summaries: {{ range .Alerts.Firing }} {{ template "Alert Instance Template" . }} {{ end }} EOT } }
  2. Introduce el texto de la notificación en el campo de texto.

    El text campo admite plantillas de estilo Go. Esto le permite administrar sus plantillas de notificaciones de Grafana Alerting directamente en Terraform.

  3. Ejecute el comando terraform apply.

  4. Ve a la interfaz de usuario de Grafana y comprueba los detalles de tu punto de contacto.

    No puedes editar los recursos aprovisionados mediante Terraform desde la interfaz de usuario. Esto garantiza que tu pila de alertas esté siempre sincronizada con tu código.

  5. Haz clic en Probar para comprobar que el punto de contacto funciona correctamente.

nota

Puede reutilizar las mismas plantillas en muchos puntos de contacto. En el ejemplo anterior, se incrusta una plantilla compartida mediante la declaración {{ template "Alert Instance Template" . }}

Luego, este fragmento se puede administrar por separado en Terraform:

resource "grafana_message_template" "my_alert_template" { name = "Alert Instance Template" template = <<EOT {{ define "Alert Instance Template" }} Firing: {{ .Labels.alertname }} Silence: {{ .SilenceURL }} {{ end }} EOT }

Aprovisione políticas de notificación y enrutamiento

Las políticas de notificación le dicen a Grafana cómo enrutar las instancias de alerta, en lugar de dónde. Conectan las alertas de activación con los puntos de contacto previamente definidos mediante un sistema de etiquetas y comparadores.

Para aprovisionar políticas de notificación y enrutamiento
  1. Copia este bloque de código en un archivo.tf en tu máquina local.

    En este ejemplo, las alertas se agrupan poralertname, lo que significa que cualquier notificación procedente de alertas que comparten el mismo nombre se agrupa en el mismo mensaje de Slack.

    Si quieres redirigir notificaciones específicas de forma diferente, puedes añadir subpolíticas. Las subpolíticas te permiten aplicar el enrutamiento a diferentes alertas en función de la coincidencia de etiquetas. En este ejemplo, aplicamos un tiempo de silencio a todas las alertas con la etiqueta a=b.

    resource "grafana_notification_policy" "my_policy" { group_by = ["alertname"] contact_point = grafana_contact_point.my_slack_contact_point.name group_wait = "45s" group_interval = "6m" repeat_interval = "3h" policy { matcher { label = "a" match = "=" value = "b" } group_by = ["..."] contact_point = grafana_contact_point.a_different_contact_point.name mute_timings = [grafana_mute_timing.my_mute_timing.name] policy { matcher { label = "sublabel" match = "=" value = "subvalue" } contact_point = grafana_contact_point.a_third_contact_point.name group_by = ["..."] } } }
  2. En el campo mute_timings, vincula un tiempo de silencio a tu política de notificaciones.

  3. Ejecute el comando terraform apply.

  4. Ve a la interfaz de usuario de Grafana y comprueba los detalles de tu política de notificaciones.

    nota

    No puedes editar los recursos aprovisionados desde Terraform desde la interfaz de usuario. Esto garantiza que tu pila de alertas esté siempre sincronizada con tu código.

  5. Haz clic en Probar para comprobar que el punto de notificación funciona correctamente.

Aprovisione los tiempos de silencio

Los tiempos de silencio permiten silenciar las notificaciones de alerta durante períodos de tiempo definidos.

Para aprovisionar tiempos de silencio
  1. Copia este bloque de código en un archivo.tf en tu máquina local.

    En este ejemplo, las notificaciones de alerta se silencian los fines de semana.

    resource "grafana_mute_timing" "my_mute_timing" { name = "My Mute Timing" intervals { times { start = "04:56" end = "14:17" } weekdays = ["saturday", "sunday", "tuesday:thursday"] months = ["january:march", "12"] years = ["2025:2027"] } }
  2. Ejecute el comando terraform apply.

  3. Ve a la interfaz de usuario de Grafana y comprueba los detalles del tiempo de silencio.

  4. Consulta el tiempo de silencio que acabas de crear en una política de notificaciones utilizando el campo. mute_timings Esto aplicará el tiempo de silencio a algunas o todas las notificaciones.

    nota

    No puedes editar los recursos aprovisionados desde Terraform desde la interfaz de usuario. Esto garantiza que tu pila de alertas esté siempre sincronizada con tu código.

  5. Haz clic en Probar para comprobar que el tiempo de silencio funciona correctamente.

Aprovisione reglas de alerta

Las reglas de alerta le permiten alertar contra cualquier fuente de datos de Grafana. Puede ser una fuente de datos que ya haya configurado, o puede definir sus fuentes de datos en Terraform junto con sus reglas de alerta.

Para aprovisionar reglas de alerta
  1. Cree una fuente de datos para consultarla y una carpeta en la que almacenar las reglas.

    En este ejemplo, se utiliza la fuente de Configurar una fuente TestData de datos para realizar pruebas datos.

    Las alertas se pueden definir en cualquier fuente de datos de backend en Grafana.

    resource "grafana_data_source" "testdata_datasource" { name = "TestData" type = "testdata" } resource "grafana_folder" "rule_folder" { title = "My Rule Folder" }
  2. Defina una regla de alerta.

    Para obtener más información sobre las reglas de alerta, consulta cómo crear alertas gestionadas por Grafana.

  3. Cree un grupo de reglas que contenga una o más reglas.

    En este ejemplo, se utiliza el grupo de grafana_rule_group recursos.

    resource "grafana_rule_group" "my_rule_group" { name = "My Alert Rules" folder_uid = grafana_folder.rule_folder.uid interval_seconds = 60 org_id = 1 rule { name = "My Random Walk Alert" condition = "C" for = "0s" // Query the datasource. data { ref_id = "A" relative_time_range { from = 600 to = 0 } datasource_uid = grafana_data_source.testdata_datasource.uid // `model` is a JSON blob that sends datasource-specific data. // It's different for every datasource. The alert's query is defined here. model = jsonencode({ intervalMs = 1000 maxDataPoints = 43200 refId = "A" }) } // The query was configured to obtain data from the last 60 seconds. Let's alert on the average value of that series using a Reduce stage. data { datasource_uid = "__expr__" // You can also create a rule in the UI, then GET that rule to obtain the JSON. // This can be helpful when using more complex reduce expressions. model = <<EOT {"conditions":[{"evaluator":{"params":[0,0],"type":"gt"},"operator":{"type":"and"},"query":{"params":["A"]},"reducer":{"params":[],"type":"last"},"type":"avg"}],"datasource":{"name":"Expression","type":"__expr__","uid":"__expr__"},"expression":"A","hide":false,"intervalMs":1000,"maxDataPoints":43200,"reducer":"last","refId":"B","type":"reduce"} EOT ref_id = "B" relative_time_range { from = 0 to = 0 } } // Now, let's use a math expression as our threshold. // We want to alert when the value of stage "B" above exceeds 70. data { datasource_uid = "__expr__" ref_id = "C" relative_time_range { from = 0 to = 0 } model = jsonencode({ expression = "$B > 70" type = "math" refId = "C" }) } } }
  4. Ve a la interfaz de usuario de Grafana y comprueba tu regla de alerta.

    Puedes ver si la regla de alerta está funcionando. También puedes ver una visualización de cada una de las etapas de consulta de la regla de alerta.

    Cuando se activa la alerta, Grafana envía una notificación a través de la política que has definido.

    Por ejemplo, si eliges Slack como punto de contacto, el administrador de alertas integrado de Grafana publica automáticamente un mensaje en Slack.