318 lines
9.0 KiB
Markdown
318 lines
9.0 KiB
Markdown
# QRRapido - Instrumentação Completa com Serilog + Seq + Monitoramento
|
|
|
|
Este documento descreve a implementação completa de observabilidade para a aplicação QRRapido, incluindo logging estruturado, monitoramento de recursos e health checks.
|
|
|
|
## 📋 Resumo da Implementação
|
|
|
|
✅ **Serilog com múltiplos sinks** (Console + Seq com fallback resiliente)
|
|
✅ **Monitoramento de recursos** (CPU, Memória, GC)
|
|
✅ **Monitoramento MongoDB** (Tamanho, crescimento, collections)
|
|
✅ **Health checks completos** (MongoDB, Seq, Resources, External Services)
|
|
✅ **Logging estruturado** nos controllers críticos
|
|
✅ **Configuração multi-ambiente** (Development, Production)
|
|
|
|
## 🚀 Instalação dos Pacotes
|
|
|
|
Execute o comando completo para instalar todos os pacotes necessários:
|
|
|
|
```bash
|
|
cd /mnt/c/vscode/qrrapido
|
|
|
|
dotnet add package Serilog.AspNetCore --version 8.0.0 && \
|
|
dotnet add package Serilog.Sinks.Console --version 5.0.1 && \
|
|
dotnet add package Serilog.Sinks.Seq --version 6.0.0 && \
|
|
dotnet add package Serilog.Sinks.Async --version 1.5.0 && \
|
|
dotnet add package Serilog.Enrichers.Environment --version 2.3.0 && \
|
|
dotnet add package Serilog.Enrichers.Thread --version 3.1.0 && \
|
|
dotnet add package Serilog.Enrichers.Process --version 2.0.2 && \
|
|
dotnet add package Serilog.Enrichers.AssemblyName --version 1.0.9 && \
|
|
dotnet add package Microsoft.Extensions.Diagnostics.HealthChecks --version 8.0.0 && \
|
|
dotnet add package AspNetCore.HealthChecks.MongoDb --version 7.0.0 && \
|
|
dotnet add package System.Diagnostics.PerformanceCounter --version 8.0.0
|
|
```
|
|
|
|
Depois verifique a instalação:
|
|
```bash
|
|
dotnet build
|
|
dotnet list package
|
|
```
|
|
|
|
## 🔧 Configuração do Seq
|
|
|
|
### Instalação Local (Desenvolvimento)
|
|
```bash
|
|
# Via Docker
|
|
docker run --name seq -d --restart unless-stopped -e ACCEPT_EULA=Y -p 5341:80 datalust/seq:latest
|
|
|
|
# Via Chocolatey (Windows)
|
|
choco install seq
|
|
|
|
# Via HomeBrew (macOS)
|
|
brew install --cask seq
|
|
```
|
|
|
|
### Configuração de Produção
|
|
1. Configure o Seq em um servidor dedicado
|
|
2. Configure túnel SSH se necessário:
|
|
```bash
|
|
ssh -L 5341:localhost:5341 user@seq-server
|
|
```
|
|
3. Atualize `appsettings.Production.json` com a URL e API Key do Seq
|
|
|
|
## 📊 Endpoints de Health Check
|
|
|
|
A aplicação agora possui vários endpoints para monitoramento:
|
|
|
|
### 🔍 Health Check Detalhado (Uptime Kuma)
|
|
```
|
|
GET /health/detailed
|
|
```
|
|
|
|
**Resposta estruturada:**
|
|
```json
|
|
{
|
|
"applicationName": "QRRapido",
|
|
"status": "healthy|degraded|unhealthy",
|
|
"timestamp": "2025-07-28T10:30:00Z",
|
|
"uptime": "2d 4h 15m",
|
|
"checks": {
|
|
"mongodb": {
|
|
"status": "ok",
|
|
"latency": "45ms",
|
|
"databaseSizeMB": 245.7,
|
|
"documentCount": 15420,
|
|
"version": "7.0.5"
|
|
},
|
|
"seq": {
|
|
"status": "ok",
|
|
"reachable": true,
|
|
"lastLog": "2025-07-28T10:29:45Z"
|
|
},
|
|
"resources": {
|
|
"status": "ok",
|
|
"cpu": "23%",
|
|
"memory": "245MB",
|
|
"gcPressure": "low"
|
|
},
|
|
"externalServices": {
|
|
"status": "ok",
|
|
"services": [
|
|
{"service": "stripe", "status": "ok", "latencyMs": 250},
|
|
{"service": "google_auth", "status": "ok", "latencyMs": 150}
|
|
]
|
|
}
|
|
},
|
|
"version": "1.0.0"
|
|
}
|
|
```
|
|
|
|
### 🎯 Endpoints Específicos
|
|
```
|
|
GET /health/mongodb - MongoDB específico
|
|
GET /health/seq - Seq específico
|
|
GET /health/resources - Recursos do sistema
|
|
GET /health/external - Serviços externos
|
|
GET /health/simple - Status geral simples
|
|
GET /health/uptime-kuma - Otimizado para Uptime Kuma
|
|
```
|
|
|
|
## 📈 Configuração do Uptime Kuma
|
|
|
|
1. **Criar Monitor HTTP(s)**:
|
|
- URL: `https://seu-dominio.com/health/detailed`
|
|
- Method: `GET`
|
|
- Interval: `60 segundos`
|
|
|
|
2. **Configurar JSON Query** (opcional):
|
|
- JSON Path: `$.status`
|
|
- Expected Value: `healthy`
|
|
|
|
3. **Alertas Avançados**:
|
|
- JSON Path para CPU: `$.checks.resources.cpu`
|
|
- JSON Path para DB Size: `$.checks.mongodb.databaseSizeMB`
|
|
|
|
## 🎛️ Dashboard do Seq
|
|
|
|
### Queries Essenciais para Dashboards
|
|
|
|
#### 1. QR Generation Performance
|
|
```sql
|
|
ApplicationName = 'QRRapido'
|
|
and QRGeneration = true
|
|
and @Level = 'Information'
|
|
| summarize AvgTime = avg(TotalRequestTimeMs),
|
|
Count = count() by bin(@Timestamp, 5m)
|
|
```
|
|
|
|
#### 2. MongoDB Growth Monitoring
|
|
```sql
|
|
ApplicationName = 'QRRapido'
|
|
and MongoDbMonitoring = true
|
|
| project @Timestamp, DatabaseSizeMB, GrowthRateMBPerHour
|
|
```
|
|
|
|
#### 3. Resource Alerts
|
|
```sql
|
|
ApplicationName = 'QRRapido'
|
|
and (CpuUsagePercent > 80 or WorkingSetMB > 512)
|
|
and @Level in ['Warning', 'Error']
|
|
```
|
|
|
|
#### 4. Error Analysis
|
|
```sql
|
|
ApplicationName = 'QRRapido'
|
|
and @Level = 'Error'
|
|
| summarize Count = count()
|
|
by @Message, bin(@Timestamp, 1h)
|
|
```
|
|
|
|
## 🔔 Alertas Configurados
|
|
|
|
### MongoDB
|
|
- **Database > 1GB**: Warning
|
|
- **Database > 5GB**: Error
|
|
- **Growth > 100MB/hour**: Warning
|
|
- **Collections > 100MB**: Information
|
|
|
|
### Recursos do Sistema
|
|
- **CPU > 80% por 2 minutos**: Warning
|
|
- **CPU > 80% por 4+ minutos**: Error
|
|
- **Memory > 512MB**: Warning
|
|
- **Memory > 768MB**: Error
|
|
- **GC Pressure alta**: Warning
|
|
|
|
### QR Generation
|
|
- **Response time > 2s**: Warning
|
|
- **Rate limiting ativado**: Information
|
|
- **Generation failures**: Error
|
|
- **Cache miss ratio > 50%**: Warning
|
|
|
|
## 📁 Estrutura de Arquivos Criados
|
|
|
|
```
|
|
QRRapidoApp/
|
|
├── Services/
|
|
│ ├── Monitoring/
|
|
│ │ ├── ResourceMonitoringService.cs # Monitor CPU/Memory/GC
|
|
│ │ └── MongoDbMonitoringService.cs # Monitor MongoDB
|
|
│ └── HealthChecks/
|
|
│ ├── MongoDbHealthCheck.cs # Health check MongoDB
|
|
│ ├── SeqHealthCheck.cs # Health check Seq
|
|
│ ├── ResourceHealthCheck.cs # Health check Recursos
|
|
│ └── ExternalServicesHealthCheck.cs # Health check APIs
|
|
├── Controllers/
|
|
│ └── HealthController.cs # Endpoints health check
|
|
├── appsettings.json # Config base
|
|
├── appsettings.Development.json # Config desenvolvimento
|
|
├── appsettings.Production.json # Config produção
|
|
├── Program.cs # Serilog + Services
|
|
├── PACKAGES_TO_INSTALL.md # Lista de pacotes
|
|
└── INSTRUMENTATION_SETUP.md # Esta documentação
|
|
```
|
|
|
|
## 🛠️ Personalização por Ambiente
|
|
|
|
### Development
|
|
- Logs mais verbosos (Debug level)
|
|
- Thresholds mais relaxados
|
|
- Intervalos de monitoramento maiores
|
|
- Health checks com timeout maior
|
|
|
|
### Production
|
|
- Logs otimizados (Information level)
|
|
- Thresholds rigorosos para alertas
|
|
- Intervalos de monitoramento menores
|
|
- Health checks com timeout menor
|
|
- Integração com serviços externos habilitada
|
|
|
|
## 🔍 Logs Estruturados Implementados
|
|
|
|
### QR Generation (Controller mais crítico)
|
|
```json
|
|
{
|
|
"@t": "2025-07-28T10:30:00.123Z",
|
|
"@l": "Information",
|
|
"@m": "QR generation completed",
|
|
"ApplicationName": "QRRapido",
|
|
"RequestId": "abc12345",
|
|
"UserId": "user123",
|
|
"QRType": "url",
|
|
"TotalRequestTimeMs": 450,
|
|
"QRGenerationTimeMs": 320,
|
|
"FromCache": false,
|
|
"UserType": "premium",
|
|
"Success": true
|
|
}
|
|
```
|
|
|
|
### Resource Monitoring
|
|
```json
|
|
{
|
|
"@t": "2025-07-28T10:30:00.123Z",
|
|
"@l": "Information",
|
|
"@m": "Resource monitoring",
|
|
"ApplicationName": "QRRapido",
|
|
"ResourceMonitoring": true,
|
|
"CpuUsagePercent": 23.5,
|
|
"WorkingSetMB": 245,
|
|
"GcPressure": 3,
|
|
"ThreadCount": 45,
|
|
"Status": "Healthy"
|
|
}
|
|
```
|
|
|
|
### MongoDB Monitoring
|
|
```json
|
|
{
|
|
"@t": "2025-07-28T10:30:00.123Z",
|
|
"@l": "Information",
|
|
"@m": "MongoDB monitoring",
|
|
"ApplicationName": "QRRapido",
|
|
"MongoDbMonitoring": true,
|
|
"DatabaseName": "qrrapido",
|
|
"DatabaseSizeMB": 245.7,
|
|
"GrowthRateMBPerHour": 12.3,
|
|
"DocumentCount": 15420,
|
|
"Collections": [
|
|
{"name": "Users", "documentCount": 1250, "sizeMB": 15.4},
|
|
{"name": "QRCodeHistory", "documentCount": 14000, "sizeMB": 215.2}
|
|
],
|
|
"Status": "Healthy"
|
|
}
|
|
```
|
|
|
|
## 🚦 Próximos Passos
|
|
|
|
1. **Instalar os pacotes** usando o comando fornecido
|
|
2. **Configurar o Seq** localmente ou em produção
|
|
3. **Compilar a aplicação** com `dotnet build`
|
|
4. **Testar os health checks** acessando `/health/detailed`
|
|
5. **Configurar o Uptime Kuma** com os endpoints fornecidos
|
|
6. **Criar dashboards no Seq** usando as queries sugeridas
|
|
7. **Configurar alertas** baseados nos logs estruturados
|
|
|
|
## 🔧 Troubleshooting
|
|
|
|
### Seq não conecta
|
|
- Verificar se Seq está rodando: `http://localhost:5341`
|
|
- Verificar firewall/portas
|
|
- Aplicação continua funcionando (logs só no console)
|
|
|
|
### MongoDB health check falha
|
|
- Verificar connection string
|
|
- Verificar permissões de banco
|
|
- Health check retorna "degraded" mas aplicação continua
|
|
|
|
### Performance degradada
|
|
- Verificar logs de resource monitoring
|
|
- Ajustar intervalos nos `appsettings.json`
|
|
- Monitorar CPU/Memory via health checks
|
|
|
|
### Alertas muito frequentes
|
|
- Ajustar thresholds em `appsettings.json`
|
|
- Aumentar `ConsecutiveAlertsBeforeError`
|
|
- Configurar níveis de log apropriados
|
|
|
|
---
|
|
|
|
A aplicação QRRapido agora possui observabilidade completa, mantendo toda a funcionalidade existente intacta! 🎉 |