heath impl
This commit is contained in:
146
health-check.md
Normal file
146
health-check.md
Normal file
@@ -0,0 +1,146 @@
|
||||
# Health Check da API
|
||||
|
||||
## Descrição
|
||||
|
||||
O sistema de Health Check implementado permite monitorar a saúde da aplicação e seus componentes críticos, como bancos de dados, uso de memória e espaço em disco. Isso facilita a detecção precoce de problemas e ajuda a manter a estabilidade da aplicação.
|
||||
|
||||
## Endpoints Disponíveis
|
||||
|
||||
### Verificação Geral
|
||||
|
||||
- **URL**: `/health`
|
||||
- **Método**: `GET`
|
||||
- **Descrição**: Verifica a saúde geral da aplicação, incluindo:
|
||||
- Status da API (ping)
|
||||
- Uso de disco
|
||||
- Uso de memória
|
||||
- Conexões de banco de dados (Oracle e PostgreSQL)
|
||||
|
||||
### Verificação de Banco de Dados
|
||||
|
||||
- **URL**: `/health/db`
|
||||
- **Método**: `GET`
|
||||
- **Descrição**: Verifica apenas as conexões de banco de dados (Oracle e PostgreSQL)
|
||||
|
||||
### Verificação de Memória
|
||||
|
||||
- **URL**: `/health/memory`
|
||||
- **Método**: `GET`
|
||||
- **Descrição**: Verifica o uso de memória da aplicação (heap e RSS)
|
||||
|
||||
### Verificação de Disco
|
||||
|
||||
- **URL**: `/health/disk`
|
||||
- **Método**: `GET`
|
||||
- **Descrição**: Verifica o espaço disponível em disco
|
||||
|
||||
## Formato de Resposta
|
||||
|
||||
A resposta segue o formato padrão do Terminus:
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "ok",
|
||||
"info": {
|
||||
"api": {
|
||||
"status": "up"
|
||||
},
|
||||
"disk": {
|
||||
"status": "up"
|
||||
},
|
||||
"memory_heap": {
|
||||
"status": "up"
|
||||
},
|
||||
"oracle": {
|
||||
"status": "up"
|
||||
},
|
||||
"postgres": {
|
||||
"status": "up"
|
||||
}
|
||||
},
|
||||
"error": {},
|
||||
"details": {
|
||||
"api": {
|
||||
"status": "up"
|
||||
},
|
||||
"disk": {
|
||||
"status": "up",
|
||||
"freeBytes": 53687091200,
|
||||
"usedBytes": 170573111296,
|
||||
"totalBytes": 224260202496
|
||||
},
|
||||
"memory_heap": {
|
||||
"status": "up",
|
||||
"usedBytes": 45731840,
|
||||
"thresholdBytes": 157286400
|
||||
},
|
||||
"oracle": {
|
||||
"status": "up"
|
||||
},
|
||||
"postgres": {
|
||||
"status": "up"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Níveis de Status
|
||||
|
||||
- **up**: O componente está funcionando corretamente
|
||||
- **down**: O componente está com problemas
|
||||
- **ok**: Todos os componentes estão funcionando corretamente
|
||||
- **error**: Um ou mais componentes estão com problemas
|
||||
|
||||
## Integração com Monitoramento
|
||||
|
||||
### Prometheus (Recomendado)
|
||||
|
||||
Para integrar com Prometheus, instale e configure o pacote `@willsoto/nestjs-prometheus`:
|
||||
|
||||
```bash
|
||||
npm install @willsoto/nestjs-prometheus prom-client --save
|
||||
```
|
||||
|
||||
E então adicione o PrometheusModule ao HealthModule:
|
||||
|
||||
```typescript
|
||||
import { PrometheusModule } from '@willsoto/nestjs-prometheus';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
// ...
|
||||
PrometheusModule.register(),
|
||||
],
|
||||
})
|
||||
export class HealthModule {}
|
||||
```
|
||||
|
||||
### Integração com Ferramentas de APM
|
||||
|
||||
Os health checks podem ser integrados com ferramentas de Application Performance Monitoring (APM) como:
|
||||
|
||||
- New Relic
|
||||
- Datadog
|
||||
- Dynatrace
|
||||
- Grafana
|
||||
|
||||
## Configuração de Alertas
|
||||
|
||||
Recomenda-se configurar alertas para quando os health checks falharem:
|
||||
|
||||
1. **Alertas de Banco de Dados**: Notificação imediata para problemas em conexões de banco
|
||||
2. **Alertas de Memória**: Alerta quando o uso de memória estiver próximo ao limite
|
||||
3. **Alertas de Disco**: Alerta quando o espaço em disco estiver abaixo do limite seguro
|
||||
|
||||
## Uso em Kubernetes
|
||||
|
||||
Se estiver usando Kubernetes, você pode integrar esses health checks como Readiness e Liveness Probes:
|
||||
|
||||
```yaml
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: 8066
|
||||
initialDelaySeconds: 15
|
||||
periodSeconds: 30
|
||||
```
|
||||
Reference in New Issue
Block a user