Criar e gerenciar recursos de alertas 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á.

Criar e gerenciar recursos de alertas usando o Terraform

Este tópico de documentação foi desenvolvido para espaços de trabalho do Grafana compatíveis com o Grafana versão 9.x.

Para espaços de trabalho do Grafana compatíveis com o Grafana versão 10.x, consulte Trabalhar no Grafana versão 10.

Para espaços de trabalho do Grafana compatíveis com o Grafana versão 8.x, consulte Trabalhar no Grafana versão 8.

Use o provedor do Grafana do Terraform para gerenciar os recursos de alerta e provisioná-los no sistema Grafana. A compatibilidade do provedor Terraform com o Grafana Alerting facilita a criação, o gerenciamento e a manutenção de toda a pilha do Grafana Alerting como código.

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

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

  1. Crie uma chave de API para provisionamento.

  2. Configure o provedor do Terraform.

  3. Defina os recursos de alerta no Terraform.

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

Pré-requisitos

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

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

Criar uma chave de API para provisionamento

Você pode criar uma chave de API normal do Grafana 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 Using Terraform for Amazon Managed Grafana automation.

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

  2. Atribua o perfil “Acessar as regras de alerta da API de provisionamento”.

  3. Criar um token de conta de serviço.

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

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

Configurar o provedor do Terraform

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

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

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

Provisionar pontos de contato e modelos

Os pontos de contato conectam uma pilha de alertas ao mundo exterior. Eles dizem ao Grafana como se conectar aos 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 na 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 texto para a notificação no campo de texto.

    O campo text é compatível com modelos no estilo Go. Isso possibilita que você gerencie os modelos de notificação do Grafana Alerting diretamente no Terraform.

  3. Execute o comando terraform apply.

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

    Você não pode editar os recursos provisionados via Terraform na interface de usuário. Isso garante que a pilha de alertas esteja sempre sincronizada com o 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 ao Grafana como rotear instâncias de alerta, e não para onde. Elas conectam alertas disparados aos seus pontos de contato previamente definidos usando um sistema de rótulos e matchers.

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

    Neste exemplo, os alertas são agrupados por alertname, 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 desativação de áudio 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 desativação de áudio à política de notificação.

  3. Execute o comando terraform apply.

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

    nota

    Você não pode editar recursos provisionados do Terraform na interface de usuário. Isso garante que a pilha de alertas esteja sempre sincronizada com o código.

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

Estipular tempos de desativação de áudio

Os tempos de desativação de áudio possibilitam desativar o áudio das notificações de alerta por períodos de tempo definidos.

Para estipular tempos de desativação de áudio
  1. Copie esse bloco de código em um arquivo .tf na máquina local.

    Neste exemplo, as notificações de alerta têm o áudio desativado 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 de usuário do Grafana e verifique os detalhes do tempo de desativação de áudio.

  4. Referencie o tempo de desativação de áudio recém-criado em uma política de notificação usando o campo mute_timings. Isso aplicará seu tempo de desativação de áudio a algumas ou a todas as notificações.

    nota

    Você não pode editar recursos provisionados do Terraform na interface de usuário. Isso garante que a pilha de alertas esteja sempre sincronizada com o código.

  5. Clique em Testar para verificar se o tempo de desativação de áudio está funcionando corretamente.

Provisionar regras de alerta

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

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

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

    Os alertas podem ser definidos em relação a qualquer fonte de dados de backend 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 How to create Grafana-managed alerts.

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

    Neste exemplo, o grupo de recursos grafana_rule_group é 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 de usuário do Grafana e verifique a regra de alerta.

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

    Quando o alerta é disparado, o Grafana roteia 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.