已合并
feat(executor): log trace_id/instance_id at executor boundaries and suppress probe noise #16
huhaichuan创建于 9月4日
feat(executor): log trace_id/instance_id at executor boundaries and suppress probe noise #16
已合并
Pull Request已成功合入, 合并人@songlicheng
(感谢 huhaichuan 的贡献)9月4日 关联了issue:[Feature]: 补充ID相关日志打印,支撑问题快速定位定界
atomgit-bot
9月4日 评论:
9月4日 评论:
变更摘要
本 PR 打通 RFC-0016 trace_id 链路在 agentexecutor(链路终点)的最后一跳:此前 frontend 已通过 X-Trace-ID 请求头透传、yr 侧已注入 YR_TRACE_ID/INSTANCE_ID/YR_RUNTIME_ID 环境变量,但 executor 未读取。本次在 executor 三个边界补齐打点(E1 请求级、E2 启动级、E3 进程级),并顺带将 liveness 探针的稳态刷屏日志改为状态跃迁才输出。涉及文件包括 http_server.py、runtime.py、process_manager.py、probe.py 及对应测试,改动以新增打点和日志级别降级为主,不改接口与业务行为。
主要改动
- E1 请求级打点(
http_server.py): 新增_agent_tracecontextmanager,为download/filelist/upload/mkdir及 5 个 sandbox 端点(op 取路径末段)每请求成对输出[agent.<op>.enter]/[agent.<op>.exit](含result=HTTP:<status>|ERR、cost_ms),trace_id取请求头X-Trace-ID、instance_id取 envINSTANCE_ID,空值字段整体省略;/healthz不参与打点,send_responseoverride 记录状态码供 exit 行使用,try/finally保证异常路径成对输出,同时将 access log、客户端断连、download range 拒绝三处重复日志降为 DEBUG。 - E2 启动级打点(
runtime.py):AgentExecutorRuntime.start()在启动时输出一行[agent.start.enter] agentexecutor,按 env 拼接trace_id=<YR_TRACE_ID>、instance_id=<INSTANCE_ID>、runtime_id=<YR_RUNTIME_ID>(空值省略),作为 create 链路到达 executor 的确认点。 - E3 进程级打点(
process_manager.py): 拉起每条 bootstrap 用户进程时,将原有started user process日志合并增强为含pid、bootstrap_index(与bootstrap_cmd_<i>.log输出文件编号对应)及可选的trace_id/instance_id后缀,不额外新增日志行。 - 探针日志降噪(
probe.py): 新增_log_liveness_state(state, detail)并记录_liveness_last_state:liveness 同状态重复打 DEBUG、状态跃迁打 INFO、转FAILED打 WARNING(含失败原因);DISABLED分支与 startup 每次尝试失败均降为 DEBUG,保留liveness probe configured等关键流程 INFO 行。 - 测试补充:
test_http_server.py、test_probe.py、test_process_manager.py、test_runtime.py新增用例,覆盖 sandbox 端点 enter/exit 成对与 trace 字段、/healthz静默、空值字段省略、E2 启动行三键、E3 行bootstrap_index与 trace 后缀、liveness 稳态静默与跃迁回 HEALTHY 时输出等场景。


不准确?
atomgit-bot
9月4日 评论:
9月4日 评论:
openJiuwen-bot
9月4日 评论:
9月4日 评论:
欢迎来到 openJiuwen 社区
Hey @KaisennHu , 感谢你对社区的贡献.
机器人使用手册
有关指令的使用,可以点击 此处 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。


atomgit-bot
9月4日 评论:
9月4日 评论:
9月4日 添加了label:openJiuwen-cla/yes
openJiuwen-bot
9月4日 评论:
9月4日 评论:
The pipeline(pipeline number:16) is running. Please wait a moment...


9月4日 添加了label:ci-running
9月4日 删除了label:ci-running
9月4日 添加了label:ci-failed
9月4日 强制推送 1 个提交:d1258288-feat(executor): log trace_id/instance_id at executor boundaries and suppress probe noise
9月4日 强制推送 1 个提交:d1258288-feat(executor): log trace_id/instance_id at executor boundaries and suppress probe noise
9月4日 删除了label:openJiuwen-cla/yes
9月4日 添加了label:openJiuwen-cla/yes
openJiuwen-bot
9月4日 评论:
9月4日 评论:
The pipeline(pipeline number:16) is running. Please wait a moment...


9月4日 删除了label:ci-failed
9月4日 添加了label:ci-running
9月4日 删除了label:ci-running
9月4日 添加了label:ci-failed
9月4日 强制推送 1 个提交:03c01336-feat(executor): log trace_id/instance_id at executor boundaries and suppress probe noise
9月4日 强制推送 1 个提交:03c01336-feat(executor): log trace_id/instance_id at executor boundaries and suppress probe noise
9月4日 删除了label:openJiuwen-cla/yes
9月4日 添加了label:openJiuwen-cla/yes
openJiuwen-bot
9月4日 评论:
9月4日 评论:
The pipeline(pipeline number:16) is running. Please wait a moment...


