Radar 接入
W-ID 中的用户身份、Workspace 和具体应用项目是三个不同概念:用户是平台账号,Workspace 是团队/租户边界,Radar 项目对应 Workspace 里已经创建登录配置的 OAuth Client。创建或更新 OAuth Client 后,W-ID 会把公开 redirect URI 的域名同步成 Radar 路由;localhost、内网地址和私有网段不会同步。
在界面里查看
| 入口 | 用途 |
|---|---|
/admin/radar | Workspace Owner/Admin 查看当前 Workspace 下 OAuth Client 对应的 Radar 项目、慢接口、错误排行和 tracking code。 |
/admin/system | 平台管理员查看 Platform Radar health、全平台同步状态,并执行 Sync Auth Projects。 |
https://radar.myfastools.com/dashboard/platform | 打开 Radar 独立控制台查看完整项目、事件、错误、性能和图谱上下文。 |
Workspace 项目同步
新 OAuth Client 在创建或更新时会自动尝试同步。已有 OAuth Client 可由平台管理员或 Workspace 管理员手动补同步。
# 平台管理员:同步所有已有 Auth OAuth Client
POST /api/admin/system/radar/sync-clients
# Workspace 管理员:同步当前 Workspace 的 Auth OAuth Client
POST /api/workspaces/YOUR_WORKSPACE_ID/radar/sync
完整 Radar 脚本使用文档
把下面整块复制给项目开发者或开发 Agent。实际值由 Auth Workspace 的 Radar 页面提供:YOUR_WORKSPACE_ID、YOUR_OAUTH_CLIENT_ID 和 PROJECT_RADAR_CODE。
# Radar Script Usage
## 1. 项目关系
- W-ID 用户是平台账号。
- Workspace 是团队/租户边界。
- Radar 项目对应 Workspace 内已经创建登录配置的 OAuth Client。
- OAuth Client 的公开 redirect URI 会同步成 Radar routes。
- localhost、内网 IP、私有网段不会同步到 Radar。
## 2. 推荐网页脚本:W_RADAR_WEB_BOOTSTRAP
优先使用 Platform Bootstrap。它会优先使用 Workspace/OAuth Client 绑定解析到 Auth 同步过来的 Radar 项目,并用页面域名兜底,避免复制错 tracking code。
<script
async
src="https://radar.myfastools.com/platform/bootstrap.js"
data-endpoint="https://radar.myfastools.com"
data-workspace-id="YOUR_WORKSPACE_ID"
data-project-id="YOUR_OAUTH_CLIENT_ID"
data-release="web-2026.05.09"
data-environment="production"></script>
## 3. 明确 code 的网页脚本:W_RADAR_WEB_SDK
如果 Auth 的 Radar 页面已经显示 tracking code,也可以直接嵌入 SDK。
<script
async
src="https://radar.myfastools.com/sdk.js"
data-code="PROJECT_RADAR_CODE"
data-endpoint="https://radar.myfastools.com"
data-release="web-2026.05.09"
data-environment="production"
data-client-kind="web"></script>
## 4. 网页手动事件
window.Radar && Radar.track('checkout_started', {
cart_size: 3,
value_bucket: '100-200'
});
window.Radar && Radar.identify('user_123', { plan: 'pro' });
window.Radar && Radar.page();
## 5. 后端环境变量
W_RADAR_ENDPOINT=https://radar.myfastools.com
W_RADAR_CODE=PROJECT_RADAR_CODE
W_RADAR_SLOW_TRACE_MS=1000
SERVICE_NAME=your-service
APP_ENV=production
APP_RELEASE=2026.05.09
## 6. 后端性能 span 上报
curl -fsS "$W_RADAR_ENDPOINT/collect" \
-H 'Content-Type: application/json' \
-d '{
"code": "'"$W_RADAR_CODE"'",
"session_id": "trace_0123456789abcdef0123456789abcdef",
"visitor_id": "service:your-service",
"events": [{
"type": "performance_span",
"name": "http.server GET /api/items",
"ts": 1800000000000,
"data": {
"trace_id": "0123456789abcdef0123456789abcdef",
"span_id": "0123456789abcdef",
"span_kind": "server",
"http.method": "GET",
"http.route": "/api/items",
"http.status_code": 200,
"duration_ms": 1234,
"status": "ok",
"service_name": "your-service",
"runtime": "rust",
"environment": "production",
"slow_trace": true
}
}]
}'
## 7. 后端错误上报
curl -fsS "$W_RADAR_ENDPOINT/errors/capture" \
-H 'Content-Type: application/json' \
-d '{
"code": "'"$W_RADAR_CODE"'",
"platform": "server",
"runtime": "rust",
"release": "2026.05.09",
"environment": "production",
"message": "HTTP 503 GET /api/items",
"exception_type": "http_server_error",
"handled": true,
"severity": "error",
"context": {
"trace_id": "0123456789abcdef0123456789abcdef",
"span_id": "0123456789abcdef",
"http.route": "/api/items",
"http.status_code": 503,
"duration_ms": 2100,
"service_name": "your-service"
}
}'
## 8. 开发 Agent 运行时上下文
# Auth 和 Radar 通过内部平台 key 读取慢接口、错误和 agent context。
# 应用代码只需要 W_RADAR_CODE,不要把平台 read key 放进浏览器或应用 env。
tools/w-radar-context YOUR_RADAR_PROJECT_ID
Dashboard:
https://radar.myfastools.com/dashboard/platform/projects/YOUR_RADAR_PROJECT_ID
## 9. 安全规则
- PROJECT_RADAR_CODE 是写入 /collect 和 /errors/capture 的 tracking code。
- Radar read/sync key 是 W 内部服务凭据,不属于用户接入参数。
- 不上传 token、cookie、prompt、SQL 明文、完整请求体或用户隐私原文。
- route/span name 保持低基数,例如 /api/workspaces/:id/radar。
- 5xx、panic、未处理异常需要同时进入 /errors/capture。
网页嵌入方式
对 W-ID 自动绑定的项目,优先使用 Platform Bootstrap。它会优先使用 Workspace/OAuth Client 绑定解析到对应 Radar 项目,并用页面域名兜底,避免手动复制错 tracking code。
<script
async
src="https://radar.myfastools.com/platform/bootstrap.js"
data-endpoint="https://radar.myfastools.com"
data-workspace-id="YOUR_WORKSPACE_ID"
data-project-id="YOUR_OAUTH_CLIENT_ID"
data-release="web-2026.05.09"
data-environment="production"></script>
如果你已经在 Radar 项目页拿到了明确的 tracking code,也可以直接使用 Web SDK。
<script
async
src="https://radar.myfastools.com/sdk.js"
data-code="PROJECT_RADAR_CODE"
data-endpoint="https://radar.myfastools.com"
data-release="web-2026.05.09"
data-environment="production"
data-client-kind="web"></script>
网页事件
// 业务事件
window.Radar && Radar.track('checkout_started', {
cart_size: 3,
value_bucket: '100-200'
});
// 登录后绑定用户;不要写入 token、cookie、明文密钥或完整隐私数据
window.Radar && Radar.identify('user_123', { plan: 'pro' });
// SPA 路由切换后手动记录页面
window.Radar && Radar.page();
后端接入
后端、Worker、执行器和训练任务使用项目 tracking code 写入 /collect 与 /errors/capture。Radar read/sync key 由 W 平台内部绑定,应用接入不需要配置。
W_RADAR_ENDPOINT=https://radar.myfastools.com
W_RADAR_CODE=PROJECT_RADAR_CODE
W_RADAR_SLOW_TRACE_MS=1000
SERVICE_NAME=your-service
APP_ENV=production
APP_RELEASE=2026.05.09
curl -fsS "$W_RADAR_ENDPOINT/collect" \
-H 'Content-Type: application/json' \
-d '{
"code": "'"$W_RADAR_CODE"'",
"session_id": "trace_0123456789abcdef0123456789abcdef",
"visitor_id": "service:your-service",
"events": [{
"type": "performance_span",
"name": "http.server GET /api/items",
"ts": 1800000000000,
"data": {
"trace_id": "0123456789abcdef0123456789abcdef",
"span_id": "0123456789abcdef",
"span_kind": "server",
"http.method": "GET",
"http.route": "/api/items",
"http.status_code": 200,
"duration_ms": 1234,
"status": "ok",
"service_name": "your-service",
"runtime": "rust",
"environment": "production",
"slow_trace": true
}
}]
}'
curl -fsS "$W_RADAR_ENDPOINT/errors/capture" \
-H 'Content-Type: application/json' \
-d '{
"code": "'"$W_RADAR_CODE"'",
"platform": "server",
"runtime": "rust",
"release": "2026.05.09",
"environment": "production",
"message": "HTTP 503 GET /api/items",
"exception_type": "http_server_error",
"handled": true,
"severity": "error",
"context": {
"trace_id": "0123456789abcdef0123456789abcdef",
"span_id": "0123456789abcdef",
"http.route": "/api/items",
"http.status_code": 503,
"duration_ms": 2100,
"service_name": "your-service"
}
}'
给开发 Agent 的一键复制上下文
调试或优化前先读 Radar 的运行时上下文,优先处理 avg_duration_ms * span_count 成本最高的慢点和最近错误。
# 平台内部 read key 由 W 服务环境绑定;用户接入文档不需要携带该 key。
tools/w-radar-context YOUR_RADAR_PROJECT_ID
# 或在 Auth Workspace 的 Radar 页面查看慢接口和错误排行。
开发前请先执行:
1. 读取 tools/w-radar-context YOUR_RADAR_PROJECT_ID。
2. 查看 heavy_problems、slow_endpoints、errors 和 related_graph_refs。
3. 优先修复影响面最高的路由、函数或依赖。
4. 保持低基数 route/span name,不上传 token、cookie、prompt、SQL 明文或用户隐私原文。
5. 修改后确认 /collect 有 performance_span,5xx 或异常同时进入 /errors/capture。
Radar Skill 文档
需要完整开发规范时,可复制 Radar 提供的 skill 文档给 Codex、Claude 或其他开发代理。
https://radar.myfastools.com/static/skills/radar-telemetry-context/SKILL.md
https://radar.myfastools.com/static/skills/radar-telemetry-context/skills.md