Monitorando aplicações PHP com Prometheus – Parte 2 – Tudo sobre PHP
Monitorando aplicações PHP com Prometheus – Parte 2
28 de janeiro de 2017 [email protected]
Configurando e entendendo o AlertManager
No primeiro artigo, explorei um pouco do projeto opensource dockprom. Como ele é possível monitorar a sua aplicação em tempo real utilizando tecnologias como Prometheus e Grafana; também é possível enviar alertar caso alguma coisa saia do controle.
Na Kinghost começamos a utilizá-lo para monitorar sistema que já estão rodando em containers (Docker). Já 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.
Nesse repositório do GitHub, os arquivos que você deve alterar estão na pasta Prometheus. Abaixo, um trecho do arquivo prometheus.yml.
monitor: 'docker-host-alpha'
- "targets.rules"
- "host.rules"
- "containers.rules"
Importante reparar as três últimas linhas citadas, pois é ali que 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", que será populada automaticamente. Sendo assim, podemos criar nosso primeiro alerta:
Abaixo o arquivo targets.rules.
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):
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.
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:
text: "{{ .CommonAnnotations.description }}"
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:
#receiver padrão
#rotas filhas
- to: '[email protected]'
Agora sim! Todos os alertas serão encaminhados por e-mail, e se acontecer algo crítico, pode ser enviado para a equipe imediatamente via Slack!
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:
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.
Abaixo uma amostra da configuração na interface do Grafana.
Para maiores informações sobre a versão 4.x do Grafana, basta acessar o link.
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!