

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Erstellen und verwalten Sie Warnressourcen mit Terraform
<a name="v9-alerting-setup-provision-terraform"></a>

****  
Dieses Dokumentationsthema wurde für Grafana-Workspaces entwickelt, die **Grafana-Version 9.x** unterstützen.  
Informationen zu Grafana-Arbeitsbereichen, die Grafana-Version 10.x unterstützen, finden Sie unter. [Arbeitet in Grafana-Version 10](using-grafana-v10.md)  
Informationen zu Grafana-Arbeitsbereichen, die Grafana-Version 8.x unterstützen, finden Sie unter. [Arbeitet in Grafana-Version 8](using-grafana-v8.md)

Verwenden Sie den Grafana-Anbieter von Terraform, um Ihre Alarmressourcen zu verwalten und sie in Ihrem Grafana-System bereitzustellen. Die Terraform-Anbieterunterstützung für Grafana Alerting macht es einfach, Ihren gesamten Grafana Alerting Stack als Code zu erstellen, zu verwalten und zu warten.

Weitere Informationen zur Verwaltung Ihrer Benachrichtigungsressourcen mit Terraform finden Sie in der [Grafana-Provider-Dokumentation](https://registry.terraform.io/providers/grafana/grafana/latest/docs) in der Terraform-Dokumentation.

Führen Sie die folgenden Aufgaben aus, um Ihre Benachrichtigungsressourcen mit Terraform zu erstellen und zu verwalten.

1. Erstellen Sie einen API-Schlüssel für die Bereitstellung.

1. Konfigurieren Sie den Terraform-Anbieter.

1. Definieren Sie Ihre Benachrichtigungsressourcen in Terraform.

1. Führen Sie aus`terraform apply`, um Ihre Alarm-Ressourcen bereitzustellen.

## Voraussetzungen
<a name="v9-alerting-setup-provision-tf-prerequisites"></a>
+ Stellen Sie sicher, dass Sie den grafana/grafana [Terraform-Anbieter](https://registry.terraform.io/providers/grafana/grafana/1.28.0) 1.27.0 oder höher haben.
+ Stellen Sie sicher, dass Sie Grafana 9.1 oder höher verwenden. Wenn Sie Ihre Amazon Managed Grafana-Instance mit Grafana-Version 9 erstellt haben, trifft dies zu.

## Erstellen Sie einen API-Schlüssel für die Bereitstellung
<a name="v9-alerting-setup-provision-tf-apikey"></a>

Sie können [einen normalen Grafana-API-Schlüssel erstellen, um Terraform mit Grafana](Using-Grafana-APIs.md) zu authentifizieren. Die meisten vorhandenen Tools, die API-Schlüssel verwenden, sollten automatisch mit der neuen Grafana Alerting-Unterstützung funktionieren. Informationen speziell zum Erstellen von Schlüsseln für die Verwendung mit Terraform finden Sie unter [Verwenden von Terraform für die Amazon](https://aws-observability.github.io/observability-best-practices/recipes/recipes/amg-automation-tf/) Managed Grafana-Automatisierung.

**So erstellen Sie einen API-Schlüssel für die Bereitstellung**

1. Erstellen Sie ein neues Dienstkonto für Ihre CI-Pipeline.

1. Weisen Sie die Rolle „Access the Alert Rules Provisioning API“ zu.

1. Erstellen Sie ein neues Dienstkonto-Token.

1. Benennen und speichern Sie das Token zur Verwendung in Terraform.

Alternativ können Sie die Standardauthentifizierung verwenden. Alle unterstützten Authentifizierungsformate finden Sie unter [Grafana-Authentifizierung](https://registry.terraform.io/providers/grafana/grafana/latest/docs#authentication) in der Terraform-Dokumentation.

## Konfigurieren Sie den Terraform-Anbieter
<a name="v9-alerting-setup-provision-tf-configure"></a>

Die Unterstützung von Grafana Alerting ist im [Grafana](https://registry.terraform.io/providers/grafana/grafana/latest/docs) Terraform-Anbieter enthalten.

Im Folgenden finden Sie ein Beispiel, mit dem Sie den Terraform-Anbieter konfigurieren können.

```
terraform {
    required_providers {
        grafana = {
            source = "grafana/grafana"
            version = ">= 1.28.2"
        }
    }
}

provider "grafana" {
    url = <YOUR_GRAFANA_URL>
    auth = <YOUR_GRAFANA_API_KEY>
}
```

## Stellen Sie Kontaktpunkte und Vorlagen bereit
<a name="v9-alerting-setup-provision-tf-contacts"></a>

Kontaktstellen verbinden einen Alarm-Stack mit der Außenwelt. Sie teilen Grafana mit, wie Sie sich mit Ihren externen Systemen verbinden und wo Benachrichtigungen zugestellt werden sollen. Es stehen über fünfzehn verschiedene [Integrationen](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/contact_point#optional) zur Auswahl. In diesem Beispiel wird ein Slack-Kontaktpunkt verwendet.

**Um Kontaktpunkte und Vorlagen bereitzustellen**

1. Kopieren Sie diesen Codeblock in eine .tf-Datei auf Ihrem lokalen Computer. Ersetze es *<slack-webhook-url>* durch deine Slack-Webhook-URL (oder einen anderen Kontakt).

   In diesem Beispiel wird eine Kontaktstelle erstellt, die Warnmeldungen an Slack sendet.

   ```
   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. Gib Text für deine Benachrichtigung in das Textfeld ein.

   Das `text` Feld unterstützt [Templating im GO-Stil](https://pkg.go.dev/text/template). Auf diese Weise können Sie Ihre Grafana-Benachrichtigungsvorlagen direkt in Terraform verwalten.

1. Führen Sie den Befehl `terraform apply` aus.

1. Gehen Sie zur Grafana-Benutzeroberfläche und überprüfen Sie die Details Ihrer Kontaktstelle.

   Sie können über Terraform bereitgestellte Ressourcen nicht über die Benutzeroberfläche bearbeiten. Dadurch wird sichergestellt, dass Ihr Alert-Stack immer mit Ihrem Code synchron bleibt.

1. Klicken Sie auf **Test**, um zu überprüfen, ob die Kontaktstelle ordnungsgemäß funktioniert.

**Anmerkung**  
Sie können dieselben Vorlagen an vielen Kontaktpunkten wiederverwenden. Im obigen Beispiel wird eine gemeinsam genutzte Vorlage mithilfe der Anweisung eingebettet `{{ template "Alert Instance Template" . }}`  
Dieses Fragment kann dann separat in Terraform verwaltet werden:  

```
resource "grafana_message_template" "my_alert_template" {
    name = "Alert Instance Template"

    template = <<EOT
{{ define "Alert Instance Template" }}
Firing: {{ .Labels.alertname }}
Silence: {{ .SilenceURL }}
{{ end }}
EOT
}
```

## Bereitstellen von Benachrichtigungsrichtlinien und Routing
<a name="v9-alerting-setup-provision-tf-notifications"></a>

Benachrichtigungsrichtlinien teilen Grafana mit, wie Alarminstanzen weitergeleitet werden sollen, und nicht wohin. Sie verbinden ausgelöste Alarme mithilfe eines Systems von Labels und Matchern mit Ihren zuvor definierten Kontaktpunkten.

**Zur Bereitstellung von Benachrichtigungsrichtlinien und Routing**

1. Kopieren Sie diesen Codeblock in eine .tf-Datei auf Ihrem lokalen Computer.

   In diesem Beispiel werden die Benachrichtigungen nach gruppiert`alertname`, was bedeutet, dass alle Benachrichtigungen, die von Benachrichtigungen stammen, die denselben Namen haben, in derselben Slack-Nachricht gruppiert werden.

   Wenn du bestimmte Benachrichtigungen unterschiedlich weiterleiten möchtest, kannst du Unterrichtlinien hinzufügen. Mithilfe von Unterrichtlinien können Sie das Routing auf verschiedene Benachrichtigungen anwenden, die auf der Zuordnung von Bezeichnungen basieren. In diesem Beispiel wenden wir eine Stummschaltung auf alle Alarme mit der Bezeichnung a=b an.

   ```
   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. Verknüpfen Sie im Feld mute\$1timings einen Zeitpunkt der Stummschaltung mit Ihrer Benachrichtigungsrichtlinie.

1. Führen Sie den Befehl `terraform apply` aus.

1. Gehen Sie zur Grafana-Benutzeroberfläche und überprüfen Sie die Details Ihrer Benachrichtigungsrichtlinie.
**Anmerkung**  
Sie können die von Terraform bereitgestellten Ressourcen nicht über die Benutzeroberfläche bearbeiten. Dadurch wird sichergestellt, dass Ihr Benachrichtigungsstapel immer mit Ihrem Code synchron bleibt.

1. Klicken Sie auf **Test**, um zu überprüfen, ob der Benachrichtigungspunkt ordnungsgemäß funktioniert.

## Stellen Sie Zeiten zur Stummschaltung bereit
<a name="v9-alerting-setup-provision-tf-mutetiming"></a>

Stummschaltungen bieten die Möglichkeit, Warnmeldungen für bestimmte Zeiträume stummzuschalten.

**Zur Bereitstellung von Timings für die Stummschaltung**

1. Kopieren Sie diesen Codeblock in eine .tf-Datei auf Ihrem lokalen Computer.

   In diesem Beispiel sind Warnmeldungen am Wochenende stummgeschaltet.

   ```
   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. Führen Sie den Befehl `terraform apply` aus.

1. Gehen Sie zur Grafana-Benutzeroberfläche und überprüfen Sie die Details Ihres Mute-Timings.

1. Verweisen Sie mithilfe des `mute_timings` Felds in einer Benachrichtigungsrichtlinie auf Ihr neu erstelltes Timing für die Stummschaltung. Dadurch wird dein Timing für die Stummschaltung auf einige oder alle deine Benachrichtigungen angewendet.
**Anmerkung**  
Sie können die von Terraform bereitgestellten Ressourcen nicht über die Benutzeroberfläche bearbeiten. Dadurch wird sichergestellt, dass Ihr Benachrichtigungsstapel immer mit Ihrem Code synchron bleibt.

1. Klicken Sie auf **Test**, um zu überprüfen, ob das Timing der Stummschaltung korrekt funktioniert.

## Regeln für Warnmeldungen bereitstellen
<a name="v9-alerting-setup-provision-tf-rules"></a>

[Mit Warnungsregeln](v9-alerting-managerules.md) können Sie vor jeder Grafana-Datenquelle warnen. Dies kann eine Datenquelle sein, die Sie bereits konfiguriert haben, oder Sie können [Ihre Datenquellen in Terraform zusammen mit Ihren Warnungsregeln definieren](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/data_source).

**Um Warnungsregeln bereitzustellen**

1. Erstellen Sie eine Datenquelle für die Abfrage und einen Ordner zum Speichern Ihrer Regeln.

   In diesem Beispiel wird die [Konfigurieren Sie eine TestData Datenquelle zum Testen](testdata-data-source.md) Datenquelle verwendet.

   Alerts können für jede Backend-Datenquelle in Grafana definiert werden.

   ```
   resource "grafana_data_source" "testdata_datasource" {
       name = "TestData"
       type = "testdata"
   }
   
   resource "grafana_folder" "rule_folder" {
       title = "My Rule Folder"
   }
   ```

1. Definieren Sie eine Warnungsregel.

   Weitere Informationen zu Warnungsregeln finden Sie unter [So erstellen Sie von Grafana](https://grafana.com/blog/2022/08/01/grafana-alerting-video-how-to-create-alerts-in-grafana-9/) verwaltete Benachrichtigungen.

1. Erstellen Sie eine Regelgruppe, die eine oder mehrere Regeln enthält.

   In diesem Beispiel wird die `grafana_rule_group` Ressourcengruppe verwendet.

   ```
   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. Gehen Sie zur Grafana-Benutzeroberfläche und überprüfen Sie Ihre Alarmregel.

   Sie können sehen, ob die Warnregel ausgelöst wird. Sie können sich auch eine Visualisierung der einzelnen Abfrageschritte der Warnungsregel anzeigen lassen.

   Wenn die Warnung ausgelöst wird, leitet Grafana eine Benachrichtigung über die von Ihnen definierte Richtlinie weiter.

   Wenn du beispielsweise Slack als Kontaktstelle ausgewählt hast, sendet der eingebettete [Alertmanager](https://github.com/prometheus/alertmanager) von Grafana automatisch eine Nachricht an Slack.