🎯Raio-X do Marketing Digital: Tendências e desafios 🚀

Monitorando aplicações PHP com Prometheus — parte 2

Publicado em 24/01/2017

Atualizado em 03/06/2024

Configurando e entendendo o AlertManager

No primeiro artigo explorei um pouco do projeto opensource dockprom, com ele é possível monitorar a sua aplicação em tempo real utilizando tecnologias, como Prometheus e Grafana, e também enviar alertar caso alguma coisa saia do controle. Aqui na Kinghost começamos a utiliza-lo para monitorar sistema que já estão rodando em containers (Docker). Falei um pouco sobre a configuração e monitorias, pois bem, agora gostaria de me aprofundar um pouco mais na parte de Alertas. Um tema super importante, afinal de contas, não adianta monitorar a aplicação se ela não me avisar quando algo estiver errado.

imagem1

Arquivos de Configuração

Nesse repositório do github, os arquivos que você deve alterar estão na pasta prometheus. Abaixo um trecho do arquivo prometheus.yml.

[...]
global:
  scrape_interval:     15s
  evaluation_interval: 15s

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
      monitor: 'docker-host-alpha'

# Load and evaluate rules in this file every 'evaluation_interval' seconds.
rule_files:
  - "targets.rules"
  - "host.rules"
  - "containers.rules"
[...]

Importante reparar as 3 últimas linhas citadas, ali estamos fazendo referência aos demais arquivos para melhor organização das regras.

Todos os targets configurados nos scrappers terão uma métrica chamada “up” populada automaticamente, sendo assim podemos criar nosso primeiro alerta:

Abaixo o arquivo targets.rules

ALERT monitor_service_down
  IF up == 0
  FOR 30s
  LABELS { severity = "critical" }
  ANNOTATIONS {
      summary = "Monitor service non-operational",
      description = "Service {{ $labels.instance }} is down.",
  }

Esse arquivo indica que: se a condição for verdadeira durante 30 segundos, devo disparar o alerta.

Isso pode ser feito para qualquer condição, inclusive em qualquer consulta, as mesmas que você possui no Grafana para visualizar os dados da aplicação.
Exemplo (mais elaborado):

ALERT hight_storage_load
  IF (node_filesystem_size{fstype="aufs"} - node_filesystem_free{fstype="aufs"}) / node_filesystem_size{fstype="aufs"}  * 100 > 85
  FOR 30s
  LABELS { severity = "warning" }
  ANNOTATIONS {
      summary = "Server storage is almost full",
      description = "Docker host storage usage is {{ humanize $value}}%. Reported by instance {{ $labels.instance }} of job {{ $labels.job }}.",
  }

A condição acima verifica se a porcentagem de disco utilizado ultrapassa os 85%, então envia um alerta. Como podemos ver, as possibilidades são infinitas.

Envio de Mensagens

Os arquivos configuração dos alertas são propriedade do prometheus, porém a saída é configurada no AlertManager. Você encontrará o seguinte arquivo em alertmanager/config.yml.

route:
    receiver: 'slack'

receivers:
    - name: 'slack'
      slack_configs:
          - send_resolved: true
            text: "{{ .CommonAnnotations.description }}"
            username: 'Prometheus'
            channel: '#<channel-name>'
            api_url: 'https://hooks.slack.com/services/<webhook-id>'

O arquivo acima diz que todas os alertas serão enviados via Slack para o grupo responsável. Mas podemos adicionar várias funcionalidades legais, por exemplo:

route:
    #receiver padrão
    receiver: 'email' 

    #rotas filhas
    routes:
    - match:
        severity: critical
        receiver: 'slack'

receivers:
    - name: 'slack'
      slack_configs:
          - send_resolved: true
            text: "{{ .CommonAnnotations.description }}"
            username: 'Prometheus'
            channel: '#<channel-name>'
            api_url: 'https://hooks.slack.com/services/<webhook-id>'

receivers:
    - name: 'email'
      email_configs:
      - to: '[email protected]'

Agora sim, todos os alertas serão encaminhados por email, e se acontecer algo crítico, pode ser enviado para a equipe imediatamente via Slack!

Importante!
Para melhor utilização dos alertas: encontramos uma dificuldade em relação a periodicidade das verificações, mas adicionando essa linha no alertmanager a velocidade dos alertas ficou excelente, exatamente como nosso time precisava:

group_interval: 10s

Desse modo todos os alertas serão enviados a cada 10 segundos (o padrão é de 5 minutos).

Alertas pelo Grafana

A partir do Grafana 4.0, temos a possibilidade de alertas direto na ferramenta, sendo possível controlar os alertas da aplicação através da interface gráfica. Mas atenção, todos os alertas e configurações de envio não são as mesmas! São configurações exclusivas do Grafana.

aplicações php

Abaixo uma amostra da configuração na interface do Grafana.

imagem3

Para maiores informações sobre a versão 4.x do Grafana basta acessar o link: http://docs.grafana.org/guides/whats-new-in-v4-1//

Conclusão

A configuração de alertas é um pouco confusa, pois é necessário configurar diversos arquivos para que todos os critérios sejam atendidos, mas em uma tarde dá pra entender legal a ferramenta. A adoção dessa solução foi tão boa entre as equipes de desenvolvimento da Kinghost que cada grupo já está fazendo suas próprias contribuições. Espero que assim como foi pra nós, que você também possa se surpreender e melhorar cada vez mais o seu processo de desenvolvimento. Muito obrigado e caso tenha testado ou tenha alguma opinião sobre o assunto, pode comentar abaixo!

Webinar - Refatoração em PHP

O que você achou deste conteúdo?

O que você achou deste conteúdo?

Daniel
Daniel Archer
Focado em performance e boas práticas de programação, certificado ZEND ZCPE 5.5.
Daniel
Daniel Archer
Focado em performance e boas práticas de programação, certificado ZEND ZCPE 5.5.

Compartilhe esse conteúdo com alguém que possa gostar também

Receba todo mês conteúdos
incríveis como esses para
seguir evoluindo

Conteúdos relacionados

Ataque DDoS é uma das ameaças mais temidas por quem tem um site na internet. Imagine anos de investimento para construir a credibilidade de uma presença digital, para ver seu site sendo afetado por um ataque desse tipo.  Para se ter uma ideia, o Brasil pelo 10º ano consecutivo, é o líder do ranking de...

Mensagens para você