如果您的服务网格中的追踪采样率设置得过低,您可能只能在请求量足够时看到追踪数据。
您可以根据需要增加采样率。
当查询近期(例如过去30分钟)追踪数据时,如果追踪结果不包括过去10秒的数据,这种情况是正常的。您可以稍等片刻,刷新页面再试。
这是因为追踪数据存储在Elasticsearch中,Elasticsearch提供近实时的搜索能力。
此外,ASM在Elasticsearch中配置追踪索引的默认设置为"refresh_interval": "10s"
,这意味着Elasticsearch每10秒将内存中的数据刷新到磁盘,此后数据才会变得可搜索。
该索引配置有效地降低了Elasticsearch的数据合并压力,提高了索引速度和初始查询性能,但稍微减少了数据的实时性。
您可以使用--es.asm.index-refresh-interval
启动参数调整此配置,适用于jaeger-collector
。默认值为10s
。
如果将此参数设置为"null"
,则索引的refresh_interval
将不会被配置。
在执行追踪查询时,如果对Span kind
参数的技术原理理解不够透彻,可能导致没有数据被返回。因此,不建议随意使用此参数。尤其当同时指定Client
和Server
时,可能会导致查询结果为空。
Span kind
设置为Root Span
,同时指定Client
和Server
在这种情况下,查询将返回无数据。原因是当客户端和服务器都由OTel Agent管理时,追踪的根跨度通常位于客户端,而服务器数据将不会被检索。要解决此问题,请移除Server
条件或避免选择Root Span
。
Span kind
设置为Service Entry Span
,同时指定Client
和Server
类似地,此查询也将返回无数据。原因在于,当客户端和服务器都有Sidecar注入时,Service Entry Span
指的是服务器接收到的第一个请求,但追踪数据存储在客户端。要解决此问题,请移除Client
条件或避免选择Service Entry Span
。
当查询近期(例如过去30分钟)的追踪数据时,如果追踪中的跨度不完整,这种情况是正常的。您可以稍等片刻,刷新页面再试。
这是因为在Elasticsearch刷新最新跨度到磁盘时,某些跨度尚未生成或写入磁盘,导致追踪结果不完整。
如果查询的追踪具有较长的持续时间(例如超过一小时),可能会返回不完整的数据,这种情况也是正常的。
默认情况下,当ASM针对一个跨度查询追踪时,时间范围会扩展到跨度开始和结束时间的前后各一小时。
例如,如果一个跨度在08:12
,并在08:12,则该追踪的查询时间范围将从07:12:30到09:12。因此,如果追踪时间跨度超过一小时,通过该跨度查询可能无法检索完整的追踪。
如果您环境中的追踪通常具有更长的持续时间,您可以使用--es.asm.span-trace-query-time-adjustment-hours
启动参数调整单个追踪的查询时间范围,适用于jaeger-query
。
该参数的默认值为一小时,但您可以根据需要增加。