Créez et gérez des ressources d'alerte à l'aide de Terraform - Amazon Managed Grafana

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Créez et gérez des ressources d'alerte à l'aide de Terraform

Cette rubrique de documentation est conçue pour les espaces de travail Grafana compatibles avec la version 10.x de Grafana.

Pour les espaces de travail Grafana compatibles avec la version 9.x de Grafana, voir. Travailler dans la version 9 de Grafana

Pour les espaces de travail Grafana compatibles avec la version 8.x de Grafana, voir. Travailler dans la version 8 de Grafana

Utilisez le fournisseur Grafana de Terraform pour gérer vos ressources d'alerte et les intégrer à votre système Grafana. Le support des fournisseurs Terraform pour Grafana Alerting facilite la création, la gestion et la maintenance de l'ensemble de votre pile d'alertes Grafana sous forme de code.

Pour plus d'informations sur la gestion de vos ressources d'alerte à l'aide de Terraform, consultez la documentation du fournisseur Grafana dans la documentation Terraform.

Effectuez les tâches suivantes pour créer et gérer vos ressources d'alerte à l'aide de Terraform.

  1. Créez une clé d'API pour le provisionnement.

  2. Configurez le fournisseur Terraform.

  3. Définissez vos ressources d'alerte dans Terraform.

  4. Exécutez terraform apply pour approvisionner vos ressources d'alerte.

Prérequis

  • Assurez-vous d'avoir le fournisseur grafana/grafana Terraform 1.27.0 ou supérieur.

  • Assurez-vous d'utiliser Grafana 9.1 ou une version ultérieure. Si vous avez créé votre instance Amazon Managed Grafana avec la version 9 de Grafana, cela sera vrai.

Création d'une clé d'API pour le provisionnement

Vous pouvez créer une clé d'API Grafana normale pour authentifier Terraform auprès de Grafana. La plupart des outils existants utilisant des clés d'API devraient fonctionner automatiquement avec le nouveau support Grafana Alerting. Pour des informations spécifiques sur la création de clés à utiliser avec Terraform, consultez Utilisation de Terraform pour l'automatisation d'Amazon Managed Grafana.

Pour créer une clé d'API pour le provisionnement
  1. Créez un nouveau compte de service pour votre pipeline CI.

  2. Attribuez le rôle « Accéder à l'API de provisionnement des règles d'alerte ».

  3. Créez un nouveau jeton de compte de service.

  4. Nommez et enregistrez le jeton pour l'utiliser dans Terraform.

Vous pouvez également utiliser l'authentification de base. Pour voir tous les formats d'authentification pris en charge, voir Authentification Grafana dans la documentation Terraform.

Configurer le fournisseur Terraform

Le support Grafana Alerting est inclus dans le fournisseur Grafana Terraform.

Voici un exemple que vous pouvez utiliser pour configurer le fournisseur Terraform.

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

Fournir des points de contact et des modèles

Les points de contact relient une pile d'alertes au monde extérieur. Ils indiquent à Grafana comment se connecter à vos systèmes externes et où envoyer les notifications. Vous avez le choix entre plus de quinze intégrations différentes. Cet exemple utilise un point de contact Slack.

Pour fournir des points de contact et des modèles
  1. Copiez ce bloc de code dans un fichier .tf sur votre machine locale. Remplacez < slack-webhook-url > par l'URL de votre webhook Slack (ou d'autres informations de point de contact).

    Cet exemple crée un point de contact qui envoie des notifications d'alerte à 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. Entrez le texte de votre notification dans le champ de texte.

    Le text champ prend en charge les modèles de style GO. Cela vous permet de gérer vos modèles de notification Grafana Alerting directement dans Terraform.

  3. Exécutez la commande terraform apply.

  4. Accédez à l'interface utilisateur de Grafana et vérifiez les coordonnées de votre point de contact.

    Vous ne pouvez pas modifier les ressources fournies via Terraform depuis l'interface utilisateur. Cela garantit que votre pile d'alertes reste toujours synchronisée avec votre code.

  5. Cliquez sur Tester pour vérifier que le point de contact fonctionne correctement.

Note

