微服务分布式对接口调用,你们是怎么追踪链路的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cking
V2EX    Java

微服务分布式对接口调用,你们是怎么追踪链路的?

  •  
  •   cking 2020 年 12 月 28 日 5755 次点击
    这是一个创建于 1858 天前的主题,其中的信息可能已经有所发展或是发生改变。

    示例服务器:
    A-business-service: A 业务系统实现服务(业务实现方法)
    A-base-service: A 基层系统实现服务(链接 Mysql)
    B-business-service: B 业务系统实现服务(业务实现方法)
    B-base-service: B 基层系统实现服务(链接 Mysql)
    A 可调用 A/B 的基础 但是 A 不能调用 B 业务层
    .....
    现在的是这样的 有一串代码
    public void example(){
    .....
    aBusiness.aBase();
    aBsuiness.bBase();
    .....
    }
    然后在 A 调用 B 基础的时候报错了 看日志 是 B-base 报错的 然后但是我们不知道是 A-business 的调用还是 B-business 的调用...

    现在的有一个想法就是用一个服务固定的 source 字段去标记 然后传递到基础服务的接口中...(管理觉得加入分布式链路追踪太麻烦了) 我的想法是用 ZipKin 之类的开源框架

    V 友们也可以推荐一下好用的框架或者 Idea. Thx

    39 条回复    2020-12-29 17:23:50 +08:00
    wolfie
        1
    wolfie  
       2020 年 12 月 28 日
    demobin
        2
    demobin  
       2020 年 12 月 28 日
    request.getRemoteAddr()
    cking
        3
    cking  
    OP
       2020 年 12 月 28 日
    @demobin 用过了 但是我们的服务 有时候两三个服务在一个机子上面....
    monkeyWie
        4
    monkeyWie  
       2020 年 12 月 28 日 via Android
    skywalking esapm 可以看看
    unixeno
        5
    unixeno  
       2020 年 12 月 28 日 via Android
    第一个发起者生成一个 logid,后面的 rpc 一路传下去
    limuyan44
        6
    limuyan44  
       2020 年 12 月 28 日 via Android
    我几年前搞这个当时只有个 dubbo,啥配套的都没上,最简单的就是链路加个 id 就完事了,java 来搞改改 rpc 框架和日志模板用不了几行代码,还不影响现有的代码,查日志看 id 就行了。
    joesonw
        7
    joesonw  
       2020 年 12 月 28 日
    java 全家桶的话就 skywalking 嘛. 不然就 opentracing 那一套, 存储可以用 jaeger.
    cking
        8
    cking  
    OP
       2020 年 12 月 28 日
    @monkeyWie
    @unixeno
    @joesonw
    感谢大家回复 公司给时间慢慢看 嘿嘿 摸鱼+1
    vindurriel
        9
    vindurriel  
       2020 年 12 月 28 日 via iPhone
    复议 5 楼 debug 的话透传 request id 就行 用不着实施链路追踪系统
    imycc
        11
    imycc  
       2020 年 12 月 28 日
    在 nginx 或者网关入口生成一个 traceid (如果有就不生成),改造一下业务的日志模块,打印这个 ID 。日志传到 es,剩下就自行发挥
    InkAndBanner
        12
    InkAndBanner  
       2020 年 12 月 28 日
    zipkin
    gmywq0392
        13
    gmywq0392  
       2020 年 12 月 28 日
    谷歌有论文。
    xuanbg
        14
    xuanbg  
       2020 年 12 月 28 日
    网关拦截验证鉴权的同时生成一个 requestId,放在请求头一路传到底。然后 kibana 就能根据这个 requestId 找出一串日志来。
    clf
        15
    clf  
       2020 年 12 月 28 日
    网关生成一个 ID,然后日志里全会附带这个 ID,调用链就都出来了。
    qfdk
        16
    qfdk  
    PRO
       2020 年 12 月 28 日 via iPhone
    apm 吧 这个简单
    qfdk
        17
    qfdk  
    PRO
       2020 年 12 月 28 日 via iPhone
    @imycc 都有 es 了 用他家 apm 就好了, 挂个 agent 起来 给每条数据都有个 transactionId 还有个 traceId. 这样需要某些特定 log 的 改下 file beat 穿出去就好了
    csl1995
        18
    csl1995  
       2020 年 12 月 28 日
    requestid
    Yoock
        19
    Yoock  
       2020 年 12 月 28 日
    jaeger?
    cking
        20
    cking  
    OP
       2020 年 12 月 28 日
    @xuanbg
    @lychs1998
    我们之前想法就是用这个请求头来获取 我们有一个全局拦截接口参数 刚刚好可以打印
    Kyle18Tang
        21
    Kyle18Tang  
       2020 年 12 月 28 日
    不知道你们是不是用的 Java,如果技术栈是 Spring Cloud 推荐使用 Spring Cloud Zipkin,默认支持很多场景的链路追踪,例如 HTTP 、RabbitMQ 、Kafka 、MySQL 、MongoDB 等都有支持。
    Jooooooooo
        22
    Jooooooooo  
       2020 年 12 月 28 日
    入口埋一个唯一 id, 然后一路传下去.

    一般放在 thread local 里, 对于线程池稍微改造下
    cking
        23
    cking  
    OP
       2020 年 12 月 28 日
    @Kyle18Tang 就是 Cloud 家族
    Kyle18Tang
        24
    Kyle18Tang  
       2020 年 12 月 28 日
    @cking #23 我们现在使用的就是 Spring Cloud Zipkin,很舒服,整个链路都能追踪,通过 Trace Id 就能搜索到所有链路上的日志了
    cking
        25
    cking  
    OP
       2020 年 12 月 28 日
    @Kyle18Tang #24 我先试下 requestId 的方式 主要是管理不太想继续集成其他框架了 除非万不得已
    cking
        26
    cking  
    OP
       2020 年 12 月 28 日
    @Kyle18Tang #24
    @cking #25
    已经叫我们运维在 nginx 中加了一个 X-Request-Id 了 在请求头中
    Kyle18Tang
        27
    Kyle18Tang  
       2020 年 12 月 28 日
    @cking #25 微服务只需要依赖一个 starter 而已。。。然后加个往哪里发送的配置。Zipkin 的服务器另外搭建,Docker 就能启动,数据我们存到了 ES 里。自己写我是感觉真没必要,费时费力。
    whiler
        28
    whiler  
       2020 年 12 月 28 日
    业界已经有一套成熟的方案了,可以看一下 opentracing
    Kyle18Tang
        29
    Kyle18Tang  
       2020 年 12 月 28 日
    @cking #26 不再建议自定义 HTTP 头采用 X-前缀,https://tools.ietf.org/html/rfc6648
    cking
        30
    cking  
    OP
       2020 年 12 月 28 日
    @Kyle18Tang 好的 我去把主管说服吧 哈哈哈
    xuanbg
        31
    xuanbg  
       2020 年 12 月 28 日
    Zipkin 真心没有自己查 requestId 方便
    gjf
        32
    gjf  
       2020 年 12 月 28 日 via iPhone
    这可以用 trace 解决也叫分布式链路追踪,可以看看云原生的 opentraceing,如果 java 可以使用 specialagent,对代码没有任何侵入
    Yiso1573
        33
    Yiso1573  
       2020 年 12 月 28 日
    spring sleuth ,好像要求 spring cloud ?目前我们用的这个
    xuzhzzz
        34
    xuzhzzz  
       2020 年 12 月 28 日
    《管理觉得加入分布式链路追踪太麻烦了》

    同样的领导,明明主流方案就在那里,偏偏自己搞,搞得不三不四的,到头来难受的还是自己
    cking
        35
    cking  
    OP
       2020 年 12 月 28 日
    @xuzhzzz 没法 程序员打工仔 最底层的人 被测试,产品,运维,前端呼来唤去
    chogath
        36
    chogath  
       2020 年 12 月 28 日
    requestId
    laminux29
        37
    laminux29  
       2020 年 12 月 29 日
    整个过程,每个经过的节点 ID 或组件 ID 必须都记录上,要不以列表或数组形式记录在数据里,要不分散在各组件的日志里后期汇总。

    这种东西无论是调试、流控还是分布式性能调优,都有重要作用。
    lewis89
        38
    lewis89  
       2020 年 12 月 29 日
    其实...最好的办法是不上微服务...大部分公司的量级根本没有达到紧迫到需要上微服务的情况
    liian2019
        39
    liian2019  
       2020 年 12 月 29 日
    traceId + spanId
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4758 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 02:50 PVG 10:50 LAX 18:50 JFK 21:50
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86