Zipkin 使用api调用没有数据 Zipkin api traces为空

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31772441/article/details/82229044

Zipkin 部分接口没有数据

今日,调用zipkin接口获取数据的时候,遇到获取不到数据的问题。
Zipkin API具体参看 https://zipkin.io/zipkin-api/#/

问题情况描述如下:

2018-08-29日下午xx点xx分
1、在zipkin自带的web UI中,有数据。
2、调用zipkin的api,具体调用的api为”/traces”(该接口返回所有的链路追踪信息),有数据返回。
3、调用zipkin的api,具体调用的api为“/trace/{traceId}”(该接口返回对应id的链路追踪信息),有数据。
2018-08-30日上午xx点xx分
1、在zipkin自带的web UI中,有数据。
2、调用zipkin的api,具体调用的api为”/traces”(该接口返回所有的链路追踪信息),没有!没有数据返回!
3、调用zipkin的api,具体调用的api为“/trace/{traceId}”(该接口返回对应id的链路追踪信息),有数据!

那么问题就来了,昨天能查出来的数据,今天查不到!!?这是什么操作?

仔细翻看了Zipkin 的api文档(https://zipkin.io/zipkin-api/#/),“/traces”接口是返回所有链路信息没错啊,没有必要的参数啊,看来看去感觉没什么猫病(英语太差了,也看不大懂,翻译过来中文也是云里雾里,伤)
后来,经dalao点播,上面问题情况描述的一个重要点,就是时间,昨天可以,今天不可以!重点关注下时间的问题,在仔细看看api文档,发现如下:
这里写图片描述
“/traces”接口的可选参数,endTs,lookback是关于时间,强行翻译一波,返回的traces数据时间戳在endTs之前,在lookback之后??!

尝试使用了“/traces?endTs=1535475600” 调用(1535475600是2018/08/29的时间戳),咦,有数据返回
尝试使用了“/traces?endTs=1535562000” 调用(1535562000是2018/08/30的时间戳),没有数据返回
…(省略各种尝试)

还是云里雾里,dalao再次点播,那不如去看看源码。
那就看一下,通过官网到GitHub下载Zipkin源码,导入Eclipse maven项目,一堆项目如图
这里写图片描述
好吧,我也是猜测,应该是在server项目下,看看看,应该是这个xxxApiV2这个类,搜一下 “/traces”,然后,就找到了“/traces”这个接口的源码了,用一张图表示一下
这里写图片描述

api文档展示的 “/traces”接口参数,对应getTraces方法的各个参数,
endTs的默认值是 System.currentTimeMillis(),
lookback的默认值是 defaultLookback,细看一下
这里写图片描述
!!!震惊,默认lookback是一天的毫秒数(24*3600*1000 = 86400000),是一个时间间隔!(英语太菜,伤)

好吧,扯了一堆,最后总结一下,
“/traces”接口,调用时不带参数,就是查:小于当前时间,大于(当前时间 - 一天的毫秒数)的数据,(即当前时间前一天之后的数据)(即:nowTimestamp - 24*3600*1000 < 数据的timestamp < nowTimestamp)

对于我遇到的问题,是因为追踪数据的timestamp不在 当前时间前一天 之后,所以才查不到。

最最后,解决

在调用 “/traces”接口时,设置lookback参数的值,设置大一点,比如十天(86400000 * 10)
eg:xxxxx/api/v2/traces?lookback=864000000


另,“/services”接口默认时间间隔也是一天,但是“/services”接口没有提供参数,要修改只能通过修改源码的方式修改了,看需求吧。


猜你喜欢

转载自blog.csdn.net/qq_31772441/article/details/82229044