Crie e gerencie recursos de alerta usando o Terraform - Amazon Managed Grafana

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Crie e gerencie recursos de alerta usando o Terraform

Este tópico de documentação foi desenvolvido para espaços de trabalho do Grafana que oferecem suporte ao Grafana versão 9.x.

Para espaços de trabalho do Grafana que suportam a versão 10.x do Grafana, consulte. Trabalhando na versão 10 do Grafana

Para espaços de trabalho do Grafana que suportam a versão 8.x do Grafana, consulte. Trabalhando na versão 8 da Grafana

Use o Grafana Provider do Terraform para gerenciar seus recursos de alerta e provisioná-los em seu sistema Grafana. O suporte do provedor Terraform para o Grafana Alerting facilita a criação, o gerenciamento e a manutenção de toda a pilha de Alertas do Grafana como código.

Para obter mais informações sobre como gerenciar seus recursos de alerta usando o Terraform, consulte a documentação do Grafana Provider na documentação do Terraform.

Conclua as tarefas a seguir para criar e gerenciar seus recursos de alerta usando o Terraform.

  1. Crie uma chave de API para provisionamento.

  2. Configure o provedor Terraform.

  3. Defina seus recursos de alerta no Terraform.

  4. Execute terraform apply para provisionar seus recursos de alerta.

Pré-requisitos

  • Certifique-se de ter o provedor grafana/grafana Terraform 1.27.0 ou superior.

  • Certifique-se de usar o Grafana 9.1 ou superior. Se você criou sua instância Amazon Managed Grafana com o Grafana versão 9, isso será verdade.

Crie uma chave de API para provisionamento

Você pode criar uma chave de API Grafana normal para autenticar o Terraform com o Grafana. A maioria das ferramentas existentes que usam chaves de API deve funcionar automaticamente com o novo suporte do Grafana Alerting. Para obter informações específicas sobre a criação de chaves para uso com o Terraform, consulte Usando o Terraform para automação do Amazon Managed Grafana.

Para criar uma chave de API para provisionamento
  1. Crie uma nova conta de serviço para seu pipeline de CI.

  2. Atribua a função “Acesse as regras de alerta da API de aprovisionamento”.

  3. Crie um novo token de conta de serviço.

  4. Nomeie e salve o token para uso no Terraform.

Como alternativa, você pode usar a autenticação básica. Para ver todos os formatos de autenticação compatíveis, consulte Autenticação Grafana na documentação do Terraform.

Configurar o provedor Terraform

O suporte ao Grafana Alerting está incluído como parte do provedor Grafana Terraform.

Veja a seguir um exemplo que você pode usar para configurar o provedor Terraform.

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

Forneça pontos de contato e modelos

Os pontos de contato conectam uma pilha de alertas ao mundo exterior. Eles dizem à Grafana como se conectar aos seus sistemas externos e onde entregar notificações. Há mais de quinze integrações diferentes para você escolher. Este exemplo usa um ponto de contato do Slack.

Para provisionar pontos de contato e modelos
  1. Copie esse bloco de código em um arquivo.tf em sua máquina local. Substitua < slack-webhook-url > pelo URL do webhook do Slack (ou outro contato)

    Este exemplo cria um ponto de contato que envia notificações de alerta para o 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. Insira o texto para sua notificação no campo de texto.

    O text campo oferece suporte à modelagem no estilo Go. Isso permite que você gerencie seus modelos de notificação de Alerta da Grafana diretamente no Terraform.

  3. Execute o comando terraform apply.

  4. Acesse a interface do usuário do Grafana e verifique os detalhes do seu ponto de contato.

    Você não pode editar recursos provisionados via Terraform a partir da interface do usuário. Isso garante que sua pilha de alertas sempre permaneça sincronizada com seu código.

  5. Clique em Testar para verificar se o ponto de contato funciona corretamente.

nota

