码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 从零搭建开发脚手架 轻量级链路追踪Trace


    背景

    在项目中,当用户的一次请求表现的比较慢,例如花费了3秒,我们想知道这3秒具体花费在哪里,整体链路中的每个环节的耗时是多少?

    我们应该怎么做呢?选择skywalking等成熟的链路产品肯定是可行的,但是有些场景也是需要轻量级方案的。
    例如:

    • 有些项目出于安全考虑,不允许使用agent方式
    • 有些项目并没有很好的基建和运维,去搭建skywalking等

    先看下具体的效果

    16:37:48.984[io-28] [16|61c652b896b844c48cdc086d0f6e61f2]: +[0](1)[200ms]:[Controller]-ExtLeaveController.pageAll
    16:37:48.985[io-28] [16|61c652b896b844c48cdc086d0f6e61f2]: ++【1】(2)[47ms]:[Others]-leaveService.page
    16:37:48.985[io-28] [16|61c652b896b844c48cdc086d0f6e61f2]: ++[1](3)[35ms]:[Others]-xxxmodule.xxmethod
    16:37:48.985[io-28] [16|61c652b896b844c48cdc086d0f6e61f2]: ++[1](4)[15ms]:[Service]-SysUserServiceImpl.getUserAndDeptById
    16:37:48.986[io-28] [16|61c652b896b844c48cdc086d0f6e61f2]: +++【2】(5)[5ms]:[Others]-deptMapper.selectById
    16:37:48.986[io-28] [16|61c652b896b844c48cdc086d0f6e61f2]: ++[1](6)[5ms]:[Service]-SysUserServiceImpl.getUserDataPowers
    16:37:48.986[io-28] [16|61c652b896b844c48cdc086d0f6e61f2]: +++【2】(7)[5ms]:[Others]-sysUserMapper.getUserDataPowers
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 16:用户id
    • 61c652b896b844c48cdc086d0f6e61f2:一次请求的traceId
    • 后面的就是每个span的层级、调用栈、耗时、类型、名称
    • 每层最耗时的方法标粗了
      可以把日志搜集到ELK(没有条件就算了),然后通过traceId搜索链路。

    方案

    前端

    每次请求的时候在Http header中加入 trace_id:uuid

    服务端

    • 从Http header中获取 trace_id,并加入到MDC中,便于打印到日志中。
    • 调用其他远程接口在Http header中加入 trace_id:uuid + uuid,在原有的基础上加上server端的uuid。
    • 发送消息到MQ也在message中加入trace_id:uuid + uuid。
    • 在请求的Http response header中把trace_id:uuid + uuid返回给前端。

    整体代码

    • https://gitee.com/lakernote/easy-admin
    • https://gitee.com/lakernote/easy-admin/tree/master/src/main/java/com/laker/admin/framework/aop/trace
  • 相关阅读:
    申请发明专利的流程及时间
    当装饰者模式遇上Read Through缓存,一场技术的浪漫邂逅
    NX二次开发-NX客户机与服务器FTP上传下载文件
    共建“一带一路”教育行动步入高质量发展新阶段
    排序——直接插入、折半插入、希尔排序
    Windows XP迎来20岁生日,仍有上百万用户坚守
    简单的收入支出明细记账软件有哪些,哪些适合开店用?
    【Linux网络编程】epoll进阶之水平模式和边沿模式
    Vue3 el-tooltip 根据内容控制宽度大小换行和并且内容太短不显示
    【数据结构-树】并查集的定义及其操作
  • 原文地址:https://blog.csdn.net/abu935009066/article/details/126290924
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号