grafana e prometeus

This commit is contained in:
JurTI-BR
2025-04-03 16:43:30 -03:00
parent 8ba6f345c7
commit b7e5cb64aa
35 changed files with 962 additions and 942 deletions

View File

@@ -0,0 +1,179 @@
# Implementação de Monitoramento e Alertas
## Visão Geral
Este documento descreve a implementação de um sistema completo de monitoramento e alertas para o Portal Jurunense API, baseado em Prometheus, Grafana e AlertManager. O sistema permite visualizar métricas de performance, configurar dashboards personalizados e receber alertas automáticos quando ocorrerem problemas.
## Componentes Implementados
### 1. Coleta de Métricas
#### Métricas da API
- **HTTP**: Requisições, duração, códigos de status
- **Recursos**: Uso de CPU, memória, disco
- **Banco de Dados**: Conexões de pool, duração de queries
- **Negócio**: Métricas específicas do domínio (pedidos, pagamentos, etc.)
#### Implementação
- Integração com `@willsoto/nestjs-prometheus`
- Endpoint `/metrics` exposto para scraping do Prometheus
- Interceptor para coleta automática de métricas HTTP
- Serviço personalizado para métricas de negócio
### 2. Dashboards Grafana
#### Dashboard Principal
![Dashboard Principal](https://via.placeholder.com/800x400?text=Portal+Jurunense+Main+Dashboard)
**Painéis Incluídos:**
- Visão geral da saúde da aplicação
- Taxa de requisições por segundo
- Latência das requisições (percentis)
- Uso de recursos (CPU, memória, disco)
- Taxa de erros HTTP
#### Dashboard de Banco de Dados
![Dashboard de Banco de Dados](
**Painéis Incluídos:**
- Uso do pool de conexões
- Tempo de resposta de queries
- Queries em execução
- Erros de banco de dados
- Saúde das conexões
#### Dashboard de Negócio
![Dashboard de Negócio]
**Painéis Incluídos:**
- Pedidos por hora/dia
- Taxa de conversão de pagamentos
- Erros de processamento
- Tempo de resposta de APIs externas
- Alertas ativos
### 3. Sistema de Alertas
#### Alertas Implementados
- **Disponibilidade**: Serviço fora do ar
- **Performance**: Tempo de resposta elevado
- **Recursos**: Uso elevado de memória, CPU ou disco
- **Banco de Dados**: Pool de conexões quase esgotado
- **Negócio**: Erros de integração com serviços externos
#### Canais de Notificação
- **Email**: Para alertas não críticos e relatórios diários
- **Slack**: Para alertas em tempo real, com cores baseadas na severidade
- **Microsoft Teams**: Alternativa para organizações que usam Teams
- **SMS/Chamada** (opcional): Para alertas críticos fora do horário comercial
### 4. Arquitetura de Monitoramento
```
┌─────────────┐ ┌────────────┐ ┌─────────────┐
│ API │ │ Prometheus │ │ Grafana │
│ (/metrics) │───▶│ (Coleta) │───▶│ (Dashboards)│
└─────────────┘ └────────────┘ └─────────────┘
│ ▲
▼ │
┌────────────┐ ┌─────────────┐
│AlertManager│───▶│ Notificações│
│ (Alertas) │ │ (Email/Slack)│
└────────────┘ └─────────────┘
```
## Configuração e Uso
### Iniciando o Sistema de Monitoramento
```bash
# Iniciar todos os serviços de monitoramento
docker-compose -f docker-compose.monitoring.yml up -d
# Verificar status dos serviços
docker-compose -f docker-compose.monitoring.yml ps
# Visualizar logs
docker-compose -f docker-compose.monitoring.yml logs -f
```
### Acessando as Interfaces
- **Prometheus**: http://localhost:9090
- **Grafana**: http://localhost:3000 (admin/admin)
- **AlertManager**: http://localhost:9093
### Customizando Alertas
1. Edite o arquivo `monitoring/prometheus/rules/portaljuru_alerts.yml`
2. Adicione ou modifique regras de alerta usando a sintaxe PromQL
3. Recarregue a configuração: `curl -X POST http://localhost:9090/-/reload`
### Customizando Dashboards
1. Acesse o Grafana: http://localhost:3000
2. Faça login com as credenciais padrão (admin/admin)
3. Navegue até Dashboards > Browse
4. Clone um dashboard existente ou crie um novo
5. Use o editor visual para adicionar painéis e consultas
## Integração com APM (Application Performance Monitoring)
Além do monitoramento baseado em métricas, implementamos integração com ferramentas de APM para rastreamento distribuído e profiling:
### Jaeger para Rastreamento Distribuído
- **Endpoint**: http://localhost:16686
- **Features**:
- Visualização de traces completos de requisições
- Análise de gargalos em calls entre serviços
- Rastreamento de erros e exceções
### Configuração de Rastreamento Distribuído
O código abaixo foi adicionado para habilitar o rastreamento:
```typescript
// Trecho simplificado. O código completo está no módulo de saúde.
import { TracingModule } from './tracing.module';
@Module({
imports: [
TracingModule.forRoot({
serviceName: 'portaljuru-api',
samplingRate: 0.3,
}),
// ...
],
})
export class AppModule {}
```
## Monitoramento Proativo
Implementamos monitoramento proativo através de:
1. **Health Checks Periódicos**: Verificações automáticas a cada 5 minutos
2. **Alertas Preditivos**: Baseados em tendências anômalas de métricas
3. **Relatórios Diários**: Resumo automático enviado diariamente por email
4. **Página de Status**: Disponível em `/health/status` para usuários finais
## Boas Práticas
1. **Métricas Relevantes**: Foco em métricas que refletem a experiência do usuário
2. **Alertas Acionáveis**: Somente alertar em situações que precisam de ação humana
3. **Redução de Ruído**: Agrupamento e correlação de alertas para evitar fadiga
4. **Documentation as Code**: Dashboards e regras de alerta versionadas no git
5. **Runbooks**: Documentação de resposta para cada tipo de alerta
## Próximos Passos
1. **Expandir Métricas de Negócio**: Adicionar KPIs específicos para cada domínio
2. **Machine Learning**: Implementar detecção de anomalias baseada em ML
3. **Logs Centralizados**: Integrar com ELK Stack para correlação logs-métricas
4. **SLOs e SLIs**: Definir e monitorar objetivos de nível de serviço
5. **Automação de Remediação**: Scripts para resposta automática a problemas comuns
## Conclusão
O sistema de monitoramento implementado proporciona visibilidade completa sobre a saúde e performance do Portal Jurunense API. Com dashboards intuitivos e alertas precisos, a equipe pode detectar e resolver problemas rapidamente, reduzindo o tempo médio de recuperação (MTTR) e melhorando a confiabilidade do serviço.