

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.

# Creación y administración de recursos de alertas con Terraform
<a name="v9-alerting-setup-provision-terraform"></a>

****  
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](using-grafana-v10.md).  
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](using-grafana-v8.md).

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](https://registry.terraform.io/providers/grafana/grafana/latest/docs) 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.

1. Configure el proveedor de Terraform.

1. Defina sus recursos de alerta en Terraform.

1. Ejecute `terraform apply` para aprovisionar sus recursos de alerta.

## Requisitos previos
<a name="v9-alerting-setup-provision-tf-prerequisites"></a>
+ Asegúrese de tener el [proveedor grafana/grafana Terraform](https://registry.terraform.io/providers/grafana/grafana/1.28.0) 1.27.0 o superior.
+ 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
<a name="v9-alerting-setup-provision-tf-apikey"></a>

Puede [crear una clave de API de Grafana normal](Using-Grafana-APIs.md) 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](https://aws-observability.github.io/observability-best-practices/recipes/recipes/amg-automation-tf/).

**Creación de una clave de API para el aprovisionamiento**

1. Cree una nueva cuenta de servicio para su canalización de CI.

1. Asigne el rol “Acceder a la API de aprovisionamiento de las reglas de alerta”.

1. Cree un nuevo token para la cuenta de servicio.

1. 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](https://registry.terraform.io/providers/grafana/grafana/latest/docs#authentication) en la documentación de Terraform.

## Configuración del proveedor de Terraform
<a name="v9-alerting-setup-provision-tf-configure"></a>

La compatibilidad de Grafana Alerting se incluye como parte del [proveedor de Terraform de Grafana](https://registry.terraform.io/providers/grafana/grafana/latest/docs).

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>
}
```

## Aprovisionamiento de puntos de contacto y plantillas
<a name="v9-alerting-setup-provision-tf-contacts"></a>

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](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/contact_point#optional) diferentes entre las que elegir. En este ejemplo, se utiliza un punto de contacto de Slack.

**Aprovisionamiento de puntos de contacto y las plantillas**

1. Copie este bloque de código en un archivo .tf en su máquina local. *<slack-webhook-url>*Sustitúyelo por la URL del 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
       }
   }
   ```

1. Ingrese el texto de la notificación en el campo de texto.

   El campo `text` admite [plantillas al estilo de Go](https://pkg.go.dev/text/template). Esto le permite administrar sus plantillas de notificaciones de Grafana Alerting directamente en Terraform.

1. Ejecute el comando `terraform apply`.

1. 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.

1. 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
}
```

## Aprovisionamiento de políticas de notificación y el enrutamiento
<a name="v9-alerting-setup-provision-tf-notifications"></a>

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**

1. 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 = ["..."]
           }
       }
   }
   ```

1. En el campo mute\$1timings, vincule un temporizador de silencio con su política de notificaciones.

1. Ejecute el comando `terraform apply`.

1. 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.

1. Haga clic en **Probar** para verificar que el punto de notificación funciona correctamente.

## Aprovisionamiento de temporizadores de silencio
<a name="v9-alerting-setup-provision-tf-mutetiming"></a>

Los temporizadores de silencio permiten silenciar las notificaciones de alerta durante periodos de tiempo definidos.

**Aprovisionamiento de temporizadores de silencio**

1. 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"]
       }
   }
   ```

1. Ejecute el comando `terraform apply`.

1. Vaya a la interfaz de usuario de Grafana y compruebe los detalles de su temporizador de silencio.

1. 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.

1. Haga clic en **Probar** para verificar que el temporizador de silencio funciona correctamente.

## Aprovisionamiento de reglas de alerta
<a name="v9-alerting-setup-provision-tf-rules"></a>

Las [reglas de alertas](v9-alerting-managerules.md) 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](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/data_source) junto con sus reglas de alerta.

**Aprovisionamiento de reglas de alerta**

1. 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 [Configurar una fuente TestData de datos para realizar pruebas](testdata-data-source.md).

   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"
   }
   ```

1. Defina una regla de alerta.

   Para obtener más información sobre las reglas de alerta, consulte [cómo crear alertas administradas por Grafana](https://grafana.com/blog/2022/08/01/grafana-alerting-video-how-to-create-alerts-in-grafana-9/).

1. 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"
               })
           }
       }
   }
   ```

1. 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](https://github.com/prometheus/alertmanager) integrado de Grafana publica automáticamente un mensaje en Slack.