场景:
zipkin链路日志在elasticsearch中正常生成链路数据,当数据通过es查询traceId数据是存在的,但是调用zipkin的api却查询不到当天数据之前的数据。
当天的数据再es中是存在的
当天之前的数据再es中也是存在的
以上说明zipkin在es中数据是正常写入的是正常。
问题一:为何调用zipkin的接口查询不到当天之前的数据如下
其中gisq_request_id=fe88132e-1190-4e36-b0b2-286bceb39df1是当天之前的id.
注:lookback参数是zipkin中api携带的参数默认查询的是当前数据lookback默认是86400000,如果要查询之前的数据需要86400000*nday,我这里查询的是之前10天的数据
其中gisq_request_id=973fa4e7-91e2-4d30-82dd-ad6770144897是当天的id.
这就很奇怪了,数据在elasticsearch中是存在的,为什么调用zipkin的api查询不到呢?????
问题分析:
zipkin中api调用异常的索引信息
zipkin中api调用正常的索引信息
数据生成结构分析
异常情况下数据生成的结构中包含有_q字段,因为映射模板mapping中没有排除了该字段
正常数据清空下_source下面没有_q这个字段,因为映射模板mapping中排除了该字段。
另外异常调用时zipkin/api/v2/traces?annotationQuery=gisq_request_id=fe88132e-1190-4e36-b0b2-286bceb39df1&lookback=864000000&limit=100时,后端报了空指针。
提示的是json解析失败
问题原因:
zipkin索引模板可能被其它人动过,
可能是通过es命令删除索引模板
也可能是通过图形化界面删了当前的zipkin索引,代码中重新创建的索引数据
场景复现:
通过zipkin创建索引后,然后通过图形化界面将当天的索引数据删除掉
删除后再次生成的索引的shard变成0个,未删除之前默认创建索引有5个shard