Monitoramento
Como monitorar a saúde e performance da plataforma ION Guard em produção.
Health Check
Endpoint HTTP
GET /api/v1/health
Não requer autenticação. Retorna o estado de todos os componentes:
{
"status": "healthy",
"components": {
"database": {
"status": "ok",
"latency_ms": 5.23
},
"redis": {
"status": "ok",
"latency_ms": 2.14
},
"queue": {
"status": "ok",
"size": 42
}
}
}
Status possíveis
| Status | HTTP | Significado |
|---|---|---|
| healthy | 200 | Todos os componentes OK |
| degraded | 200 | Componentes não-críticos com problemas (ex: fila > 1000 itens) |
| unhealthy | 503 | Componentes críticos falhando (database ou redis) |
Componentes monitorados
| Componente | Verificação | Crítico |
|---|---|---|
| Database | SELECT 1 + latência | Sim |
| Redis | PING + latência | Sim |
| Queue | Tamanho da fila queues:default | Não (> 1000 = erro) |
Script de health check
Para verificação completa incluindo containers Docker:
cd /home/iongrade/ionguard
./scripts/healthcheck.sh
Este script verifica:
- Endpoint HTTP —
GET /api/v1/healthretorna 200 - Horizon —
php artisan horizon:statusconfirma workers ativos - Containers — Cada container core e de módulo está
runningehealthy
Retorna código de saída 0 (sucesso) ou 1 (falha).
Monitoramento externo
Use o endpoint /api/v1/health com ferramentas de monitoramento:
# Exemplo com cron (a cada 5 minutos)
*/5 * * * * curl -sf https://ionguard.local/api/v1/health -k || \
echo "ION Guard unhealthy" | mail -s "Alerta" admin@empresa.com
# Exemplo com UptimeRobot, Pingdom, etc.
# URL: https://ionguard.local/api/v1/health
# Expect: HTTP 200
# Keyword: "healthy"
Health Checks dos Containers
Cada container possui health check próprio verificado pelo Docker:
| Container | Verificação | Intervalo | Tentativas |
|---|---|---|---|
| MariaDB | healthcheck.sh --connect --innodb_initialized | 10s | 3 |
| Valkey | valkey-cli ping | 10s | 3 |
| InfluxDB | influx ping | 30s | 3 |
| Mosquitto | TCP connect na porta 1883 | 30s | 3 |
| Horizon | php artisan horizon:status | 60s | 1 |
Containers com dependência aguardam seus pré-requisitos ficarem healthy antes de iniciar:
- PHP aguarda MariaDB e Valkey
- Horizon e Scheduler aguardam MariaDB e Valkey
- Mosquitto aguarda MariaDB
Logs
Logs da aplicação
# Logs do PHP (erros, warnings)
./scripts/comp.sh logs -f ionguard_php --tail 100
# Ou diretamente no arquivo
./scripts/comp.sh exec -T ionguard_php tail -100 storage/logs/laravel.log
Logs por serviço
# Workers de fila (Horizon)
./scripts/comp.sh logs -f ionguard_horizon --tail 100
# Scheduler
./scripts/comp.sh logs -f ionguard_scheduler --tail 50
# WebSocket (Reverb)
./scripts/comp.sh logs -f ionguard_reverb --tail 50
# MQTT Broker
./scripts/comp.sh logs -f ionguard_mosquitto --tail 50
# Nginx (access + error)
./scripts/comp.sh logs -f ionguard_nginx --tail 50
Log de módulos
Operações de instalação e desinstalação são registradas separadamente:
./scripts/comp.sh exec -T ionguard_php tail -50 storage/logs/modules.log
Canais de log configuráveis
| Canal | Arquivo | Rotação | Nível padrão | Variável de dias |
|---|---|---|---|---|
| daily | storage/logs/laravel.log | Diária (14 dias) | LOG_LEVEL (padrão debug) | LOG_DAILY_DAYS |
| modules | storage/logs/modules.log | Diária (14 dias) | info (fixo, independente do LOG_LEVEL global) | LOG_MODULES_DAYS |
| structured | storage/logs/structured.log | Diária (14 dias) | LOG_LEVEL (padrão debug) | LOG_DAILY_DAYS |
O canal modules é intencionalmente independente do LOG_LEVEL global — garante rastros em nível info das operações de instalação/desinstalação mesmo quando o resto da aplicação está em warning. O nível pode ser ajustado por LOG_MODULES_LEVEL.
Configurável via .env: LOG_CHANNEL (padrão stack), LOG_STACK (padrão single), LOG_LEVEL (padrão debug), LOG_DAILY_DAYS, LOG_MODULES_DAYS, LOG_MODULES_LEVEL.
Métricas de retenção
Dados time-series (sinais BLE no InfluxDB) e demais dados seguem políticas de retenção configuráveis por .env:
| Dado | Padrão | Variável .env |
|---|---|---|
| Sinais BLE | 7 dias | RETENTION_SIGNALS_DAYS |
| Histórico de localização | 90 dias | RETENTION_LOCATIONS_DAYS |
| Eventos | 365 dias | RETENTION_EVENTS_DAYS |
| Registros de auditoria | 365 dias | RETENTION_AUDIT_DAYS |
A limpeza do histórico de sinais/localização é executada pelo job AggregateLocationHistoryJob, fornecido pelo módulo Synapsys (Indoor Location) — portanto disponível apenas nas instalações com esse módulo ativo.
Comandos úteis
# Status completo
./scripts/comp.sh ps
# Versão instalada
./scripts/getVersion.sh
# Espaço em disco dos volumes
docker system df
# Uso de memória dos containers
docker stats --no-stream