使用 Kubernetes 注解指定资源属性
所有带有 resource.opentelemetry.io/ 前缀的注解都应转换为相应的资源属性。
例如,注解 resource.opentelemetry.io/service.name 应转换为 service.name 属性。
服务属性
以下 服务资源属性 推荐用于 Kubernetes 服务。
计算服务属性有多种方法。
- 众所周知的标签
- Pod 模板上的注解,具有本页面所述的
resource.opentelemetry.io/前缀。 - 上面定义的 Kubernetes 资源属性的一个函数
此转换通常可以通过 OpenTelemetry Collector 组件来完成,例如 Kubernetes Attribute Processor。
提供此功能的工具应提供一个选择加入标志,用于使用众所周知的标签,因为用户可能不知道他们的标签被用于此目的。
每个属性都有一个优先级顺序,描述如下。
如何计算 service.namespace
选择找到的第一个值
pod.annotation[resource.opentelemetry.io/service.namespace]k8s.namespace.name
如何计算 service.name
选择找到的第一个值
pod.annotation[resource.opentelemetry.io/service.name]pod.label[app.kubernetes.io/instance](众所周知的标签 app.kubernetes.io/instance)pod.label[app.kubernetes.io/name](众所周知的标签 app.kubernetes.io/name)k8s.deployment.namek8s.replicaset.namek8s.statefulset.namek8s.daemonset.namek8s.cronjob.namek8s.job.namek8s.pod.namek8s.container.name
其原理是沿 Kubernetes 资源层级结构从祖先追溯到后代,例如从 deployment 到 pod - 请参阅 Kubernetes 对象层级结构。
如何计算 service.version
选择找到的第一个值
pod.annotation[resource.opentelemetry.io/service.version]pod.label[app.kubernetes.io/version](众所周知的标签 app.kubernetes.io/version)- 使用下面描述的算法计算版本
- 使用 reference 库 中描述的算法计算标签和摘要
- 选择找到的第一个值
<tag>@<digest><digest><tag>
如何计算 service.instance.id
选择找到的第一个值
pod.annotation[resource.opentelemetry.io/service.instance.id]concat([k8s.namespace.name, k8s.pod.name, k8s.container.name], '.')
请注意,容器重启计数不包含在 service.instance.id 的计算中,因为当 ID 在每次重启时都发生变化(例如在崩溃循环中)时,这会使故障排除更加困难。