查询追踪数据常见问题

目录

为什么找不到所需的追踪数据?

1. 追踪采样率过低

如果您的服务网格中的追踪采样率设置得过低,您可能只能在请求量足够时看到追踪数据。

您可以根据需要增加采样率。

2. 查询最近的追踪数据

当查询近期(例如过去30分钟)追踪数据时,如果追踪结果不包括过去10秒的数据,这种情况是正常的。您可以稍等片刻,刷新页面再试。

这是因为追踪数据存储在Elasticsearch中,Elasticsearch提供近实时的搜索能力。

此外,ASM在Elasticsearch中配置追踪索引的默认设置为"refresh_interval": "10s",这意味着Elasticsearch每10秒将内存中的数据刷新到磁盘,此后数据才会变得可搜索。

该索引配置有效地降低了Elasticsearch的数据合并压力,提高了索引速度和初始查询性能,但稍微减少了数据的实时性。

您可以使用--es.asm.index-refresh-interval启动参数调整此配置,适用于jaeger-collector。默认值为10s

如果将此参数设置为"null",则索引的refresh_interval将不会被配置。

3. 查询条件设置不当

在执行追踪查询时,如果对Span kind参数的技术原理理解不够透彻,可能导致没有数据被返回。因此,不建议随意使用此参数。尤其当同时指定ClientServer时,可能会导致查询结果为空。

示例1:Span kind设置为Root Span,同时指定ClientServer

在这种情况下,查询将返回无数据。原因是当客户端和服务器都由OTel Agent管理时,追踪的根跨度通常位于客户端,而服务器数据将不会被检索。要解决此问题,请移除Server条件或避免选择Root Span

示例2:Span kind设置为Service Entry Span,同时指定ClientServer

类似地,此查询也将返回无数据。原因在于,当客户端和服务器都有Sidecar注入时,Service Entry Span指的是服务器接收到的第一个请求,但追踪数据存储在客户端。要解决此问题,请移除Client条件或避免选择Service Entry Span

查询到的追踪不完整的原因是什么?

1. 当前时间段的追踪数据不完整

当查询近期(例如过去30分钟)的追踪数据时,如果追踪中的跨度不完整,这种情况是正常的。您可以稍等片刻,刷新页面再试。

这是因为在Elasticsearch刷新最新跨度到磁盘时,某些跨度尚未生成或写入磁盘,导致追踪结果不完整。

2. 长时段跨度的追踪不完整

如果查询的追踪具有较长的持续时间(例如超过一小时),可能会返回不完整的数据,这种情况也是正常的。

默认情况下,当ASM针对一个跨度查询追踪时,时间范围会扩展到跨度开始和结束时间的前后各一小时。

例如,如果一个跨度在08:12

,并在08:12
,则该追踪的查询时间范围将从07:12:30到09:12

因此,如果追踪时间跨度超过一小时,通过该跨度查询可能无法检索完整的追踪。

如果您环境中的追踪通常具有更长的持续时间,您可以使用--es.asm.span-trace-query-time-adjustment-hours启动参数调整单个追踪的查询时间范围,适用于jaeger-query

该参数的默认值为一小时,但您可以根据需要增加。