Configure e gerencie alertas no Grafana: Maximize a eficiência do monitoramento

Entenda como funciona o fluxo de notificação de e-mail do Grafana Alerta e aprenda a configurar um alerta de monitoramento

Configure e gerencie alertas no Grafana: Maximize a eficiência do monitoramento

Fala pessoal tudo beleza?

Se você caiu nesse artigo pela primeira vez, fique sabendo que essa é uma série de artigos onde descrevo como montar uma stack de monitoramento usando o Grafana e Prometheus com o docker e docker-compose.

Artigos da série

  1. Monitorando seus servidores com Grafana e Prometheus
  2. Instalação e configuração do Node Exporter em servidores Linux
  3. Criando alertas com Prometheus e Alertmanager
  4. Configure e gerencie alertas no Grafana: Maximize a eficiência do monitoramento (Você está aqui!)

Neste artigo, parte 4, iremos entender o fluxo de envio de notificações e criar um alerta no Grafana para uma determinada métrica, que quando acionada, será disparado um e-mail notificando o incidente.

No artigo anterior, fizemos a mesma coisa mas usando o Prometheus e o Alertmanager para o envio de alertas. As duas formas podem ser usadas. O que podemos destacar de diferença entre elas, é que usando o Grafana o processo de criação e configuração é mais amigável devido a interface que possibilita o acesso rápido as informações.

Além disso, o Grafana disponibiliza vários recursos que nos ajudam no gerenciamento de alertas, podendo criar rótulos, adicionar políticas de notificação e a integração com várias ferramentas de chats, como o Slack, Discord, Telegram, Microsoft Teams entre outras. Nesse link da documentação contém uma lista de todas as ferramentas.

Pré requisitos

  • Ter uma instância do Grafana em execução.
  • Ter acompanhado os artigos anteriores onde subimos uma stack do Grafana e Prometheus.

Caso queira, pode acessar os arquivos dessa stack clicando aqui.

Obs: A versão do Grafana utilizada nesse artigo foi a v10.4.1. Versões mais antigas ou futuras podem conter diferenças.

Grafana Alerta

O Grafana Alerta permite que sua equipe de monitoramento seja alertada sobre as métricas e logs. Ele consolida em uma única página todos seus alertas gerenciados pelo Grafana ou por outras fonte de dados compatível com o Prometheus.

Uma regra de alerta pode alertar sobre vários itens de uma só vez e você pode também agrupar instâncias de alertas com base em rótulos para não receber muitas notificações de uma só vez.

Como funciona o Grafana Alerta

Basicamente, temos uma regra de alerta que é criada em base de uma métrica, por exemplo, o uso de CPU ou memória de um servidor.

Os rótulos correspondem as instâncias de alerta às políticas de notificação e podem ser usadas para agrupar seus alertas por gravidade.

Como funciona o Grafana Alerta - Fonte: Grafana

A política de notificação é o conjunto de regras para onde, quando e como os alertas são roteados.

Os pontos de contatos definem como seus contatos são notificados quando um alerta é acionado.

Conhecendo a página de Alertas do Grafana

A página de alertas é acessada no menu lateral clicando em Alerting ➡ Alert rules. Nessa primeira página, irá conter os alertas que foram criados através da interface do Grafana e alertas que foram criados a partir de uma fonte de dados como o Prometheus.

Antes de criarmos nosso primeiro alerta, devemos configurar o SMTP no Grafana para que os e-mails possam ser enviados, e assim poder criar nosso Ponto de Contato.

Configurando um SMPT

Para esse passo, você deve ter um SMPT em qualquer provedor de internet para poder enviar alertas, estou usando o serviço de e-mail da SparkPost.

Como estamos usando a stack do docker, iremos alterar o arquivo docker-compose.yaml adicionando algumas variáveis de configuração do SMTP.

services:
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    restart: always
    volumes:
      - grafana_data:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
    environment:
      - GF_SECURITY_ADMIN_USER=${GF_SECURITY_ADMIN_USER}
      - GF_SECURITY_ADMIN_PASSWORD=${GF_SECURITY_ADMIN_PASSWORD}
      - GF_INSTALL_PLUGINS=${GF_INSTALL_PLUGINS}
      - GF_SMTP_ENABLED=${GF_SMTP_ENABLED}
      - GF_SMTP_HOST=${GF_SMTP_HOST}
      - GF_SMTP_USER=${GF_SMTP_USER}
      - GF_SMTP_PASSWORD=${GF_SMTP_PASSWORD}
      - GF_SMTP_FROM_ADDRESS=${GF_SMTP_FROM_ADDRESS}
      - GF_SMTP_FROM_NAME=${GF_SMTP_FROM_NAME}
      - GF_SERVER_ROOT_URL=${GF_SERVER_ROOT_URL}
    ports:
      - 3000:3000
    networks:
      - monitoring

Arquivo docker-compose.yaml

