Skip to main content
GET
/
actuator
/
health
curl -X GET https://api.disparador.com/actuator/health
{
  "status": "UP",
  "components": {
    "db": {
      "status": "UP",
      "details": {
        "database": "PostgreSQL",
        "validationQuery": "SELECT 1"
      }
    },
    "redis": {
      "status": "UP",
      "details": {
        "response": "PONG"
      }
    },
    "evolutionApi": {
      "status": "UP",
      "details": {
        "service": "Evolution API",
        "activeConfigurations": 2,
        "status": "connected",
        "testedInstance": "WhatsApp Principal"
      }
    },
    "diskSpace": {
      "status": "UP",
      "details": {
        "total": 107374182400,
        "free": 53687091200,
        "threshold": 10485760,
        "path": "/",
        "exists": true
      }
    },
    "ping": {
      "status": "UP"
    }
  }
}
O endpoint de health check fornece informações sobre o status de todos os componentes da aplicação, incluindo banco de dados, Redis, Evolution API e outros serviços.

Visão Geral

Este endpoint é fornecido pelo Spring Boot Actuator e permite monitorar a saúde da aplicação. Útil para:
  • Monitoramento - Sistemas de monitoramento podem verificar se a API está funcionando
  • Load Balancers - Verificar se a instância está saudável
  • Containers - Health checks do Docker/Kubernetes
  • Debugging - Identificar componentes com problemas

Endpoint Público

Este endpoint não requer autenticação e está disponível publicamente.
curl -X GET https://api.disparador.com/actuator/health

Response

status
string
Status geral da aplicação
  • UP - Todos os componentes funcionando
  • DOWN - Um ou mais componentes com problemas
  • OUT_OF_SERVICE - Aplicação fora de serviço
  • UNKNOWN - Status não determinado
components
object
Status individual de cada componente
{
  "status": "UP",
  "components": {
    "db": {
      "status": "UP",
      "details": {
        "database": "PostgreSQL",
        "validationQuery": "SELECT 1"
      }
    },
    "redis": {
      "status": "UP",
      "details": {
        "response": "PONG"
      }
    },
    "evolutionApi": {
      "status": "UP",
      "details": {
        "service": "Evolution API",
        "activeConfigurations": 2,
        "status": "connected",
        "testedInstance": "WhatsApp Principal"
      }
    },
    "diskSpace": {
      "status": "UP",
      "details": {
        "total": 107374182400,
        "free": 53687091200,
        "threshold": 10485760,
        "path": "/",
        "exists": true
      }
    },
    "ping": {
      "status": "UP"
    }
  }
}

Detalhes dos Componentes

Database (db)

  • Verifica conexão com PostgreSQL
  • Executa query de validação
  • Retorna DOWN se não conseguir conectar

Redis

  • Implementação customizada que executa comando PING
  • Verifica se a resposta é “PONG”
  • Retorna DOWN se Redis estiver inacessível

Evolution API

  • Verifica conexão com as instâncias configuradas
  • Testa a primeira configuração ativa encontrada
  • Retorna UP mesmo sem configurações ativas
  • Inclui detalhes sobre configurações e status de conexão

Disk Space

  • Verifica espaço disponível em disco
  • threshold: Espaço mínimo necessário (10MB)
  • Retorna DOWN se espaço livre < threshold

Ping

  • Verificação básica se a aplicação está respondendo
  • Sempre retorna UP se a aplicação estiver rodando

Códigos HTTP

CódigoStatusDescrição
200UPTodos os componentes funcionando
503DOWNUm ou mais componentes com problemas
503OUT_OF_SERVICEAplicação em manutenção

Monitoramento Automatizado

// Script de monitoramento com verificação de Evolution API
async function monitorHealth() {
  const healthUrl = 'https://api.disparador.com/actuator/health';
  const alertWebhook = 'https://seu-webhook.com/alerts';
  
  try {
    const response = await fetch(healthUrl);
    const health = await response.json();
    
    if (health.status !== 'UP') {
      // Identificar componentes com problema
      const problemComponents = Object.entries(health.components)
        .filter(([_, component]) => component.status !== 'UP')
        .map(([name, component]) => ({
          name,
          status: component.status,
          error: component.details?.error
        }));
      
      // Enviar alerta detalhado
      await fetch(alertWebhook, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
          service: 'API Disparador',
          status: health.status,
          problemComponents,
          timestamp: new Date().toISOString()
        })
      });
      
      console.error('⚠️ API com problemas:', problemComponents);
    }
  } catch (error) {
    console.error('❌ API inacessível:', error);
  }
}

// Verificar a cada minuto
setInterval(monitorHealth, 60000);

Integração com Docker

# docker-compose.yml
services:
  api:
    image: disparador-api:latest
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost/actuator/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

Integração com Kubernetes

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      containers:
      - name: api
        livenessProbe:
          httpGet:
            path: /actuator/health
            port: 80
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /actuator/health
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 5

Verificação de Componentes Específicos

// Verificar apenas Evolution API
async function checkEvolutionApi() {
  const response = await fetch('https://api.disparador.com/actuator/health');
  const health = await response.json();
  
  const evolutionStatus = health.components?.evolutionApi;
  
  if (evolutionStatus?.status === 'DOWN') {
    console.error('Evolution API com problemas:', evolutionStatus.details);
    
    // Verificar se é problema de configuração
    if (evolutionStatus.details?.activeConfigurations === 0) {
      console.log('Nenhuma configuração Evolution ativa');
    }
  }
}

Boas Práticas

Frequência

Não verificar mais de 1x por minuto em produção

Timeouts

Configure timeout de 10 segundos para evitar travamentos

Alertas

Configure alertas apenas para falhas consecutivas

Logs

Registre mudanças de status para análise
I