Crea e gestisci risorse di avviso utilizzando Terraform - Grafana gestito da Amazon

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Crea e gestisci risorse di avviso utilizzando Terraform

Questo argomento della documentazione è progettato per le aree di lavoro Grafana che supportano la versione 9.x di Grafana.

Per le aree di lavoro Grafana che supportano la versione 10.x di Grafana, vedere. Funzionamento nella versione 10 di Grafana

Per le aree di lavoro Grafana che supportano la versione 8.x di Grafana, vedere. Funzionamento in Grafana versione 8

Usa il provider Grafana di Terraform per gestire le tue risorse di avviso e fornirle nel tuo sistema Grafana. Il supporto del provider Terraform per Grafana Alerting semplifica la creazione, la gestione e la manutenzione dell'intero stack Grafana Alerting come codice.

Per ulteriori informazioni sulla gestione delle risorse di avviso utilizzando Terraform, consulta la documentazione di Grafana Provider nella documentazione di Terraform.

Completa le seguenti attività per creare e gestire le tue risorse di avviso utilizzando Terraform.

  1. Crea una chiave API per il provisioning.

  2. Configura il provider Terraform.

  3. Definisci le tue risorse di avviso in Terraform.

  4. Corri terraform apply a fornire le tue risorse di avviso.

Prerequisiti

  • Assicurati di avere il provider grafana/grafana Terraform 1.27.0 o versioni successive.

  • Assicurati di utilizzare Grafana 9.1 o versioni successive. Se hai creato la tua istanza Amazon Managed Grafana con Grafana versione 9, questo sarà vero.

Crea una chiave API per il provisioning

Puoi creare una normale chiave API Grafana per autenticare Terraform con Grafana. La maggior parte degli strumenti esistenti che utilizzano chiavi API dovrebbe funzionare automaticamente con il nuovo supporto Grafana Alerting. Per informazioni specifiche sulla creazione di chiavi da utilizzare con Terraform, consulta Using Terraform for Amazon Managed Grafana automation.

Per creare una chiave API per il provisioning
  1. Crea un nuovo account di servizio per la tua pipeline CI.

  2. Assegna il ruolo «Accedi all'API di provisioning delle regole di avviso».

  3. Crea un nuovo token per l'account di servizio.

  4. Assegna un nome e salva il token per utilizzarlo in Terraform.

In alternativa, puoi utilizzare l'autenticazione di base. Per visualizzare tutti i formati di autenticazione supportati, consulta l'autenticazione Grafana nella documentazione di Terraform.

Configura il provider Terraform

Il supporto Grafana Alerting è incluso come parte del provider Grafana Terraform.

Di seguito è riportato un esempio che è possibile utilizzare per configurare il provider Terraform.

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

Fornisci punti di contatto e modelli

I punti di contatto collegano uno stack di avvisi al mondo esterno. Spiegano a Grafana come connettersi ai sistemi esterni e dove inviare le notifiche. Ci sono oltre quindici diverse integrazioni tra cui scegliere. Questo esempio utilizza un punto di contatto Slack.

Per fornire punti di contatto e modelli
  1. Copia questo blocco di codice in un file.tf sul tuo computer locale. Sostituisci < slack-webhook-url > con l'URL del webhook di Slack (o un altro contatto)

    Questo esempio crea un punto di contatto che invia notifiche di avviso 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. Inserisci il testo per la notifica nel campo di testo.

    Il text campo supporta modelli in stile Go. Ciò ti consente di gestire i tuoi modelli di notifica Grafana Alerting direttamente in Terraform.

  3. Esegui il comando terraform apply.

  4. Vai all'interfaccia utente di Grafana e controlla i dettagli del tuo punto di contatto.

    Non è possibile modificare le risorse fornite tramite Terraform dall'interfaccia utente. Ciò garantisce che lo stack di avvisi rimanga sempre sincronizzato con il codice.

  5. Fai clic su Test per verificare che il punto di contatto funzioni correttamente.

Nota

Puoi riutilizzare gli stessi modelli in molti punti di contatto. Nell'esempio precedente, un modello condiviso viene incorporato utilizzando l'istruzione {{ template "Alert Instance Template" . }}