Entendendo as variáveis de configuração para o caso do servidor SparkPost:

  • GF_SMTP_ENABLED: true para ativar o serviço
  • GF_SMTP_HOST: host do servidor SMTP, ex: smtp.sparkpostmail.com:2525
  • GF_SMTP_USER: usuário do servidor SMTP, ex: SMTP_Injection
  • GF_SMTP_PASSWORD: <api_key>
  • GF_SMTP_FROM_ADDRESS: e-mail de um domínio válido configurado no SparkPost
  • GF_SMTP_FROM_NAME: nome do remetente de envio
  • GF_SERVER_ROOT_URL: url do grafana hospedado

Após adicionar essas variáveis de ambiente ao arquivo do docker-compose, adicione essas mesmas variáveis com os seus valores no arquivo .env na raiz do projeto.

Suba o ambiente com o comando docker-compose up -d. Verifique os logs para validar se os containers subiram corretamente sem erros, também pode usar docker-compose ps para ver os status de cada um deles.

Pontos de contato

Os pontos de contato são as configurações que definimos como os usuários serão notificados quando um alerta é acionado, seja por um e-mail, uma mensagem no Slack, Microsoft Teams ou qualquer outra ferramenta de chat suportada pelo Grafana.

Para isso, clique no menu lateral em Alerting ➡ Contact points e em seguida no botão Add contact point.

Na página de configuração, dê um nome para o alerta, nesse caso será My Company Alerts - Email. Em Integration escolha o tipo E-mail, no campo Addresses adicione um e-mail que deseja receber as notificações.

As outras opções não iremos alterar, mas caso queiram podem dar uma olhada nelas. Após inserir as informações, clique no botão Test para testar o envio de e-mail e clique em Save contact point.

Tela de criação de um ponto de contato

Política de notificação

As políticas de notificação determinam como os alertas são roteados para os pontos de contato.

As políticas possuem uma estrutura em árvore, onde cada política pode ter uma ou mais políticas aninhadas. Cada política, exceto a política padrão, também pode corresponder a rótulos de alerta específicos.

Cada alerta é avaliado pela política padrão e, posteriormente, por cada política aninhada.

Acesse a página de criação da política clicando no menu lateral em Alerts ➡ Notification policies. Na política padrão clique no menu suspenso e em Editar. No campo de ponto de contato padrão, escolha o ponto de contato que criamos anteriormente, chamado My Company Alerts - Email.

As próximas informações não serão alteradas, vamos deixar as configurações padrões. Mas estarei explanando pelas configurações disponíveis.

Em Group by, podemos escolher rótulos para agrupar os alertas. Se vários alertas corresponderem a esta política, eles serão agrupados por esses rótulos. Uma notificação é enviada por grupo, se o campo estiver vazio, todas as notificações serão enviadas em um único grupo.

Em Timing options, há três opções que podem ser configuradas:

  • Group wait: Tempo de espera para armazenar alertas do mesmo grupo antes de enviar uma notificação inicial. Padrão é 30 segundos.
  • Group interval: Intervalo de tempo mínimo entre duas notificações para um grupo. Padrão é 5 minutos.
  • Repeat interval: Intervalo de tempo mínimo para reenviar uma notificação caso nenhum alerta novo tenha sido adicionado ao grupo. Padrão é de 4 horas.
Editando a política de notificação padrão

Criando um alerta

Para criar nosso primeiro alerta, clique no botão New alert rule no lado direito para ser direcionado à página de configuração.

Essa tela é dividida em 5 sessões.

  1. Nome do alerta: deve ser informado um nome para identificar seu alerta, por exemplo: Uso de CPU acima de 90%.
  2. Definição da query e condição do alerta: é onde definimos a query e a condição do alerta, ou seja, através da query podemos selecionar as métricas que iremos acompanhar e dizer que essa métrica deve ter alguma condição atrelada, como por exemplo: "Se durante 1 hora o uso de CPU tiver acima de 90%, a condição do alerta deve ser disparado".
  3. Definição do comportamento de avaliação: deve determinar com que frequência uma regra de alerta deve ser avaliada e com que rapidez ela deve alterar seu estado.
  4. Configurar rótulos e notificações: anote suas regras com rótulos para facilitar uma pesquisa ou o direcionamento para uma política de notificação.
  5. Adicionar anotações: informações para complementar a mensagem de notificação enviada.

Criando um alerta de uso de disco

Vamos criar um alerta e para isso, insira um nome, nesse exemplo vamos dar o nome de Uso do disco > 80%.

Na sessão dois, iremos definir a condição que queremos que o Grafana fique observando para que qualquer anomalia que venha ocorrer, um alerta seja disparado.

Para isso, clique no botão Code no canto direito e cole a query abaixo no campo de métricas:

100 - ((node_filesystem_avail_bytes{job="node_exporter",device!~'rootfs',mountpoint="/"} * 100) / node_filesystem_size_bytes{job="node_exporter",device!~'rootfs',mountpoint="/"})

