Esta é uma aplicação que demonstra o uso de logs em uma aplicação spring boot 3 containerizada junto com postgresql containerizado.
Além disso, demonstra o uso do prometheus, grafana e o grafana loki.
Para os alertas foi utilizado o próprio grafana em vez do alertmanager.
- subir os containers:
docker compose up -d
-
logar no grafana, mudar a senha, cadastrar os datasources 'prometheus' e 'grafana-loki' com suas respectivas URLs dos containers.
-
importar o dashboard do arquivo api-cursos-dashboard.json no grafana;
-
corrigir o datasource referenciado nas variáveis do dashboard após importação;
-
cadastrar o alerta no grafana. As queries LogQL utilizadas foram as abaixo:
sum(count_over_time({app="api-cursos",class="SqlExceptionHelper",level="ERROR",method="logExceptions"}[1m])) >= 1
sum(count_over_time({app="api-cursos",class="DataSourceHealthIndicator",level="WARN"}[1m])) >= 1
- Slack.
6.1 criar conta no slack;
6.2 criar um canal no slack para receber o alert;
6.3 criar um app;
6.4 adicionar um 'incoming webhooks';
6.5 selecionar o canal criado;
6.6 copiar o webhook url para o grafana em Alerting -> Contact Points
-
adicionar notification policies para o slack.
-
parar o container do banco de dados e verificar os alertas, o dashboard e o slack;
docker container stop database-api-cursos
Sobre os containers:
- database-api-cursos: banco de dados postgresql da aplicação;
- api-cursos: aplicação spring boot 3 de exemplo;
- prometheus-api-cursos: prometheus;
- grafana-api-cursos: grafana;
- loki-api-cursos: grafana-loki;
- client-api-cursos: script bash que dispara requests simulando requests com erros, requests normais e etc para geração de métricas e alertas nos componentes
Observação 1: o objetivo deste README não é descrever o exato howto para fazer o teste, são instruções em alto nível. Os passos relacionados ao Slack e Grafana mudam conforme as versões mudam, sendo necessárias devidas adaptações. Não foram abordados TODOS os detalhes desses passos.
Observação 2: fiz pequenas alterações com relação a versão deste projeto no curso. Atualizei a aplicação para o Spring Boot 3.1.x (no curso era 2.6.x) e defini versões fixas no docker-compose.yml para melhor reprodutibilidade do projeto.