队列中的作业太多
错误消息也可能是
队列没有足够的空间容纳 100 个作业
未能将作业添加到工作队列
如果 compactor 未运行且 blocklist 大小急剧膨胀,您可能会看到此错误。compactor 可能未运行的可能原因包括:
- 权限不足。
- 由于没有块哈希到 compactor,导致其处于空闲状态。
- 配置设置不正确。
诊断问题
- 检查指标
tempodb_compaction_bytes_written_total
。如果此值大于零(0),则表示 compactor 正在运行并向后端写入数据。 - 检查指标
tempodb_compaction_errors_total
。如果此指标大于零(0),请检查 compactor 的日志以查找错误消息。
解决方案
- 验证 Compactor 对存储桶对象具有 LIST、GET、PUT 和 DELETE 权限。
- 如果缺少这些权限,请将其分配给 compactor 容器。
- 有关详细信息,请参阅 Amazon S3 权限。
- 如果存在某个 compactor 在其他 compactor 运行时却处于空闲状态,请将端口转发到 compactor 的 http 端点。然后转到
/compactor/ring
并单击空闲 compactor 上的 Forget。 - 检查以下配置参数以确保设置正确
max_block_bytes
用于确定 ingester 何时切割块。根据工作负载的不同,一个好的数值范围是 100MB 到 2GB。max_compaction_objects
用于确定一个压缩块中的最大对象数。此值应相对较高,通常在百万级别。retention_duration
用于确定追踪应在后端保留多长时间。
- 检查配置的 storage 部分并增加
queue_depth
。请注意,更深的队列可能意味着更长的查询响应等待时间。相应地调整max_workers
,该参数配置查询后端块的并行 worker 数量。
storage:
trace:
pool:
max_workers: 100 # worker pool determines the number of parallel requests to the object store backend
queue_depth: 10000