Erstellen und verwalten Sie Warnressourcen mit Terraform - Amazon Managed Grafana

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

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

Informationen zu Grafana-Arbeitsbereichen, die Grafana-Version 8.x unterstützen, finden Sie unter. Arbeitet in Grafana-Version 8

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

  2. Konfigurieren Sie den Terraform-Anbieter.

  3. Definieren Sie Ihre Benachrichtigungsressourcen in Terraform.

  4. Führen Sie das Programm austerraform apply, um Ihre Alarm-Ressourcen bereitzustellen.

Voraussetzungen

  • Stellen Sie sicher, dass Sie den Grafana/Grafana Terraform-Anbieter 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

Sie können einen normalen Grafana-API-Schlüssel erstellen, um Terraform mit Grafana 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 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.

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

  3. Erstellen Sie ein neues Dienstkonto-Token.

  4. Benennen und speichern Sie das Token für die Verwendung in Terraform.

Alternativ können Sie die Standardauthentifizierung verwenden. Alle unterstützten Authentifizierungsformate finden Sie unter Grafana-Authentifizierung in der Terraform-Dokumentation.

Konfigurieren Sie den Terraform-Anbieter

Die Unterstützung von Grafana Alerting ist im Grafana 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

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

    Das text Feld unterstützt Templating im GO-Stil. Auf diese Weise können Sie Ihre Grafana-Benachrichtigungsvorlagen direkt in Terraform verwalten.

  3. Führen Sie den Befehl terraform apply aus.

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

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

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 gruppiertalertname, 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 = ["..."] } } }
  2. Verknüpfen Sie im Feld mute_timings einen Zeitpunkt der Stummschaltung mit Ihrer Benachrichtigungsrichtlinie.

  3. Führen Sie den Befehl terraform apply aus.

  4. 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 Alert-Stack immer mit Ihrem Code synchron bleibt.

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

Stellen Sie Zeiten zur Stummschaltung bereit

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"] } }
  2. Führen Sie den Befehl terraform apply aus.

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

  4. 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 Alert-Stack immer mit Ihrem Code synchron bleibt.

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

Regeln für Warnmeldungen bereitstellen

Mit Warnungsregeln 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.

Um Warnungsregeln bereitzustellen
  1. Erstellen Sie eine Datenquelle für die Abfrage und einen Ordner, in dem Sie Ihre Regeln speichern möchten.

    In diesem Beispiel wird die Konfigurieren Sie eine TestData Datenquelle zum Testen 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" }
  2. Definieren Sie eine Warnungsregel.

    Weitere Informationen zu Warnungsregeln finden Sie unter So erstellen Sie von Grafana verwaltete Benachrichtigungen.

  3. 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" }) } } }
  4. 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 von Grafana automatisch eine Nachricht an Slack.