V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
sun1993
V2EX  ›  奇思妙想

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

  •  1
     
  •   sun1993 · 2018-11-29 23:11:27 +08:00 · 1334 次点击
    这是一个创建于 2179 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简介:

    这个工具是基于 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

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

    最后,求轻喷

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1972 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:26 · PVG 08:26 · LAX 16:26 · JFK 19:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.