Creación y administración de 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 los espacios de trabajo de Grafana que admiten la versión 10.x de Grafana, consulte Uso de la versión 10 de Grafana.
Para los espacios de trabajo de Grafana que admiten la versión 8.x de Grafana, consulte Uso de la versión 8 de Grafana.
Use el proveedor de Grafana de Terraform para administrar sus recursos de alertas y aprovisionarlos en su sistema Grafana. La compatibilidad del proveedor de Terraform con Grafana Alerting facilita la creación, la administración y el mantenimiento de toda su pila de Grafana Alerting 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
Complete las siguientes tareas para crear y administrar sus recursos de alertas con Terraform.
-
Cree una clave de API para el aprovisionamiento.
-
Configure el proveedor de Terraform.
-
Defina sus recursos de alerta en Terraform.
-
Ejecute
terraform apply
para aprovisionar sus recursos de alerta.
Requisitos previos
-
Compruebe que tenga Grafana o el proveedor de Terraform
de Grafana 1.27.0 o posterior. -
Compruebe que use Grafana 9.1 o posterior. Si creó su instancia de Amazon Managed Grafana con la versión 9 de Grafana, será verdadero.
Creación de 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 la nueva compatibilidad de Grafana Alerting. Para obtener información específica sobre la creación de claves para su uso con Terraform, consulte Using Terraform for Amazon Managed Grafana automation
Creación de una clave de API para el aprovisionamiento
-
Cree una nueva cuenta de servicio para su canalización de CI.
-
Asigne el rol “Acceder a la API de aprovisionamiento de las reglas de alerta”.
-
Cree un nuevo token para la cuenta de servicio.
-
Asigne un nombre al token y guárdelo para usarlo en Terraform.
También puede usar la autenticación básica. Para ver todos los formatos de autenticación compatibles, consulte Grafana authentication
Configuración del proveedor de Terraform
La compatibilidad de Grafana Alerting se incluye como parte del proveedor de Terraform de Grafana
A continuación, se ofrece 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> }
Aprovisionar los puntos de contacto y las plantillas
Los puntos de contacto conectan una pila de alertas con el mundo exterior. Indican a Grafana cómo conectarse a los sistemas externos y dónde enviar las notificaciones. Hay más de 15 integraciones
Aprovisionamiento de puntos de contacto y las plantillas
-
Copie este bloque de código en un archivo .tf en su máquina local. Sustituya
<slack-webhook-url>
por la URL de su 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 } } -
Ingrese el texto de la notificación en el campo de texto.
El campo
text
admite plantillas al estilo de Go. Esto le permite administrar sus plantillas de notificaciones de Grafana Alerting directamente en Terraform. -
Ejecute el comando
terraform apply
. -
Vaya a la interfaz de usuario de Grafana y compruebe los detalles de su punto de contacto.
No puede editar los recursos aprovisionados mediante Terraform desde la interfaz de usuario. Esto garantiza que su pila de alertas esté siempre sincronizada con su código.
-
Haga clic en Probar para verificar 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 instrucció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 }
Aprovisionar las políticas de notificación y el enrutamiento
Las políticas de notificación le indican a Grafana cómo enrutar las instancias de alerta, en lugar de hacia dónde. Conectan las alertas de activación con los puntos de contacto previamente definidos mediante un sistema de etiquetas y criterios de coincidencia.
Aprovisionamiento de políticas de notificación y enrutamiento
-
Copie este bloque de código en un archivo .tf en su máquina local.
En este ejemplo, las alertas se agrupan por
alertname
, lo que significa que cualquier notificación procedente de alertas que compartan el mismo nombre se agrupa en el mismo mensaje de Slack.Si quiere redirigir notificaciones específicas de forma diferente, puede agregar subpolíticas. Las subpolíticas le permiten aplicar el enrutamiento a diferentes alertas en función de la coincidencia de etiquetas. En este ejemplo, aplicamos un temporizador 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 = ["..."] } } }
-
En el campo mute_timings, vincule un temporizador de silencio con su política de notificaciones.
-
Ejecute el comando
terraform apply
. -
Vaya a la interfaz de usuario de Grafana y compruebe los detalles de su política de notificaciones.
nota
No puede editar los recursos aprovisionados mediante Terraform desde la interfaz de usuario. Esto garantiza que su pila de alertas esté siempre sincronizada con su código.
-
Haga clic en Probar para verificar que el punto de notificación funciona correctamente.
Aprovisionar temporizadores de silencio
Los temporizadores de silencio permiten silenciar las notificaciones de alerta durante periodos de tiempo definidos.
Aprovisionamiento de temporizadores de silencio
-
Copie este bloque de código en un archivo .tf en su 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"] } }
-
Ejecute el comando
terraform apply
. -
Vaya a la interfaz de usuario de Grafana y compruebe los detalles de su temporizador de silencio.
-
Use el campo
mute_timings
para hacer referencia al temporizador de silencio que acaba de crear en una política de notificaciones. De este modo, se aplicará el temporizador de silencio a algunas o a todas las notificaciones.nota
No puede editar los recursos aprovisionados mediante Terraform desde la interfaz de usuario. Esto garantiza que su pila de alertas esté siempre sincronizada con su código.
-
Haga clic en Probar para verificar que el temporizador de silencio funciona correctamente.
Aprovisionar reglas de alerta
Las reglas de alertas le permiten enviar alertas de cualquier origen de datos de Grafana. Puede ser un origen de datos que ya haya configurado, o puede definir sus orígenes de datos en Terraform
Aprovisionamiento de reglas de alerta
-
Cree el origen de datos que se va a consultar y una carpeta en la que almacenar las reglas.
En este ejemplo, se usa el origen de datos Configuración de un origen de datos TestData para hacer pruebas.
Las alertas se pueden definir en cualquier origen de datos de backend de Grafana.
resource "grafana_data_source" "testdata_datasource" { name = "TestData" type = "testdata" } resource "grafana_folder" "rule_folder" { title = "My Rule Folder" }
-
Defina una regla de alerta.
Para obtener más información sobre las reglas de alerta, consulte cómo crear alertas administradas por Grafana
. -
Cree un grupo de reglas que contenga una o más reglas.
En este ejemplo, se usa el grupo de recursos
grafana_rule_group
.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" }) } } }
-
Vaya a la interfaz de usuario de Grafana y compruebe su regla de alerta.
De esta forma podrá ver si la regla de alerta se activa. También puede ver una visualización de cada una de las fases 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 haya definido.
Por ejemplo, si elige Slack como punto de contacto, Alertmanager
integrado de Grafana publica automáticamente un mensaje en Slack.