Skip to main content
实时日志
由于 SSE 连接的特性(并非所有浏览器都普遍支持),此端点的 API Playground 已禁用。
string
必填
你账户的 API 密钥。你可以在账户设置中找到它。
当你需要获取应用的实时视图而不是轮询时,可使用此端点:例如观察部署进度、实时跟踪日志写入,或驱动控制台的 CPU/RAM 图表,而无需按固定间隔反复调用获取应用状态获取应用日志。在连接保持期间,它可以替代这两者。 在内部,打开此端点的连接会在应用所在集群上建立一条上游流,并通过 SSE 将其转发回来;如果该上游流断开,会有一次透明的内部自动重连。由于每个打开的连接会占用一个 socket 长达 10 分钟,“打开连接”这一操作会单独进行速率限制,与下文所述的并发连接上限分开计算:每(用户、应用)每 5 秒 1 次打开操作,且每个用户跨所有应用每 10 秒 20 次打开操作,超出后进入 30 秒冷却期。

参数

string
必填
你想要监控其日志的应用的 ID。此 ID 可以在应用管理面板的 URL 中找到。

响应

string
指示调用是否成功。成功时为 success,否则为 error
失败时,响应将在错误状态之外包含一个 code 字段,说明具体原因。 如果请求成功,响应将是一个 text/event-stream 流,包含应用的实时数据流。 每个连接最长持续 10 分钟。每个账户最多可保持 5 个并发实时连接REALTIME_MAX_CONNECTIONS),每个应用最多 跨所有用户 30 个REALTIME_MAX_CONNECTIONS_APP);超出任一限制将返回 429

Server-Sent Events (SSE) 结构

响应是一个 text/event-stream 格式的持续流。每条消息由一个 event 字段和一个 data 字段组成。不同事件的结构各异,因此请以防御性方式解析负载。

事件类型

  • system:协议级信号。data 行是单个大写代码:连接时为 REALTIME_CONNECTING | <sseId>,随后可能是 REALTIME_TIMEOUTREALTIME_DISCONNECTEDREALTIME_RECONNECTREALTIME_ERROR 中的任意一个。
  • logs:单行日志,其第一个字符是流 ID 字节\x01(stdout)或 \x02(stderr)。读取 data.charCodeAt(0)(1 = stdout,2 = stderr),然后用 data.slice(1) 获取文本。没有该前缀字节的行为 stdout。
  • status:以 JSON 字符串形式呈现的实时容器指标,大约每秒一帧。每次(重新)连接的第一帧是完整的:{ cpu, cpuLimit, ram: [usedMB, limitMB], status, netIO: { i, o, new: { i, o } }, bIO: { i, o }, uptime }uptime 是以毫秒计的 epoch 起始时间;netIO.new 是每秒字节数)。之后的每一帧都是精简的,仅携带 { cpu, ram, netIO, bIO } —— 将每一帧合并到上一个完整帧上,保留之前的 cpuLimitstatusuptime。在此流保持打开期间,请优先使用它,而非轮询 GET /v2/apps/{app_id}/status;对于已打开实时流的应用,后者可能有最多约一分钟的延迟。
  • error:携带一个错误代码,例如 CONTAINER_NOT_FOUND
在下面的示例中,\x01 / \x02 代表原始的 stdout / stderr 前缀字节。

常见错误