【学习工作赛道】Hyz.Trace — 分布式链路追踪可视化分析平台 Demo

【标题】 【学习工作赛道】Hyz.Trace — 分布式链路追踪可视化分析平台 Demo

【正文】

1. Demo 简介

是什么: 一个可交互的分布式链路追踪可视化监控 Dashboard 系统,包含全局概览、链路搜索、Trace 瀑布图详情、服务拓扑图、链路聚合分析、火焰图、异常分析 7 大核心页面,后端配套完整的 .NET 链路追踪 SDK 和数据采集服务。

面向谁: 后端开发工程师(排查接口性能问题)、SRE/运维工程师(监控服务健康状态)、技术负责人(全局掌控微服务链路质量)。

主要功能:

  • 全局概览大盘 — KPI 指标卡片(总请求数、错误率、P99 延迟)+ 应用健康表 + 趋势图,一眼掌握系统整体状态
  • 链路追踪搜索 — 高级筛选(应用名、耗时范围、状态码、时间区间)+ 散点图视图,快速定位目标 Trace
  • Trace 瀑布图详情 — 甘特视图展示完整调用链,Span 详情面板显示方法名、耗时、参数、异常堆栈
  • 服务拓扑图 — 力导向布局展示服务间依赖关系,流量动画直观显示调用量和错误率
  • 链路聚合分析 — RED 指标(请求速率、错误率、耗时分布)+ 热力图 + 慢操作排行,发现性能瓶颈
  • 火焰图 — 冰柱图视图展示调用栈耗时分布,支持搜索高亮,快速定位慢方法
  • 异常分析 — Issue 指纹分组 + 错误趋势图,集中管理所有异常信息
    界面展示:

2. Demo 创作思路

灵感来源: 在实际 .NET 微服务项目中,我们深受"链路黑洞"之苦——订单接口变慢,却无法快速定位是支付服务超时、缓存失效还是数据库死锁导致的。市面上的 APM 工具(如 SkyWalking、Jaeger)功能强大但界面复杂、学习成本高,团队迫切需要一个开箱即用、一目了然的可视化方案。

从创意到 Demo 的演进:

报名阶段,我使用 TRAE Work 的 Solo Design 功能生成了 7 个 HTML 页面的创意产物,验证了"深色科技风 + 高信息密度"的设计方向。进入初赛后,我的目标是把这些静态 HTML 变成 真正可交互、有真实数据支撑的 Demo 。

实现路径:

  1. 后端 SDK 开发 — 用 TRAE IDE 开发完整的 .NET 链路追踪 SDK(Hyz.Trace),支持方法级自动追踪、跨服务上下文传播、多种采样策略
  2. 数据采集服务 — 实现 HTTP 和 gRPC 双协议上报器,批量缓冲 + 定时刷新 + 指数退避重试,生产级可靠性
  3. Dashboard 后端 — 基于 ASP.NET Core 实现数据接收、存储(FreeSql + ClickHouse)、查询 API
  4. 前端交互实现 — 将创意 HTML 转化为可交互的 Dashboard,接入真实 Trace 数据,实现动态筛选、实时刷新、图表联动
    为什么这样设计: 评审最看重的是"真实价值",所以我不仅做了前端 UI,还配套了完整的后端 SDK 和数据流,让 Demo 能够展示真实的链路追踪场景,而不是空壳页面。

3. Demo 体验地址

  • Hyz.Trace Dashboard
  • 演示账户: admin 密码: admin123 (若无数据:时间刷选选择全部时间)

4. TRAE 实践过程

完整开发流程:

第一阶段:从创意 HTML 到可交互 Dashboard

使用 TRAE IDE 打开报名阶段生成的 HTML 文件,通过对话让 TRAE 帮我:

  • 将静态 HTML 拆分为组件化结构
  • 添加数据绑定和事件监听
  • 实现与后端 API 的对接
  • 优化交互体验(筛选、排序、图表联动)

第二阶段:后端 SDK 开发

通过 TRAE 对话完成核心模块:

  • TraceContext 上下文管理(基于 AsyncLocal 的异步传播)
  • TraceScope 追踪范围(自动记录耗时、状态、异常)
  • 三种 AOP 方案(DynamicProxy / Source Generator / Fody IL 编织)
  • 采样策略(全量、概率、速率限制、模式匹配)
  • 敏感数据脱敏(自动过滤 password/token/secret)

