全部产品
Search
文档中心

函数计算:监控与日志

更新时间:Sep 14, 2026

监控与日志用于查看 Sandbox 的运行状态和资源使用,也可以将 Sandbox 内程序打印到 stdout / stderr 的日志采集到日志服务。应用侧可以记录 sandboxId、任务 ID 和命令结果,便于在云上监控或日志页面中定位问题。

该功能通过函数计算和阿里云可观测能力提供,不属于 E2B SDK 的原生接口。

配置入口与生效范围

接入前应先确认监控与日志配置入口和生效范围:

  • 配置入口:以当前云沙箱控制台、函数计算控制台或日志服务配置为准;如果控制台未展示云沙箱日志采集入口,请联系产品支持确认开通方式。

  • 生效范围:确认配置是对账号、地域、模板、Sandbox 还是会话生效,以及是否只影响新创建的 Sandbox。

  • 日志目标:确认日志服务 Project、Logstore、索引字段、保存时间和费用策略。

日志采集边界

配置日志采集后,Sandbox 内程序打印到 stdout / stderr 的日志会被采集到日志服务。如果希望任务日志被云上日志服务检索,应让程序直接输出结构化日志,并带上 sandboxId、任务 ID 等关联字段。

sandbox.commands.run() 返回的 stdout / stderr 仍会返回给业务代码。业务侧如果需要额外沉淀命令摘要、退出码或错误分类,可以在捕获返回结果后截断、脱敏,并作为应用日志输出。

不要把 E2B SDK 的 Sandbox Logs 兼容接口作为生产日志采集入口。生产排查应依赖业务侧结构化日志、函数计算日志采集、云监控和日志服务中的数据。

记录 Sandbox 运行信息

import { Sandbox } from "e2b";

const taskId = crypto.randomUUID();

const sandbox = await Sandbox.create("code-interpreter-v1", {
  apiKey: process.env.E2B_API_KEY,
  apiUrl: process.env.E2B_API_URL,
  domain: process.env.E2B_DOMAIN,
  metadata: {
    taskId,
  },
});

try {
  console.log(JSON.stringify({
    event: "sandbox_created",
    taskId,
    sandboxId: sandbox.sandboxId,
  }));

  const result = await sandbox.commands.run("python3 -V", {
    timeoutMs: 30_000,
  });

  console.log(JSON.stringify({
    event: "command_finished",
    taskId,
    sandboxId: sandbox.sandboxId,
    exitCode: result.exitCode,
    stdout: result.stdout.trim(),
    stderr: result.stderr.trim(),
  }));
} finally {
  await sandbox.kill();
}

Python 示例:

import json
import os
import uuid

from e2b import Sandbox

task_id = str(uuid.uuid4())

sandbox = Sandbox.create(
    template="code-interpreter-v1",
    api_key=os.environ["E2B_API_KEY"],
    api_url=os.environ["E2B_API_URL"],
    domain=os.environ["E2B_DOMAIN"],
    metadata={
        "taskId": task_id,
    },
)

try:
    print(json.dumps({
        "event": "sandbox_created",
        "taskId": task_id,
        "sandboxId": sandbox.sandbox_id,
    }))

    result = sandbox.commands.run("python3 -V", timeout=30)

    print(json.dumps({
        "event": "command_finished",
        "taskId": task_id,
        "sandboxId": sandbox.sandbox_id,
        "exitCode": result.exit_code,
        "stdout": result.stdout.strip(),
        "stderr": result.stderr.strip(),
    }))
finally:
    sandbox.kill()

输出结构化日志

配置日志采集后,建议输出结构化日志,便于在日志服务中按字段检索。

const result = await sandbox.commands.run(
  `python3 - <<'PY'
import json
import os
import time

task_id = os.environ["TASK_ID"]
print(json.dumps({
    "event": "task_started",
    "taskId": task_id,
    "ts": int(time.time()),
}), flush=True)
print(json.dumps({
    "event": "task_finished",
    "taskId": task_id,
    "ts": int(time.time()),
}), flush=True)
PY`,
  {
    envs: {
      TASK_ID: taskId,
    },
    timeoutMs: 30_000,
  }
);

console.log(result.stdout);

Python 示例:

result = sandbox.commands.run(
    """
python3 - <<'PY'
import json
import os
import time

task_id = os.environ["TASK_ID"]
print(json.dumps({
    "event": "task_started",
    "taskId": task_id,
    "ts": int(time.time()),
}), flush=True)
print(json.dumps({
    "event": "task_finished",
    "taskId": task_id,
    "ts": int(time.time()),
}), flush=True)
PY
""",
    envs={
        "TASK_ID": task_id,
    },
    timeout=30,
)

print(result.stdout)

常见观测对象

  • Sandbox 生命周期:创建、连接、暂停、恢复、终止。

  • 命令执行结果:退出码、stdout、stderr、耗时。

  • 资源使用:CPU、内存、磁盘和网络。

  • 关联字段:sandboxId、任务 ID、用户或租户标识、模板名称。

  • 结构化日志:eventtaskIdsandboxIdexitCodestdout / stderr 摘要。

注意事项

  • 业务系统应保存任务 ID 与 sandboxId 的映射。

  • 不要把完整 API Key、AccessKey、数据库密码、OAuth Token 写入日志。

  • 长任务建议设置命令超时和 Sandbox 超时。

  • 对日志量大的任务,应控制输出大小,避免日志费用过高。