Para validar a query, clique no botão Run queries no canto direito. Será exibido mais abaixo, uma tabela contendo os valores encontrados em sua base de dados do Prometheus. Se você tiver seguindo esse tutorial desde o início, a seguinte tela será exibida com apenas uma entrada, caso contrário, irá aparecer as referências da sua base atual.

Definindo query e condição de alerta

Explanando sobre a query utilizada, podemos resumir da seguinte maneira:

100 - ((espaço_disponível * 100) / tamanho_total)

Isso é feito para representar a porcentagem de espaço livre, ou seja, 100 menos a porcentagem do espaço ocupado. Este cálculo é comum em monitoramento de sistemas para avaliar rapidamente a capacidade restante em um sistema de arquivos.

Mais abaixo, podemos ver duas caixas que são chamadas de Expressões (B e C). Nessas caixas podemos manipular o resultado da expressão A. Veja que na expressão B, existe um warning dizendo que a operação de Reduce não é necessária devido que a expressão A já contém os dados tratados, podemos dizer que os dados obtidos na primeira expressão já estão prontos para criação do alerta.

Caixa de expressões para configuração do alerta

Nesse caso, vamos remover a expressão B, clicando no ícone de lixeira no canto direito.

Para mantermos uma consistência de letras, renomeie a expressão C para B e altere o campo Input para A (isso é opcional, mas meu toque não me deixa ver essa sequência quebrada).

No campo abaixo, mantenha a opção Is above (acima de) selecionada e coloque o valor 80. Essa expressão diz ao Grafana que quando o resultado da expressão A for acima de 80% (uso de armazenamento do disco), um alerta seja disparado.

Na terceira sessão, iremos configurar o comportamento do alerta, como ele será avaliado. Os alertas são armazenados dentro de uma pasta, sendo necessário escolher uma existente ou podendo criar uma. Vamos criar uma pasta chamada Alerts.

Em Evaluation group (grupo de avaliação), deve escolher um grupo existente ou criar um para que você possa agrupar alertas que devem ser avaliados dentro de um determinado período. Vamos criar um grupo chamado de Usage resources e definir um intervalo de avaliação de 2 minutos.

No campo Pending period (período pendente), deve ser informado o período que uma regra de alerta pode violar a condição até que a regra de alerta seja acionada, ou seja, esse será o período em que o Grafana irá aguardar até que o alerta seja disparado por definitivo, enviando uma notificação pelos canais configurados. Se dentro desse período a regra de alerta for resolvida o alerta não será disparado.

Definindo comportamento de avaliação

Na quarta sessão, podemos configurar rótulos para anotar os alertas, facilitando uma pesquisa ou direcionando para uma política de notificação.

Os rótulos podem ser criados conforme sua necessidade e cenário. Para esse exemplo, iremos criar dois, um chamado company que terá como valor o nome da empresa, My Company e outro será resource_type que terá como o valor disk, apenas para dizer que o alerta se trata de um problema relacionado a recursos, que nesse caso é o uso do disco.

Clicando no botão Preview routing, será exibido qual política de notificação será usada para esse disparo, veja que a política exibida é a padrão que utilizará o ponto de contato já configurado nos passos anteriores.

Configurando labels e notificações

Na quinta sessão, é possível customizar um pouco mais o conteúdo do e-mail enviado. Além dos três campos pré-definidos como o resumo e descrição, podemos adicionar mais rótulos.

Após o preenchimento de todos os campos, podemos finalmente salvar o alerta clicando no botão Save rule and exit no canto superior direito.

E para sabermos se tudo está funcionando como deveria? Na prática, esse alerta só será disparado quando o disco estiver acima de 80% em uso, provavelmente em nosso ambiente de desenvolvimento, nossa máquina estará abaixo disso.

Então para validarmos vamos diminuir o critério de avaliação de 80 para 30. Clique em editar seu alerta e altere apenas a configuração de avaliação do alerta e clique em salvar. Aguarde pelo menos 2 minutos que você verá na tela inicial de alertas que o status será alterado para pending e logo após para firing.

Se tudo estiver correto, você irá receber um e-mail bem parecido com a imagem abaixo.

E-mail de alerta para uso excedido do disco

Edite seu alerta novamente voltando o critério de avaliação de 30 para 80 e aguarde até que tudo seja normalizado. Assim que o Grafana identificar que as coisas voltaram ao normal, que não existe mais alertas, um novo e-mail será enviado mas com o objetivo de informar que o incidente que acabará de ser notificado, foi resolvido.

E-mail de alerta de incidente resolvido

Conclusão

Com este artigo foi possível entender os principais recursos do Grafana Alerta. Passamos pelo ponto de contato, política de notificação, criação do alerta além da configuração do SMTP e o fluxo de envio de notificações.

Espero que de alguma maneira posso ter ajudado com esse artigo e qualquer dúvida, melhorias ou comentários, não deixe de comentar abaixo.

E não deixe de acompanhar a série dos artigos sobre a stack Prometheus e Grafana que estou escrevendo.

Até a próxima.