Kubernetes CPU 指标在 kubeletstats 接收器中:从 .cpu.utilization 过渡到 .cpu.usage
OpenTelemetry Collector 的 kubeletstats 接收器是收集 Kubernetes 节点、Pod 和容器指标的关键组件。为了提高指标的准确性并遵循 OpenTelemetry 语义约定,我们正在更新 CPU 指标的命名和发出方式。
这篇博文解释了此更改的动机、对用户的影响、为本次更改引入的功能门的作用以及迁移指南。
为什么要进行此更改?
从历史上看,kubeletstats 接收器发出的 CPU 指标带有 .cpu.utilization 标签,例如
这些指标实际上代表 核心的原始 CPU 使用率,源自 Kubernetes Kubelet 的 UsageNanoCores 字段,这是一个绝对的 CPU 使用率度量(单位为纳核)。
术语“利用率”通常指的是一个相对指标,通常表示为已用 CPU 相对于总 CPU 容量或限制的比例或百分比。使用 .cpu.utilization 来表示绝对使用率值违反了 语义约定,可能会使用户和期望利用率指标是相对指标的工具感到困惑。
有什么变化?
为解决此语义不匹配问题,我们引入了新的 .cpu.usage 指标,以准确表示原始 CPU 使用率值
与此同时,旧的 .cpu.utilization 指标已被 标记为弃用。
功能门:receiver.kubeletstats.enableCPUUsageMetrics
请注意,到目前为止 .cpu.utilization 指标默认是启用的。为了平稳过渡,引入了一个名为 receiver.kubeletstats.enableCPUUsageMetrics 的功能门。
- Alpha (v0.111.0): 该功能门已引入但默认禁用。用户需要显式启用它才能默认接收
.cpu.usage指标而不是.cpu.utilization。 - Beta (v0.125.0): 该功能门 已升级到 Beta 版并默认启用。在此状态下
- 默认会发出
.cpu.usage指标。 - 尝试启用.cpu.utilization指标将失败。 - 如果需要,用户可以显式禁用功能门来暂时恢复已弃用的
.cpu.utilization指标。
- 默认会发出
- 稳定版(即将推出):该功能门将在多个版本中保持 Beta 状态,以便社区有充足的时间进行适应。将其移至稳定版的计划和讨论已在 Issue #39650 中跟踪。
这对您意味着什么?
对现有用户的影响
- 如果您升级到v0.125.0 或更高版本,Collector 将默认发出
.cpu.usage指标。 - 任何依赖
.cpu.utilization指标的监控仪表板、警报规则或查询将中断或无法按预期运行。 - 已弃用的
.cpu.utilization指标计划最终移除,因此为了长期兼容性,更新是必要的。
建议操作
- 审计您的可观测性管道,查找对
.cpu.utilization指标的引用。 - 更新仪表板、警报和查询以使用新的
.cpu.usage指标。 - 测试新指标,在暂存环境中启用功能门(或依赖 v0.125.0+ 中的默认启用状态)。
- 规划您的迁移时间表,考虑到
.cpu.utilization将在未来的版本中被移除。 - 保持与 OpenTelemetry 社区的联系,通过 GitHub issues 和 PR 讨论。
为什么将功能门保持在 Beta 状态?
将功能门在 Beta 状态保持多个版本的决定是基于以下因素:
kubeletstatsCPU 指标对于许多生产可观测性管道的关键性质。- 为用户和供应商提供充足的时间来适应和更新其工具的必要性。
- 收集反馈并在更改永久化之前解决任何意外问题的机会。
这种方法最大限度地减少了中断,并有助于确保每个人都能顺利过渡。
有用的链接和参考
- Issue #27885 - kubeletstats CPU 指标的语义更新
- PR #35139 - 引入
.cpu.usage指标和功能门 (Alpha) - PR #39488 - 将功能门提升到 Beta 版并默认启用
- Issue #39650 - 将功能门移至稳定版的计划
- OpenTelemetry 指标语义约定
- Kubernetes Kubelet Stats API
最后的想法
从 kubeletstats 接收器中的 .cpu.utilization 过渡到 .cpu.usage 指标是确保 Kubernetes 指标符合语义最佳实践的重要一步。我们感谢社区在进行这些改进时所表现出的耐心和合作。
如果您有疑问、想分享反馈或需要迁移帮助,请加入我们的 CNCF Slack。
感谢您帮助我们构建更清晰、更可靠的 Kubernetes 可观测性!