Questo frammento può quindi essere gestito separatamente in 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 }

Fornisci politiche e routing di notifica

Le politiche di notifica indicano a Grafana come indirizzare le istanze di avviso, anziché dove. Collegano gli avvisi di attivazione ai punti di contatto precedentemente definiti utilizzando un sistema di etichette e abbinatori.

Per fornire politiche di notifica e routing
  1. Copia questo blocco di codice in un file.tf sul tuo computer locale.

    In questo esempio, gli avvisi sono raggruppati peralertname, il che significa che tutte le notifiche provenienti da avvisi con lo stesso nome vengono raggruppate nello stesso messaggio Slack.

    Se desideri indirizzare notifiche specifiche in modo diverso, puoi aggiungere delle politiche secondarie. Le politiche secondarie consentono di applicare il routing a diversi avvisi in base alla corrispondenza delle etichette. In questo esempio, applichiamo una tempistica di silenziamento a tutti gli avvisi con l'etichetta 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. Nel campo mute_timings, collega una tempistica di silenziamento alla tua politica di notifica.

  3. Esegui il comando terraform apply.

  4. Vai all'interfaccia utente di Grafana e controlla i dettagli della tua politica di notifica.

    Nota

    Non è possibile modificare le risorse fornite da Terraform dall'interfaccia utente. Ciò garantisce che lo stack di avvisi rimanga sempre sincronizzato con il codice.

  5. Fai clic su Test per verificare che il punto di notifica funzioni correttamente.

Fornisci tempi di silenziamento

Le tempistiche di silenziamento offrono la possibilità di disattivare le notifiche di avviso per periodi di tempo definiti.

Per fornire tempi di silenziamento
  1. Copia questo blocco di codice in un file.tf sul tuo computer locale.

    In questo esempio, le notifiche di avviso vengono disattivate nei fine settimana.

    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. Esegui il comando terraform apply.

  3. Vai all'interfaccia utente di Grafana e controlla i dettagli della tua tempistica di silenziamento.

  4. Fai riferimento alla tempistica di silenziamento appena creata in una politica di notifica utilizzando il campo. mute_timings In questo modo la tempistica di silenziamento verrà applicata ad alcune o a tutte le notifiche.

    Nota

    Non è possibile modificare le risorse fornite da Terraform dall'interfaccia utente. Ciò garantisce che lo stack di avvisi rimanga sempre sincronizzato con il codice.

  5. Fai clic su Test per verificare che la tempistica di silenziamento funzioni correttamente.

Fornisci regole di avviso

Le regole di avviso consentono di inviare avvisi su qualsiasi fonte di dati Grafana. Questa può essere una fonte di dati che hai già configurato, oppure puoi definire le tue fonti di dati in Terraform insieme alle regole di avviso.

Per fornire regole di avviso
  1. Crea una fonte di dati su cui interrogare e una cartella in cui archiviare le regole.

    In questo esempio, viene utilizzata la fonte di Configurare un'origine TestData dati per i test dati.

    Gli avvisi possono essere definiti su qualsiasi origine dati di backend in Grafana.

    resource "grafana_data_source" "testdata_datasource" { name = "TestData" type = "testdata" } resource "grafana_folder" "rule_folder" { title = "My Rule Folder" }
  2. Definisci una regola di avviso.

    Per ulteriori informazioni sulle regole di avviso, consulta come creare avvisi gestiti da Grafana.

  3. Crea un gruppo di regole contenente una o più regole.

    In questo esempio, viene utilizzato il gruppo di grafana_rule_group risorse.

    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. Vai all'interfaccia utente di Grafana e controlla la tua regola di avviso.

    Puoi vedere se la regola di avviso è attiva. È inoltre possibile visualizzare una visualizzazione di ciascuna delle fasi di interrogazione della regola di avviso.

    Quando viene attivato l'avviso, Grafana indirizza una notifica attraverso la politica che hai definito.

    Ad esempio, se hai scelto Slack come punto di contatto, l'Alertmanager integrato di Grafana pubblica automaticamente un messaggio su Slack.