Pular para o conteúdo principal
Logs em tempo real
O Playground da API está desativado para este endpoint devido à natureza das conexões SSE, que não são universalmente suportadas pelos navegadores.
Authorization
string
obrigatório
A chave da API para sua conta. Você pode encontrá-la nas configurações da conta.
Use este endpoint sempre que precisar de uma visão ao vivo de uma aplicação em vez de fazer polling: acompanhar o progresso de um deploy, seguir os logs conforme são escritos, ou alimentar o gráfico de CPU/RAM de um painel sem bater repetidamente em Obter status da aplicação ou Obter logs em um timer. Ele substitui os dois enquanto a conexão estiver aberta. Internamente, abrir uma conexão aqui estabelece um único stream upstream no cluster da aplicação e o retransmite via SSE, com uma reconexão interna transparente caso esse upstream caia. Como cada conexão aberta mantém um socket por até 10 minutos, as aberturas têm limite de taxa separado dos limites de conexões simultâneas descritos abaixo: 1 abertura a cada 5 segundos por (usuário, aplicação), e 20 aberturas a cada 10 segundos por usuário somando todas as aplicações, seguidas de um cooldown de 30 segundos.

Parâmetros

app_id
string
obrigatório
O ID da aplicação cujos logs você deseja monitorar. Este ID pode ser encontrado na URL do painel de gerenciamento da sua aplicação.

Resposta

status
string
Indica se a chamada foi bem-sucedida. success se bem-sucedida, error se não.
Em caso de falha, a resposta incluirá um campo code juntamente com o status de erro, detalhando a causa. Se a requisição for bem-sucedida, a resposta será um stream text/event-stream contendo o feed em tempo real da aplicação. Cada conexão dura até 10 minutos. Cada conta pode manter 5 conexões em tempo real simultâneas (REALTIME_MAX_CONNECTIONS) e cada aplicação 30 no total entre todos os usuários (REALTIME_MAX_CONNECTIONS_APP); exceder qualquer um dos limites retorna 429.

Estrutura do Server-Sent Events (SSE)

A resposta é um fluxo contínuo no formato text/event-stream. Cada mensagem é composta por um campo event e um campo data. O formato varia conforme o evento, então trate os payloads de forma defensiva.

Tipos de Evento

  • system: Sinais de nível de protocolo. A linha data é um único código em maiúsculas: REALTIME_CONNECTING | <sseId> ao conectar, e depois qualquer um de REALTIME_TIMEOUT, REALTIME_DISCONNECTED, REALTIME_RECONNECT ou REALTIME_ERROR.
  • logs: Uma única linha de log cujo primeiro caractere é um byte de identificação do stream: \x01 (stdout) ou \x02 (stderr). Leia data.charCodeAt(0) (1 = stdout, 2 = stderr) e depois data.slice(1) para obter o texto. Uma linha sem esse byte de prefixo é stdout.
  • status: Métricas do contêiner ao vivo como uma string JSON, cerca de um frame por segundo. O primeiro frame de cada (re)conexão é completo: { cpu, cpuLimit, ram: [usedMB, limitMB], status, netIO: { i, o, new: { i, o } }, bIO: { i, o }, uptime } (uptime é o horário de início em ms epoch; netIO.new é bytes por segundo). Todo frame seguinte é reduzido, contendo apenas { cpu, ram, netIO, bIO } — mescle cada um sobre o último frame completo, mantendo os valores anteriores de cpuLimit, status e uptime. Enquanto este stream estiver aberto, prefira-o em vez de consultar GET /v2/apps/{app_id}/status, que pode ficar até cerca de um minuto desatualizado para uma aplicação com um stream em tempo real aberto.
  • error: Carrega um código de erro como CONTAINER_NOT_FOUND.
No exemplo abaixo, \x01 / \x02 representam os bytes brutos de prefixo de stdout / stderr.

Erros comuns