Você pode reutilizar os mesmos modelos em vários pontos de contato. No exemplo acima, um modelo compartilhado é incorporado usando a instrução {{ template "Alert Instance Template" . }}

Esse fragmento pode então ser gerenciado separadamente no 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 }

Provisionar políticas de notificação e roteamento

As políticas de notificação dizem à Grafana como rotear instâncias de alerta, e não para onde. Eles conectam alertas de disparo aos seus pontos de contato previamente definidos usando um sistema de rótulos e marcadores.

Para provisionar políticas de notificação e roteamento
  1. Copie esse bloco de código em um arquivo.tf em sua máquina local.

    Neste exemplo, os alertas são agrupados poralertname, o que significa que todas as notificações provenientes de alertas que compartilham o mesmo nome são agrupadas na mesma mensagem do Slack.

    Se quiser rotear notificações específicas de forma diferente, você pode adicionar subpolíticas. As subpolíticas permitem que você aplique o roteamento a diferentes alertas com base na correspondência de rótulos. Neste exemplo, aplicamos um tempo de silêncio a todos os alertas com o rótulo 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. No campo mute_timings, vincule um tempo de silêncio à sua política de notificação.

  3. Execute o comando terraform apply.

  4. Acesse a interface do usuário do Grafana e verifique os detalhes da sua política de notificação.

    nota

    Você não pode editar recursos provisionados do Terraform a partir da interface do usuário. Isso garante que sua pilha de alertas sempre permaneça sincronizada com seu código.

  5. Clique em Testar para verificar se o ponto de notificação está funcionando corretamente.

Provisionar horários de silenciamento

Os horários de silenciamento fornecem a capacidade de silenciar notificações de alerta por períodos de tempo definidos.

Para provisionar horários de mudo
  1. Copie esse bloco de código em um arquivo.tf em sua máquina local.

    Neste exemplo, as notificações de alerta são silenciadas nos finais 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"] } }
  2. Execute o comando terraform apply.

  3. Acesse a interface do Grafana e verifique os detalhes do tempo de silenciamento.

  4. Faça referência ao tempo de silenciamento recém-criado em uma política de notificação usando o mute_timings campo. Isso aplicará seu tempo de silenciamento a algumas ou a todas as suas notificações.

    nota

    Você não pode editar recursos provisionados do Terraform a partir da interface do usuário. Isso garante que sua pilha de alertas sempre permaneça sincronizada com seu código.

  5. Clique em Testar para verificar se o tempo de silenciamento está funcionando corretamente.

Provisionar regras de alerta

As regras de alerta permitem que você alerte contra qualquer fonte de dados da Grafana. Isso pode ser uma fonte de dados que você já configurou ou você pode definir suas fontes de dados no Terraform junto com suas regras de alerta.

Para provisionar regras de alerta
  1. Crie uma fonte de dados para consultar e uma pasta para armazenar suas regras.

    Neste exemplo, a fonte Configurar uma fonte de TestData dados para testes de dados é usada.

    Os alertas podem ser definidos em relação a qualquer fonte de dados de back-end no Grafana.

    resource "grafana_data_source" "testdata_datasource" { name = "TestData" type = "testdata" } resource "grafana_folder" "rule_folder" { title = "My Rule Folder" }
  2. Defina uma regra de alerta.

    Para obter mais informações sobre as regras de alerta, consulte como criar alertas gerenciados pelo Grafana.

  3. Crie um grupo de regras contendo uma ou mais regras.

    Neste exemplo, o grupo grafana_rule_group de recursos é usado.

    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. Acesse a interface do Grafana e verifique sua regra de alerta.

    Você pode ver se a regra de alerta está sendo acionada. Você também pode ver uma visualização de cada um dos estágios de consulta da regra de alerta.

    Quando o alerta é acionado, a Grafana encaminha uma notificação por meio da política que você definiu.

    Por exemplo, se você escolheu o Slack como ponto de contato, o Alertmanager incorporado do Grafana publica automaticamente uma mensagem no Slack.