Vous pouvez réutiliser les mêmes modèles pour de nombreux points de contact. Dans l'exemple ci-dessus, un modèle partagé est intégré à l'aide de l'instruction {{ template "Alert Instance Template" . }}

Ce fragment peut ensuite être géré séparément dans 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 }

Provisionner les politiques de notification et le routage

Les politiques de notification indiquent à Grafana comment acheminer les instances d'alerte, et non leur localisation. Ils connectent les alertes de tir à vos points de contact préalablement définis à l'aide d'un système d'étiquettes et de matchers.

Pour configurer les politiques de notification et le routage
  1. Copiez ce bloc de code dans un fichier .tf sur votre machine locale.

    Dans cet exemple, les alertes sont regroupées paralertname, ce qui signifie que toutes les notifications provenant d'alertes portant le même nom sont regroupées dans le même message Slack.

    Si vous souhaitez acheminer des notifications spécifiques différemment, vous pouvez ajouter des sous-politiques. Les sous-politiques vous permettent d'appliquer un routage à différentes alertes en fonction de la correspondance des étiquettes. Dans cet exemple, nous appliquons une temporisation muette à toutes les alertes portant le label 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. Dans le champ mute_timings, associez une temporisation muette à votre politique de notification.

  3. Exécutez la commande terraform apply.

  4. Accédez à l'interface utilisateur de Grafana et vérifiez les détails de votre politique de notification.

    Note

    Vous ne pouvez pas modifier les ressources fournies par Terraform depuis l'interface utilisateur. Cela garantit que votre pile d'alertes reste toujours synchronisée avec votre code.

  5. Cliquez sur Tester pour vérifier que le point de notification fonctionne correctement.

Provisionner les horaires de mise en sourdine

Les horaires de mise en sourdine permettent de désactiver les notifications d'alerte pendant des périodes définies.

Pour configurer les horaires de mise en sourdine
  1. Copiez ce bloc de code dans un fichier .tf sur votre machine locale.

    Dans cet exemple, les notifications d'alerte sont désactivées le week-end.

    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. Exécutez la commande terraform apply.

  3. Accédez à l'interface utilisateur de Grafana et vérifiez les détails de votre temps de sourdine.

  4. Référencez le délai de mise en sourdine que vous venez de créer dans une politique de notification à l'aide du mute_timings champ. Cela appliquera votre temps de sourdine à certaines ou à toutes vos notifications.

    Note

    Vous ne pouvez pas modifier les ressources fournies par Terraform depuis l'interface utilisateur. Cela garantit que votre pile d'alertes reste toujours synchronisée avec votre code.

  5. Cliquez sur Tester pour vérifier que le temps de sourdine fonctionne correctement.

Règles d'alerte relatives aux approvisionnements

Les règles d'alerte vous permettent d'émettre des alertes concernant n'importe quelle source de données Grafana. Il peut s'agir d'une source de données que vous avez déjà configurée, ou vous pouvez définir vos sources de données dans Terraform parallèlement à vos règles d'alerte.

Pour configurer des règles d'alerte
  1. Créez une source de données à interroger et un dossier dans lequel stocker vos règles.

    Dans cet exemple, la source de Configuration d'une source TestData de données à des fins de test données est utilisée.

    Les alertes peuvent être définies par rapport à n'importe quelle source de données principale dans Grafana.

    resource "grafana_data_source" "testdata_datasource" { name = "TestData" type = "testdata" } resource "grafana_folder" "rule_folder" { title = "My Rule Folder" }
  2. Définissez une règle d'alerte.

    Pour plus d'informations sur les règles d'alerte, reportez-vous à la section Comment créer des alertes gérées par Grafana.

  3. Créez un groupe de règles contenant une ou plusieurs règles.

    Dans cet exemple, le groupe de grafana_rule_group ressources est utilisé.

    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. Accédez à l'interface utilisateur de Grafana et vérifiez votre règle d'alerte.

    Vous pouvez voir si la règle d'alerte se déclenche. Vous pouvez également voir une visualisation de chacune des étapes de requête de la règle d'alerte.

    Lorsque l'alerte se déclenche, Grafana achemine une notification via la politique que vous avez définie.

    Par exemple, si vous avez choisi Slack comme point de contact, le gestionnaire d'alertes intégré de Grafana publie automatiquement un message sur Slack.