• ~
    2022-02-07
    https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql 这是官方仓库中给的 MySQL 改造的脚本,创建一个 zipkin 的 db 库;之后可以从 https://github.com/openzipkin/zipkin/blob/16857b6cc3/zipkin-server/src/main/resources/zipkin-server-shared.yml 配置文件中看到 mysql 的配置项,然后对照着之前老师给的命令,添加上 MySQL 的即可。 我的命令: java -jar zipkin-server-2.23.9-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_USER=root --MYSQL_PASS=123456 --MYSQL_DB=zipkin --RABBIT_ADDRESSES=127.0.0.1:5672

    作者回复: 满分作业诞生

    
    17
  • yinwenping
    2022-03-15
    这种traceid只是在两个服务直接适用吗?比如服务A调用服务B,而服务B内部时线程池处理的,线程池还能用A的traceid吗?

    作者回复: 取决你调用异步线程的方式,就拿ThreadPoolExecutor这种标准的线程池来说,你使用execute和submit都会产生不一样的结果,一个会公用trace另一个会重新生成trace id,这个例子它底层就取决于AsyncDefaultAutoConfiguration的具体实现。 使用spring代理线程池,或者scheduling线程池,都有不同的表现,同学需要结合sleuth源代码来了解具体行为

    
    8
  • 牛年榴莲
    2022-06-01
    Zipkin 好像不支持告警,有没有能根据链路追踪情况进行告警的组件呢?

    作者回复: 有的,zipkin其实是做tracing的,告警我们可以利用ELK这一层来做,比如ElastAlert集成ES,或者Kibana的sentinl插件。我们公司是使用Prometheus+grafana来做的

    
    2
  • peter
    2022-02-02
    下面四个问题是在第21篇提的,不过在21篇留言中没有发现,很奇怪。重新提一次。 老师新年快乐,请教四个问题: Q1: 实际的线上系统,用户请求是直接到gateway吗?还是需要在gateway的前面加一个节点?如果需要,一般用什么?Nginx吗? Q2:Sleuth是怎么产生TraceID、Span ID、Parent Span ID的? Q3:时间同步问题:Sleuth通过时间来排序,如果不同服务所在机器的时间不是同步的,会有什么问题?怎么解决? Q4:Sleuth是怎么实现“打标”的?怎么获取到微服务之间的调用信息的?又是怎么影响到日志组件(e.g,logback)的?通过拦截器实现的吗?

    作者回复: Q1: 用户请求通常不直达gateway,前面用nginx、f5之类的网关层来接 Q2: 答案有一半已经在文章中了,同学可以参考TracingFeignClient,看一看它往请求的header里塞的这些ID,然后就能找到是怎么生成出来的 Q3: 时钟同步是线上运维团队的工作内容,确保集群时间同步,另外sleuth主要是通过span id + parent span id来确保先后顺序,即使时钟不对也能理清前后顺序。 Q4: 打标的答案也在文章中,TracingFeignClient这个类里面是打标过程,然后标通过MDC传入到底层日志组件里,最终输出

    
    2
  • alex_lai
    2022-02-06
    rabbitmq的配置没有提 需要单独启动 配置queue 么?

    作者回复: 交换机会在项目启动的时候被底层的stream组件自动创建,当然了,如果手动创建也是可以的,注意绑定下交换机和队列即可

    
    1
  • peter
    2022-02-02
    Q1:"# 每秒采样数字最高为100 rate: 1000" 注释为100,实际是1000,是笔误吗? Q2:“如果我们把 probability 设置成小于 1 的数,就说明有的请求不会被采样” 哪些会被采样?哪些不会被采样? Q3:“在 OpenFeign 的环节动了一个手脚。Sleuth 通过 TracingFeignClient 类,将一系列 Tag 标记塞进了OpenFeign 构造的服务请求的 Header 结构中” A 如果一个组件,sleuth没有适配,能扩展吗? B Sleuth对OpenFeign的处理,是通过拦截器实现的吗?

    作者回复: Q1: 是的应该是1000.注释写错了 Q2:根据概率随机采样,0.5就是采样50% Q3: A: 可以扩展 B: 通过AOP切面拦截feign.Client的调用

    
    1
  • 吴少伟
    2022-06-05
    追加一个问题:任务调度开始执行的时候,可以生成traceId等信息啊?ps:自己留言跑哪里去了。。。。咋找不到

    作者回复: 不管它的底层技术是什么,只要Sleuth中有对应的适配器就可以识别上游的trace ID,这是对于需要互相调用的系统来说的。 对于任务调度,可以理解为本地启动的java程序,执行的时候也会初始化trace,但调度过程中你如果调用的下游服务,对方要在sleuth中支持适配才能识别上游trace

    
    
  • 吴少伟
    2022-06-05
    老师咨询几个小问题: 1、必须要设置日志级别为debug吗?设置为info是否可以,已经集成了其他的日志收集器了,现在目的只想加上traceId和spanId信息。修改log的配置文件增加这个数据的参数,可以直接打印出来吗? 2、对性能是否有影响?

    作者回复: 日志系统对性能肯定是有些许损耗的,但带来的好处已经可以完全抵消这一丢丢损耗了,所以没得关系。 然后trace ID和span ID是可以在任何日志级别下打印出来的,只要设置log pattern就可以了

    
    
  • 寥若晨星
    2022-04-19
    我怎么记得要生成链路图,还要再下载一个jar包定时执行一下任务

    作者回复: 链路图可以直接在zipkin的界面看到,展示实时流量

    
    
  • 奔跑的蚂蚁
    2022-03-30
    请问老师 sleuth依赖 上下游服务器都要加嘛

    作者回复: 对滴,所有链路上的服务都要加上这个sleuth依赖,不然只会打log但trace链路会断掉

    
    