9月4日 删除了label:ci-failed
9月4日 添加了label:ci-running
9月4日 删除了label:ci-running
9月4日 添加了label:ci-failed
9月4日 强制推送 1 个提交:6915e6a3-feat(executor): log trace_id/instance_id at executor boundaries and suppress probe noise
9月4日 强制推送 1 个提交:6915e6a3-feat(executor): log trace_id/instance_id at executor boundaries and suppress probe noise
9月4日 删除了label:openJiuwen-cla/yes
9月4日 添加了label:openJiuwen-cla/yes
openJiuwen-bot
9月4日 评论:
9月4日 评论:
openJiuwen-bot
9月4日 评论:
9月4日 评论:
The pipeline(pipeline number:16) is running. Please wait a moment...


9月4日 删除了label:ci-failed
9月4日 添加了label:ci-running
9月4日 删除了label:ci-running
9月4日 添加了label:ci-successful
9月4日 修改了pull request 的描述
9月4日 修改了pull request 的描述
songlicheng
9月5日 评论:
9月5日 评论:
/lgtm
/approve


openJiuwen-bot
9月5日 评论:
9月5日 评论:
9月5日 合入了pull request,合并节点 SHA:3a556e51c2117133f9505ff71eb7ab05b522d804
9月5日 删除了label:ci-successful
这是什么类型的PR?
/kind feat
这个PR是做什么的/我们为什么需要它
打通 trace_id 链路的最后一跳:agentexecutor 是链路终点,也是此前 grep 断点——frontend 已把
X-Trace-ID随 tunnel 请求透传进 loopback HTTP,yr 已把YR_TRACE_ID/INSTANCE_ID/YR_RUNTIME_IDenv 注入沙箱,但 executor 一处都没读,沙箱内日志无法与宿主侧全链路日志关联。本 PR 在 executor 三个边界补齐打点(E1 请求级 / E2 启动级 / E3 进程级),并顺带解决探针稳态日志刷屏问题:
bootstrap_cmd_<i>.log输出文件编号互相对应。DEFAULT_PING_CYCLE=1000),稳态每秒一条 INFO 全天 ~8.6 万行刷屏;改为状态跃迁才打(HEALTHY 稳态静默,跃迁/subhealth/失败才打),错误路径日志保留。此PR修复了哪些问题
Fixes #6
PR对程序接口进行了哪些修改?
1. E1 请求级打点(
executor/src/yr/agentexecutor/http_server.py)新增
_agent_tracecontextmanager 统一包裹:X-Trace-ID,instance_id 取 envINSTANCE_ID;空值字段整体省略,格式不变(沙箱内用户进程直连无头时兼容)。<op>∈upload|download|filelist|mkdir+ 5 个 sandbox 端点(op 取路径末段);/healthz心跳不打,避免刷屏。send_responseoverride 记录状态码,try/finally保证异常路径也成对。2. E2 启动行(
executor/src/yr/agentexecutor/runtime.py)AgentExecutorRuntime.start()打一行:supervisor 与 docker 两种 sandbox_type 均打(只依赖注入的 env,与 executor 类型无关)。sandbox_id 不在沙箱内重复感知——由宿主侧既有日志关联(supervisor 路径 jiuwenbox 并列行;docker 路径 containerID 行)。
3. E3 bootstrap 行(
executor/src/yr/agentexecutor/process_manager.py)拉起每条
YR_RUNTIME_BOOTSTRAP_CMD时,与既有started user process行合并增强(不新增两条):bootstrap_index与统一后的${GLOG_log_dir}/${YR_RUNTIME_ID}/bootstrap_cmd_<i>.log输出文件编号对应——grep 到日志行即可定位对应进程输出文件。4. 探针日志降噪(
executor/src/yr/agentexecutor/probe.py)_log_liveness_state(state, detail),记录_liveness_last_state,同状态重复 → DEBUG,跃迁 → INFO,转 FAILED → WARNING(含失败原因)。DISABLED分支(startup 门期间/未配置)→ DEBUG;startup 每次尝试失败 → DEBUG(最终失败已有既有日志)。liveness probe configured、startup probe waiting initial_delay等启动序列线保留,探针仍可从日志看清流程。环境变量(只读,均为 yr 侧注入,executor 不新增)
YR_TRACE_IDINSTANCE_IDYR_RUNTIME_ID与其他模块的相关性描述
X-Trace-ID头。build.cpp GeneratePosixEnvs注入的 env;E1 的请求来自 frontend 文件/sandbox API 经 tcp.tunnel 转发。yr包。测试
tests/executor/84 项全通过。新增覆盖:sandbox 端点 enter/exit 成对与 trace 字段、空值字段省略、/healthz静默、E2 启动行三键、E3 行bootstrap_index与 trace 后缀、liveness 跃迁才打(HEALTHY 稳态静默 / SUBHEALTH→HEALTHY 跃迁两条回归用例)。self-verified/0016-traceid-selftest.sh,37/37 PASS):create 带X-Trace-Id后,runtime 日志命中 E2 启动行(三键齐全)、E3 bootstrap 行、E1 文件操作行(mkdir HTTP:200 / download 404 失败路径也成对打点)。自验结果
