Distributor 拒绝 Span
拒绝 Span 最可能的两个原因是 ingester 不健康或超过了追踪限制。
要记录被丢弃的 Span,请在 distributor 中添加 --distributor.log_discarded_spans.enabled
标志,或调整 distributor 配置
distributor:
log_discarded_spans:
enabled: true
include_all_attributes: false # set to true for more verbose logs
添加此标志将记录所有丢弃的 Span,如下所示
level=info ts=2024-08-19T16:06:25.880684385Z caller=distributor.go:767 msg=discarded spanid=c2ebe710d2e2ce7a traceid=bd63605778e3dbe935b05e6afd291006
level=info ts=2024-08-19T16:06:25.881169385Z caller=distributor.go:767 msg=discarded spanid=5352b0cb176679c8 traceid=ba41cae5089c9284e18bca08fbf10ca2
不健康的 ingester
不健康的 ingester 可能由 OOM 失败或缩减事件引起。如果您有不健康的 ingester,您的日志行将类似于此
msg="pusher failed to consume trace data" err="at least 2 live replicas required, could only find 1"
在这种情况下,您可能需要在 Distributor 上访问 ingester 的 环形页面 /ingester/ring
,并“遗忘”不健康的 ingester。这在短期内有效,但长期解决方案是稳定您的 ingester。
达到追踪限制
在高流量追踪环境中,默认的追踪限制有时不足够。这些限制旨在保护 Tempo,防止它出现 OOM、崩溃或其他情况,以免租户相互进行 DOS 攻击。如果您由于限制而拒绝 Span,您将在 distributor 中看到如下日志
msg="pusher failed to consume trace data" err="rpc error: code = FailedPrecondition desc = TRACE_TOO_LARGE: max size of trace (52428800) exceeded while adding 15632 bytes to trace a0fbd6f9ac5e2077d90a19551dd67b6f for tenant single-tenant"
msg="pusher failed to consume trace data" err="rpc error: code = FailedPrecondition desc = LIVE_TRACES_EXCEEDED: max live traces per tenant exceeded: per-user traces limit (local: 60000 global: 0 actual local: 60000) exceeded"
msg="pusher failed to consume trace data" err="rpc error: code = ResourceExhausted desc = RATE_LIMITED: ingestion rate limit (15000000 bytes) exceeded while adding 10 bytes"
您还会看到以下指标递增。此指标上的 reason
标签将包含有关拒绝原因的信息。
tempo_discarded_spans_total
在这种情况下,使用可用的配置选项来增加限制。
客户端重置连接
当客户端在 distributor 能够消费追踪数据之前重置连接时,您会看到如下日志
msg="pusher failed to consume trace data" err="context canceled"
此问题需要在客户端进行修复。要检查是哪些客户端导致了问题,使用 include_all_attributes: true
记录被丢弃的 Span 可能会有所帮助。
请注意,上下文关闭可能还有其他原因。确定上下文关闭的原因并不简单,可能需要额外的调试。