semantic-conventions/docs/registry/attributes/k8s.md

23 KiB

K8s

Kubernetes Attributes

Kubernetes resource attributes.

Attribute Type Description Examples Stability
k8s.cluster.name string The name of the cluster. opentelemetry-cluster Development
k8s.cluster.uid string A pseudo-ID for the cluster, set to the UID of the kube-system namespace. [1] 218fc5a9-a5f1-4b54-aa05-46717d0ab26d Development
k8s.container.name string The name of the Container from Pod specification, must be unique within a Pod. Container runtime usually uses different globally unique name (container.name). redis Development
k8s.container.restart_count int Number of times the container was restarted. This attribute can be used to identify a particular container (running or stopped) within a container spec. Development
k8s.container.status.last_terminated_reason string Last terminated reason of the Container. Evicted; Error Development
k8s.container.status.reason string The reason for the container state. Corresponds to the reason field of the: K8s ContainerStateWaiting or K8s ContainerStateTerminated ContainerCreating; CrashLoopBackOff; CreateContainerConfigError; ErrImagePull; ImagePullBackOff; OOMKilled; Completed; Error; ContainerCannotRun Development
k8s.container.status.state string The state of the container. K8s ContainerState terminated; running; waiting Development
k8s.cronjob.annotation.<key> string The cronjob annotation placed on the CronJob, the <key> being the annotation name, the value being the annotation value. [2] 4; `` Development
k8s.cronjob.label.<key> string The label placed on the CronJob, the <key> being the label name, the value being the label value. [3] weekly; `` Development
k8s.cronjob.name string The name of the CronJob. opentelemetry Development
k8s.cronjob.uid string The UID of the CronJob. 275ecb36-5aa8-4c2a-9c47-d8bb681b9aff Development
k8s.daemonset.annotation.<key> string The annotation key-value pairs placed on the DaemonSet. [4] k8s.daemonset.annotation.replicas=1; k8s.daemonset.annotation.data= Development
k8s.daemonset.label.<key> string The label key-value pairs placed on the DaemonSet. [5] k8s.daemonset.label.app=guestbook; k8s.daemonset.label.injected= Development
k8s.daemonset.name string The name of the DaemonSet. opentelemetry Development
k8s.daemonset.uid string The UID of the DaemonSet. 275ecb36-5aa8-4c2a-9c47-d8bb681b9aff Development
k8s.deployment.annotation.<key> string The annotation key-value pairs placed on the Deployment. [6] k8s.deployment.annotation.replicas=1; k8s.deployment.annotation.data= Development
k8s.deployment.label.<key> string The label key-value pairs placed on the Deployment. [7] k8s.deployment.label.app=guestbook; k8s.deployment.label.injected= Development
k8s.deployment.name string The name of the Deployment. opentelemetry Development
k8s.deployment.uid string The UID of the Deployment. 275ecb36-5aa8-4c2a-9c47-d8bb681b9aff Development
k8s.hpa.name string The name of the horizontal pod autoscaler. opentelemetry Development
k8s.hpa.uid string The UID of the horizontal pod autoscaler. 275ecb36-5aa8-4c2a-9c47-d8bb681b9aff Development
k8s.job.annotation.<key> string The annotation key-value pairs placed on the Job. [8] k8s.job.annotation.number=1; k8s.job.annotation.data= Development
k8s.job.label.<key> string The label key-value pairs placed on the Job. [9] k8s.job.label.jobtype=ci; k8s.job.label.automated= Development
k8s.job.name string The name of the Job. opentelemetry Development
k8s.job.uid string The UID of the Job. 275ecb36-5aa8-4c2a-9c47-d8bb681b9aff Development
k8s.namespace.annotation.<key> string The annotation key-value pairs placed on the Namespace. [10] k8s.namespace.annotation.ttl=0; k8s.namespace.annotation.data= Development
k8s.namespace.label.<key> string The label key-value pairs placed on the Namespace. [11] k8s.namespace.label.kubernetes.io/metadata.name=default; k8s.namespace.label.data= Development
k8s.namespace.name string The name of the namespace that the pod is running in. default Development
k8s.namespace.phase string The phase of the K8s namespace. [12] active; terminating Development
k8s.node.annotation.<key> string The annotation placed on the Node, the <key> being the annotation name, the value being the annotation value, even if the value is empty. [13] 0; `` Development
k8s.node.label.<key> string The label placed on the Node, the <key> being the label name, the value being the label value, even if the value is empty. [14] arm64; `` Development
k8s.node.name string The name of the Node. node-1 Development
k8s.node.uid string The UID of the Node. 1eb3a0c6-0477-4080-a9cb-0cb7db65c6a2 Development
k8s.pod.annotation.<key> string The annotation placed on the Pod, the <key> being the annotation name, the value being the annotation value. [15] true; x64; `` Development
k8s.pod.label.<key> string The label placed on the Pod, the <key> being the label name, the value being the label value. [16] my-app; x64; `` Development
k8s.pod.name string The name of the Pod. opentelemetry-pod-autoconf Development
k8s.pod.uid string The UID of the Pod. 275ecb36-5aa8-4c2a-9c47-d8bb681b9aff Development
k8s.replicaset.annotation.<key> string The annotation key-value pairs placed on the ReplicaSet. [17] k8s.replicaset.annotation.replicas=0; k8s.replicaset.annotation.data= Development
k8s.replicaset.label.<key> string The label key-value pairs placed on the ReplicaSet. [18] k8s.replicaset.label.app=guestbook; k8s.replicaset.label.injected= Development
k8s.replicaset.name string The name of the ReplicaSet. opentelemetry Development
k8s.replicaset.uid string The UID of the ReplicaSet. 275ecb36-5aa8-4c2a-9c47-d8bb681b9aff Development
k8s.replicationcontroller.name string The name of the replication controller. opentelemetry Development
k8s.replicationcontroller.uid string The UID of the replication controller. 275ecb36-5aa8-4c2a-9c47-d8bb681b9aff Development
k8s.resourcequota.name string The name of the resource quota. opentelemetry Development
k8s.resourcequota.uid string The UID of the resource quota. 275ecb36-5aa8-4c2a-9c47-d8bb681b9aff Development
k8s.statefulset.annotation.<key> string The annotation key-value pairs placed on the StatefulSet. [19] k8s.statefulset.annotation.replicas=1; k8s.statefulset.annotation.data= Development
k8s.statefulset.label.<key> string The label key-value pairs placed on the StatefulSet. [20] k8s.statefulset.label.app=guestbook; k8s.statefulset.label.injected= Development
k8s.statefulset.name string The name of the StatefulSet. opentelemetry Development
k8s.statefulset.uid string The UID of the StatefulSet. 275ecb36-5aa8-4c2a-9c47-d8bb681b9aff Development
k8s.volume.name string The name of the K8s volume. volume0 Development
k8s.volume.type string The type of the K8s volume. emptyDir; persistentVolumeClaim Development

