# Runtime 日志与调用链路

按工作区和 Runtime 查询调用记录，通过 Trace ID 定位方法、下游请求及错误，并区分 Hosted Service 环境日志。

Runtime 日志用于查看一次方法调用经过的步骤、耗时、错误和链路属性。它按 `applicationRuntimeId` 查询；Hosted Service 的进程输出和迁移日志按 `environmentId` 查询，两者是不同入口。

## 从控制台查询

1. 进入目标工作区，点击顶部的 **Runtime 日志**。
2. 从列表选择 Runtime。只有一个 Runtime 时自动选中；名称旁显示实际 `applicationRuntimeId`。
3. 点击 **查看调用链路**，选择时间范围，查看调用列表和统计。
4. 选择一条调用查看详情；已知 Trace ID 时，也可以先在页面输入，再打开指定链路。

当前身份必须能访问 Runtime 所属工作区。选择工作区或填写 Runtime ID 不会授予权限，跨工作区查询仍受当前登录身份及凭据范围限制。

## 两类日志如何配合

| 查询入口              | 选择范围                                              | 日志来源与内容                        |
| ----------------- | ------------------------------------------------- | ------------------------------ |
| Runtime 日志        | 工作区、`applicationRuntimeId`、最近时间范围；详情再提供 `traceId` | ARMS 调用链路，包括方法调用、耗时、错误和已记录的属性。 |
| Hosted Service 日志 | 工作区、项目、`environmentId`、开始与结束时间；可按请求或 Trace 标识搜索   | SLS 中归属于该后端环境的运行进程输出和迁移输出。     |

Runtime ID 不是平台应用 ID、项目 ID 或 Hosted Service 环境 ID。不要用页面地址中的应用编号替代 Runtime ID。

Runtime 详情会检查 Trace 是否属于所选 Runtime，再返回完整链路。它不是平台所有服务的原始进程日志，也不自动查询 Hosted Service 的输出。若调用已到达业务后端，继续使用 [Hosted Service 环境日志](/development/backend-development/logs-and-errors/)，按故障时间和实际记录的请求标识排查。

日志中的敏感内容应在记录时处理。查询入口展示已记录的链路属性；提交给他人的排查材料仍应移除凭据和个人信息。

## 使用 CLI 调用公开 API

可以使用现有 `baijimu api`，无需配置 ARMS 云凭据。先从控制台 Runtime 列表取得真实 ID，将以下变量替换为本次实际值。

查询最近一小时的调用记录：

```bash
baijimu api get \
  "/partner/v1/observability-service/api/monitoring/traces/$APPLICATION_RUNTIME_ID" \
  --workspace-id "$WORKSPACE_ID" \
  --query hours=1 \
  --query pageNum=1 \
  --query pageSize=20 \
  --json
```

分页从 `pageNum=1` 开始，结果在 `data.records`，总数在 `data.total`。时间范围按查询时刻向前计算，不能用 Hosted Service 的 `startTime`、`endTime` 参数替代。

查询统计：

```bash
baijimu api get \
  "/partner/v1/observability-service/api/monitoring/statistics/$APPLICATION_RUNTIME_ID" \
  --workspace-id "$WORKSPACE_ID" \
  --query hours=1 \
  --json
```

查看指定链路时，在 `trace-query.json` 中填写两个真实标识：

```json
{
  "applicationRuntimeId": "填写 Runtime ID",
  "traceId": "填写 Trace ID"
}
```

```bash
baijimu api post \
  /partner/v1/observability-service/api/otlp/trace-detail \
  --workspace-id "$WORKSPACE_ID" \
  --data @trace-query.json \
  --json
```

仅有 `traceId` 不能查询详情；必须同时指定其所属 Runtime。链路详情包括 `data.spans` 及各 Span 的属性。

## 处理错误与空结果

有效 [CModel 响应](/integration/cmodel-error-model/) 使用 HTTP `200`，业务成败由 `errorCode` 决定。非零错误码是查询失败，不能当作空列表。

| 错误码或现象                          | 排查方向                                        |
| ------------------------------- | ------------------------------------------- |
| `UNAUTHORIZED`                  | 查询身份缺失或无效；检查登录状态。                           |
| `FORBIDDEN`                     | 当前身份不能访问该工作区、凭据范围不匹配，或 Trace 不属于所选 Runtime。 |
| `NOT_FOUND`                     | Runtime 已不存在或不可用，重新确认列表和 ID。                |
| `INVALID_PARAM`                 | 核对 Runtime ID、Trace ID 和查询参数。               |
| `LOG_QUERY_UNAVAILABLE`         | Runtime 范围或权限依赖不可用，保留查询条件交由平台维护者处理。         |
| `MONITORING_ERROR`、`OTLP_ERROR` | 调用链路查询依赖失败或未配置，不能据此判断业务数据库密码错误。             |
| 成功但没有记录                         | 检查 Runtime、时间范围、请求是否执行，以及采集延迟和保留范围。         |

定位一次业务错误时，保留故障时间与时区、Runtime ID、方法名、Trace ID、业务错误码，以及日志查询自身的结果。若 Runtime 链路显示下游调用失败，再检查对应 Hosted Service 环境日志；若没有进入业务后端，后端环境可能没有同次请求记录。
