如何用ingest_traces导入运行时追踪:验证HTTP_CALLS边的真实流量
【免费下载链接】codebase-memory-mcpHigh-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.项目地址: https://gitcode.com/GitHub_Trending/co/codebase-memory-mcp
codebase-memory-mcp是一款高性能代码智能 MCP 服务器,它把整个代码库索引为持久化知识图谱,支持 158 种语言,查询亚毫秒级。它的一个进阶能力是ingest_traces工具:把运行时追踪(runtime traces)导入图谱,用来验证 HTTP_CALLS 边的真实流量——确认静态分析猜出来的服务间调用,到底有没有在真实生产中发生。本文带你快速理解并上手这个工具。
为什么静态分析不够?需要运行时追踪来验证 HTTP_CALLS 边
知识图谱中的边不只是"文件包含类"这种结构性关系,还包括跨服务的调用边。图谱支持的边类型中,README.md 列出了HTTP_CALLS和ASYNC_CALLS(跨服务边):
CONTAINS_PACKAGE、DEFINES、IMPORTS、CALLS、HTTP_CALLS、ASYNC_CALLS、HANDLES……静态分析可以通过识别 HTTP 客户端调用、URL 路由等模式,推断"服务 A 调用了服务 B 的 /api/orders 接口",于是生成一条HTTP_CALLS边。但静态分析只能"猜":
- 这条边对应的请求是否真的发生过?
- 真实流量有多少次调用(count)?
- 调用耗时(P99)是多少?
ingest_traces就是为回答这些问题设计的:README.md 对它的官方定义是——
ingest_traces— Ingest runtime traces to validate HTTP_CALLS edges.(导入运行时追踪,验证 HTTP_CALLS 边)
下面这张截图就是知识图谱的可视化界面,HTTP_CALLS 这类边可以在图谱 UI 中直观看到:
ingest_traces 工具参数速览:只要 project 和 traces 两个字段
ingest_traces是 15 个 MCP 工具之一,属于"高级"能力(pkg/npm/README.md 将其与manage_adr归为 Advanced 工具)。它的完整声明位于 src/mcp/mcp.c,参数 Schema 非常简洁:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
project | string | ✅ | 项目名,指定写入哪个知识图谱 |
traces | array | ✅ | 追踪记录数组 |
traces[].caller | string | - | 调用方(服务/函数) |
traces[].callee | string | - | 被调用方(服务/函数) |
traces[].count | integer | - | 该调用发生的次数 |
也就是说,你只需要把"谁调用了谁、调了多少次"的运行时观测结果整理成一组{caller, callee, count}记录,就能一次性批量导入。
一步导入:调用示例与返回结果怎么读
调用方式与调用search_graph、trace_path等其他 MCP 工具完全一致——向服务器发起一次 tools/call:
{ "project": "my-project", "traces": [ { "caller": "checkout-service", "callee": "order-service /api/orders", "count": 1240 }, { "caller": "order-service", "callee": "inventory-service /api/stock", "count": 89 } ] }⚠️ 这里要诚实地告诉新手:当前版本的处理器(src/mcp/mcp.c)会接收并计数追踪数据,然后返回:
{ "status": "accepted", "traces_received": 2, "note": "Runtime edge creation from traces not yet implemented" }即:status: accepted表示数据已被接受,traces_received是实际接收到的追踪条数,而note说明"基于追踪创建运行时边"这一环节尚未实现——目前该工具处于"接口已就位、数据已接收"的阶段,动态写入图谱的闭环还在开发路上。把它理解为"验证流水线的入口",而不是"一键点亮图谱",预期就不会落空。
同时可以注意到,该工具在 src/mcp/mcp.c 的标注里是唯一一个"非只读、非幂等"的工具,说明它被定位为有副作用的写入型操作。
背后的 OTLP 处理引擎:为验证 HTTP_CALLS 边做准备
虽然端到端的"追踪→边"写入还在路上,但支撑它的底层引擎已经相当完整,全部位于 src/traces/ 模块:
- 服务名提取— src/traces/traces.c 从 OpenTelemetry 资源属性中读取
service.name,确定一条 span 属于哪个服务; - HTTP 信息解析— src/traces/traces.c 能识别
http.method、http.route、http.target、url.path、url.full、http.status_code等多种属性命名(兼容新旧 OTel 规范),从 span 中还原出"方法 + 路径 + 状态码"; - URL 路径归一化— 把
https://example.com/api/orders?q=1这类完整 URL 提取为/api/orders,保证与图谱中静态分析得到的路由能对上; - 耗时与 P99 统计— 解析纳秒时间戳计算单次耗时(src/traces/traces.c),并支持 P99 百分位计算(src/traces/traces.c),用于给每条边标注真实延迟画像。
这些函数的接口定义在 src/traces/traces.h,行为由 tests/test_traces.c 覆盖测试。整个模块的定位在 README.md 中一句话说明:
traces/— Runtime trace ingestion(运行时追踪导入)
小结:HTTP_CALLS 边的"静态→动态"验证路线
把整条路线串起来看,逻辑非常清晰:
- 静态:索引仓库后,跨服务分析自动产出
HTTP_CALLS边("代码里看起来 A 调 B"); - 动态:通过
ingest_traces导入真实运行时观测("生产里 A 确实调了 B 1240 次"); - 验证:两条信息对齐后,边的可信度、流量权重和 P99 延迟画像就都有了——这正是"验证 HTTP_CALLS 边的真实流量"的完整含义。
目前第 1、3 步已就绪,第 2 步的写入闭环尚在完善。对新手而言,现在就可以先熟悉它的参数契约和 OTLP 解析能力,等动态写入上线后无缝切换。
延伸阅读:docs/llms.txt 了解 LLM 如何消费该图谱 · src/mcp/mcp.c 查看全部工具声明 · tests/test_mcp.c 查看 MCP 层集成测试
【免费下载链接】codebase-memory-mcpHigh-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.项目地址: https://gitcode.com/GitHub_Trending/co/codebase-memory-mcp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考