V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
sun1993
V2EX  ›  分享创造

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

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

    简介:

    这个工具是基于 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   ·   实用小工具   ·   5356 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 09:24 · PVG 17:24 · LAX 02:24 · JFK 05:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.