179 lines
6.6 KiB
Markdown
179 lines
6.6 KiB
Markdown
# 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
|
|

|
|
|
|
**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
|
|
: 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. |