第三阶段:数据采集与存储

使用 TRAE 实现:

  • HTTP 上报器(批量缓冲 + 指数退避重试 + 超量保护)
  • gRPC 上报器(客户端流式 RPC + protobuf 序列化)
  • FreeSql 存储(SQLite/MySQL/PostgreSQL)
  • ClickHouse 存储(高性能列式数据库)
    第四阶段:测试与优化

通过 TRAE 生成 255 个单元测试,覆盖核心功能,修复并发问题(如 TraceConfiguration.GetSampler() 的双检查锁)。

第四阶段:构建打包Hyz.Trace.Client nuget包 ,支持一键安装客户端
使用 TRAE 实现:

  • 把多个类库打包到一个聚合NUGET包中

关键步骤截图:

Session ID:

  • Session 1: .3308879699525324:dd63ebcbd285c167b322ec3e4122c5e7_6a43742dac012932dbb3ef2d.6a43743bac012932dbb3ef30.6a43743ab471c83c3f4e9414:Trae CN.T(2026/6/30 15:46:03)
  • Session 2: .3308879699525324:acc37d9c2d39932d18b1ad49dd127bdd_6a445c3862411925c9cf2e56.6a44626c62411925c9cf30cf.6a44626cb3daaea9284bf856:Trae CN.T(2026/7/1 08:42:20)
  • Session 3: .3308879699525324:1a04b73646cb35582b9eb3136efb8fad_6a445c3862411925c9cf2e56.6a445d7362411925c9cf2e58.6a445d71b3daaea9284bf854:Trae CN.T(2026/7/1 08:21:07)
  • Session 4: .3308879699525324:f609e1a5fc3373c60c0aa2869a7c83f2_6a5340e4b5cc82864c64d183.6a537d45b5cc82864c64de8e.6a537d44708656232fd961a9:Trae CN.T(2026/7/12 19:40:53)
  • Session 5: .3308879699525324:7a67160128ee45fa05b585113c77541c_6a54a88a813692a2b7027eaf.6a54a9e2813692a2b7027eb1.6a54a9e1f807ab86e7852e1c:Trae CN.T(2026/7/13 17:03:30)
  • Session 5: .3308879699525324:fc28f7df31e0658c0ec5edc175ba91c0_6a56f45a69721cab9c66f895.6a56f5d569721cab9c66f954.6a56f5d4ff48c14f8bc34cc3:Trae CN.T(2026/7/15 10:52:05)
    开发心得:

TRAE 在这个项目中发挥了关键作用:

  1. 加速前端开发 — 从静态 HTML 到可交互 Dashboard,TRAE 帮我快速完成数据绑定、事件处理、图表集成,节省了大量前端开发时间。
  2. 复杂代码生成 — Source Generator 和 Fody IL 编织涉及大量 Roslyn API 和 Mono.Cecil 操作,TRAE 给出了高质量的实现,并且自动处理了边界情况。
  3. 问题排查与修复 — 遇到异步上下文丢失、FreeSql 状态污染、gRPC 端口冲突等问题时,TRAE 能够快速定位根因并给出解决方案。
  4. 测试覆盖 — TRAE 自动生成了全面的单元测试,帮助我发现了很多潜在的并发问题和边界情况。
    踩坑经历:
  • koa-connect wrapper 导致 ctx 泄漏 — 最初尝试用 koa-connect 包装中间件,发现会导致上下文泄漏,最终用原生 Koa 中间件重写解决。
  • ECharts 隐藏 tab 中不渲染 — 切换到隐藏 tab 后图表不显示,需要在 tab 切换时显式触发 resize。
  • FreeSql ISelect 状态污染 — 在 Sqlite/MySql/PostgreSQL 中,Count() 后的 ISelect 会污染状态,导致后续 Avg/Max/Min 聚合失败,必须分开查询。
  • gRPC 端口配置 — 5000 端口用 HTTP/1.1(REST),5001 端口用 HTTP/2(gRPC),需要在 launchSettings.json 中明确配置。

5. 对应的报名审核通过的帖子链接

1 个赞