Grafana Tempo Ingester Pod在max_block_duration后进入Back-off重启求助
问题排查与解决方案:Grafana Tempo Ingester Pod定时重启问题
一、排查方向
- 查看Ingester重启前的核心日志:执行
kubectl logs <ingester-pod-name> --previous,重点定位max_block_duration到期时段的日志,尤其关注上传块到Azure Blob时的报错(如超时、权限失效、连接中断)。 - 验证Azure Storage状态:
- 确认Ingester使用的服务账号持有
Storage Blob Data Contributor权限,且无临时权限过期情况。 - 查看Azure监控的Blob存储指标(写入延迟、吞吐量),排查块上传阶段是否出现性能瓶颈。
- 确认Ingester使用的服务账号持有
- 检查Pod资源限制:通过
kubectl describe pod <ingester-pod-name>查看重启原因,若为OOMKilled,说明内存资源不足,需调整CPU/内存的请求与限制值。 - 核对自动扩缩容配置:检查HPA的触发条件(CPU/内存阈值、自定义指标),确认是否因Pod状态未被正确识别(如重启时仍标记为Running)或最小副本数设置过低导致扩缩容失效;同时确认StatefulSet的
podManagementPolicy是否为Parallel,避免顺序启动拖慢扩缩容速度。 - 检查Tempo块生命周期配置:核对
flush_check_period、max_block_duration、block_retention的配合逻辑,排查是否存在块上传死锁或资源泄漏。
二、解决方案
- 解决块上传失败引发的重启:
- 若日志显示Blob上传超时,调整Ingester配置:降低
storage.azure.uploader.concurrent_uploads并发数,延长storage.azure.uploader.timeout超时时间。 - 若为权限问题,重新绑定Azure RBAC角色,确保服务账号持续拥有Blob容器的读写权限。
- 若日志显示Blob上传超时,调整Ingester配置:降低
- 解决资源不足引发的重启:
- 提升Ingester Pod的内存请求/限制(如从1Gi调整为2Gi),同时开启
memory_limiter组件限制追踪数据的内存占用,避免OOM。
- 提升Ingester Pod的内存请求/限制(如从1Gi调整为2Gi),同时开启
- 修复自动扩缩容失效问题:
- 配置基于
tempo_ingester_memory_usage_bytes的自定义指标作为HPA触发条件,或调整CPU阈值,确保Pod异常时能触发扩缩容。 - 将StatefulSet的
podManagementPolicy设置为Parallel,加快新Pod启动速度。
- 配置基于
- 优化块生命周期配置:
- 临时将
max_block_duration降至15分钟,验证是否还会重启,若恢复稳定,说明原时长下块过大导致上传压力或内存溢出。 - 开启
ingester.blocks_upload_concurrency限制同时上传的块数量,避免资源耗尽。
- 临时将
三、max_block_duration取值建议
- 常规场景:建议设置为15-30分钟,平衡块大小与上传频率,避免单个块过大引发内存占用过高或上传失败。
- 高流量场景:若追踪数据量较大,可降至10-15分钟,减小单个块体积,降低上传风险。
- 低流量场景:可提升至30-60分钟,减少Blob存储的小文件数量,但需确保Ingester内存能承载该时长内产生的追踪数据。
- 核心原则:单个块大小不超过Azure Blob单块上限(4000MiB),同时Ingester内存需覆盖
max_block_duration内的峰值流量数据量。
内容的提问来源于stack exchange,提问作者Vaibhav Shah
相关产品推荐
相关产品推荐

