RHEL节点K8s集群中otelcol-contrib Docker统计采集报错求助
问题分析与解决:OpenTelemetry Collector Agent采集Docker指标时出现"context canceled"报错
原因分析
- 请求超时触发上下文取消:当OpenTelemetry Collector的docker receiver请求Docker stats API获取
rancher/hyperkube(kubelet容器)的指标时,可能因为该容器资源占用高、Docker daemon响应慢,或者Collector的超时配置过短,导致请求上下文被主动取消。 - 核心容器的特殊状态:
rancher/hyperkube作为集群kubelet的运行载体,属于核心系统组件,可能存在内部资源锁定或优先级调度的情况,中断了stats采集请求。 - Receiver版本潜在bug:你使用的docker receiver版本是v0.86.0,这个版本可能存在上下文处理的已知问题,在特定场景下会触发这类报错。
解决/消除报错的方法
1. 调整Docker Receiver的超时配置
在opentelemetry-collector的配置文件里,给docker_stats receiver增加超时和采集间隔参数,延长请求等待时间,避免因响应慢被取消:
receivers: docker_stats: endpoint: "unix:///var/run/docker.sock" collection_interval: 30s # 延长采集间隔 timeout: 10s # 延长请求超时时间
2. 排除无需采集的核心容器
如果不需要采集kubelet容器的指标,可以直接在配置中过滤掉rancher/hyperkube容器:
receivers: docker_stats: endpoint: "unix:///var/run/docker.sock" exclude_containers: - "rancher/hyperkube:*" # 匹配所有tag的该容器
3. 升级OpenTelemetry Collector版本
检查OpenTelemetry Collector的最新版本,升级到v0.90及以上版本,后续版本大概率修复了docker receiver上下文处理的相关bug,减少这类报错的出现。
4. 排查Docker Daemon状态
在RHEL宿主机上查看Docker daemon的运行日志,确认是否存在响应缓慢或异常:
journalctl -u docker.service -f
如果发现daemon有资源瓶颈(比如CPU、内存占用过高),可以调整Docker的资源配置或宿主机资源。
5. 优化核心容器资源配置
检查rancher/hyperkube容器的资源限制,适当调高CPU和内存配额,确保容器有足够资源响应Docker stats请求:
# 查看当前容器资源限制 docker inspect 63e1c35364fe | grep -A 10 "Resources" # 通过Rancher或Kubernetes调整该容器的资源请求和限制
内容的提问来源于stack exchange,提问作者AlRal
相关产品推荐
相关产品推荐