[1] k8s.cluster.uid: K8s doesn't have support for obtaining a cluster ID. If this is ever added, we will recommend collecting the k8s.cluster.uid through the official APIs. In the meantime, we are able to use the uid of the kube-system namespace as a proxy for cluster ID. Read on for the rationale.

Every object created in a K8s cluster is assigned a distinct UID. The kube-system namespace is used by Kubernetes itself and will exist for the lifetime of the cluster. Using the uid of the kube-system namespace is a reasonable proxy for the K8s ClusterID as it will only change if the cluster is rebuilt. Furthermore, Kubernetes UIDs are UUIDs as standardized by ISO/IEC 9834-8 and ITU-T X.667. Which states:

If generated according to one of the mechanisms defined in Rec. ITU-T X.667 | ISO/IEC 9834-8, a UUID is either guaranteed to be different from all other UUIDs generated before 3603 A.D., or is extremely likely to be different (depending on the mechanism chosen).

Therefore, UIDs between clusters should be extremely unlikely to conflict.

[2] k8s.cronjob.annotation.<key>: Examples:

  • An annotation retries with value 4 SHOULD be recorded as the k8s.cronjob.annotation.retries attribute with value "4".
  • An annotation data with empty string value SHOULD be recorded as the k8s.cronjob.annotation.data attribute with value "".

[3] k8s.cronjob.label.<key>: Examples:

  • A label type with value weekly SHOULD be recorded as the k8s.cronjob.label.type attribute with value "weekly".
  • A label automated with empty string value SHOULD be recorded as the k8s.cronjob.label.automated attribute with value "".

[4] k8s.daemonset.annotation.<key>: The <key> being the annotation name, the value being the annotation value, even if the value is empty.

[5] k8s.daemonset.label.<key>: The <key> being the label name, the value being the label value, even if the value is empty.

[6] k8s.deployment.annotation.<key>: The <key> being the annotation name, the value being the annotation value, even if the value is empty.

