分享正在开发一个程序跟踪和监控的小工具,希望征求一些好的建议

2018-11-30 21:16:23 +08:00
 sun1993

简介:

这个工具是基于 OpenTracing 标准开发的一套程序内全链路式的跟踪系统,用户在使用时只要将需要追踪的方法上加上 @DottingNode 注解,就可以将该方法作为链路的一个节点,记录到当次请求中。

目前支持:

1.工具做了循环逻辑合并处理,避免在程序循环多次的情况下出现多个相同子节点的情况,合并的同时还会统计循环过程中最大一次耗时、最小一次耗时、平均耗时。

2.工具提供的前端 UI 会给每个节点按照情况标记成不同的颜色,主要有绿色(正确执行并且符合预期时间)橙色(表示实际执行时间超过预期时间)红色(表示当前节点异常)

3.支持多线程上报,比如一次 API 请求,记为一次主线程,期间可能产生一部分异步执行的操作,这部分操作也可以被追踪到,因此前端 UI 会把当次链路分成「同步区」和「异步区」,详情请看下方项目地址中的自测效果图。

这个工具可以做到的事情:

1.异常节点标红,可以帮助你非常容易的找出一次调用中哪一环节出现了异常,点击节点还可以查看具体的 Exception 信息

2.由于做了合并逻辑,利用树状结构的<同层级执行次数之和 × 父级节点执行次数之和>计算出被跟踪程序的复杂度,帮助你定位部分复杂度较大的代码块

3.可以帮助你监控哪个方法执行过慢

目前进度:

现阶段正在开发自测中,自测使用的存储是 mysql,目前有打算先给自己公司的 TASK 类项目(定时任务、管理后台等)集成一下做检测,但是开发过程中遇到了如下问题:

1.采用哪一款 DB 存储这些链路数据比较合适呢?需不需要支持定时清理数据呢?目前上报策略是程序出错了立即上报,5min 相同链路根方法内至少上报一次,正常时千分之一的上报概率。

2.因为要提供给第三方使用,该怎么设计存储这一块的 API 才能让第三方接入时遇到的困难降到最低?

3.也是目前面临的比较大的问题,不支持跨进程(系统),那么,该如何设计这一块的协议信息的传输呢?传输协议最起码要支持 http、rpc 传递,例如 http 可以将协议信息放到请求头里,但是怎么做到不入侵用户代码传递呢?目前没有特别好的思路,有点困扰

项目及自测效果图地址:

https://github.com/exceting/DottingTimer

感兴趣的同学希望可以点个星星,欢提供有意思的想法或建议~

最后,求轻喷

1256 次点击
所在节点    分享创造
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/513200

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX