Pular para o conteúdo principal

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

StatusHTTPSignificado
healthy200Todos os componentes OK
degraded200Componentes não-críticos com problemas (ex: fila > 1000 itens)
unhealthy503Componentes críticos falhando (database ou redis)

Componentes monitorados

ComponenteVerificaçãoCrítico
DatabaseSELECT 1 + latênciaSim
RedisPING + latênciaSim
QueueTamanho da fila queues:defaultNão (> 1000 = erro)

Script de health check

Para verificação completa incluindo containers Docker:

cd /home/iongrade/ionguard
./scripts/healthcheck.sh

Este script verifica:

  1. Endpoint HTTPGET /api/v1/health retorna 200
  2. Horizonphp artisan horizon:status confirma workers ativos
  3. Containers — Cada container core e de módulo está running e healthy

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:

ContainerVerificaçãoIntervaloTentativas
MariaDBhealthcheck.sh --connect --innodb_initialized10s3
Valkeyvalkey-cli ping10s3
InfluxDBinflux ping30s3
MosquittoTCP connect na porta 188330s3
Horizonphp artisan horizon:status60s1

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

CanalArquivoRotaçãoNível padrãoVariável de dias
dailystorage/logs/laravel.logDiária (14 dias)LOG_LEVEL (padrão debug)LOG_DAILY_DAYS
modulesstorage/logs/modules.logDiária (14 dias)info (fixo, independente do LOG_LEVEL global)LOG_MODULES_DAYS
structuredstorage/logs/structured.logDiá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:

DadoPadrãoVariável .env
Sinais BLE7 diasRETENTION_SIGNALS_DAYS
Histórico de localização90 diasRETENTION_LOCATIONS_DAYS
Eventos365 diasRETENTION_EVENTS_DAYS
Registros de auditoria365 diasRETENTION_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