[7] k8s.deployment.label.<key>: The <key> being the label name, the value being the label value, even if the value is empty.

[8] k8s.job.annotation.<key>: The <key> being the annotation name, the value being the annotation value, even if the value is empty.

[9] k8s.job.label.<key>: The <key> being the label name, the value being the label value, even if the value is empty.

[10] k8s.namespace.annotation.<key>: The <key> being the annotation name, the value being the annotation value, even if the value is empty.

[11] k8s.namespace.label.<key>: The <key> being the label name, the value being the label value, even if the value is empty.

[12] k8s.namespace.phase: This attribute aligns with the phase field of the K8s NamespaceStatus

[13] k8s.node.annotation.<key>: Examples:

  • An annotation node.alpha.kubernetes.io/ttl with value 0 SHOULD be recorded as the k8s.node.annotation.node.alpha.kubernetes.io/ttl attribute with value "0".
  • An annotation data with empty string value SHOULD be recorded as the k8s.node.annotation.data attribute with value "".

[14] k8s.node.label.<key>: Examples:

  • A label kubernetes.io/arch with value arm64 SHOULD be recorded as the k8s.node.label.kubernetes.io/arch attribute with value "arm64".
  • A label data with empty string value SHOULD be recorded as the k8s.node.label.data attribute with value "".

[15] k8s.pod.annotation.<key>: Examples:

  • An annotation kubernetes.io/enforce-mountable-secrets with value true SHOULD be recorded as the k8s.pod.annotation.kubernetes.io/enforce-mountable-secrets attribute with value "true".
  • An annotation mycompany.io/arch with value x64 SHOULD be recorded as the k8s.pod.annotation.mycompany.io/arch attribute with value "x64".
  • An annotation data with empty string value SHOULD be recorded as the k8s.pod.annotation.data attribute with value "".

[16] k8s.pod.label.<key>: Examples:

  • A label app with value my-app SHOULD be recorded as the k8s.pod.label.app attribute with value "my-app".
  • A label mycompany.io/arch with value x64 SHOULD be recorded as the k8s.pod.label.mycompany.io/arch attribute with value "x64".
  • A label data with empty string value SHOULD be recorded as the k8s.pod.label.data attribute with value "".

[17] k8s.replicaset.annotation.<key>: The <key> being the annotation name, the value being the annotation value, even if the value is empty.

[18] k8s.replicaset.label.<key>: The <key> being the label name, the value being the label value, even if the value is empty.

[19] k8s.statefulset.annotation.<key>: The <key> being the annotation name, the value being the annotation value, even if the value is empty.

[20] k8s.statefulset.label.<key>: The <key> being the label name, the value being the label value, even if the value is empty.


k8s.container.status.reason has the following list of well-known values. If one of them applies, then the respective value MUST be used; otherwise, a custom value MAY be used.

Value Description Stability
Completed The container has completed execution. Development
ContainerCannotRun The container cannot run. Development
ContainerCreating The container is being created. Development
CrashLoopBackOff The container is in a crash loop back off state. Development
CreateContainerConfigError There was an error creating the container configuration. Development
ErrImagePull There was an error pulling the container image. Development
Error There was an error with the container. Development
ImagePullBackOff The container image pull is in back off state. Development
OOMKilled The container was killed due to out of memory. Development

k8s.container.status.state has the following list of well-known values. If one of them applies, then the respective value MUST be used; otherwise, a custom value MAY be used.

Value Description Stability
running The container is running. Development
terminated The container has terminated. Development
waiting The container is waiting. Development

k8s.namespace.phase has the following list of well-known values. If one of them applies, then the respective value MUST be used; otherwise, a custom value MAY be used.

Value Description Stability
active Active namespace phase as described by K8s API Development
terminating Terminating namespace phase as described by K8s API Development

k8s.volume.type has the following list of well-known values. If one of them applies, then the respective value MUST be used; otherwise, a custom value MAY be used.

Value Description Stability
configMap A configMap volume Development
downwardAPI A downwardAPI volume Development
emptyDir An emptyDir volume Development
local A local volume Development
persistentVolumeClaim A persistentVolumeClaim volume Development
secret A secret volume Development

Deprecated Kubernetes Attributes

Describes deprecated k8s attributes.

Attribute Type Description Examples Stability
k8s.pod.labels.<key> string Deprecated, use k8s.pod.label instead. my-app Deprecated
Replaced by k8s.pod.label.