[{"data":1,"prerenderedAt":340},["ShallowReactive",2],{"blog-post-blog_en-opentelemetry-kubernetes-semantic-conventions-release-candidate":3},{"id":4,"title":5,"body":6,"cover":324,"date":325,"description":326,"draft":327,"extension":328,"meta":329,"navigation":330,"path":331,"seo":332,"stem":333,"tags":334,"__hash__":339},"blog_en\u002Fen\u002Fblog\u002Fopentelemetry-kubernetes-semantic-conventions-release-candidate.md","OpenTelemetry: Kubernetes Semantics on the Path to Stability",{"type":7,"value":8,"toc":319},"minimark",[9,22,27,30,73,80,84,87,116,119,298,302,315],[10,11,12,13,17,18,21],"p",{},"In many observability stacks, multiple naming schemes exist for the same Kubernetes entities. In March 2026, Kubernetes-related semantic conventions progressed toward a ",[14,15,16],"strong",{},"release candidate"," to consistently represent ",[14,19,20],{},"resource attributes"," such as cluster, namespace, and pod identity.",[23,24,26],"h2",{"id":25},"what-the-semconv-update-covers","What the SemConv Update Covers",[10,28,29],{},"The consolidation focuses on exposing core Kubernetes context in a standardized way:",[31,32,33,40,51,66],"ul",{},[34,35,36,39],"li",{},[14,37,38],{},"Cluster identity"," as resource context (for example name or ID)",[34,41,42,45,46,50],{},[14,43,44],{},"Namespace, pod, and node attributes"," under the ",[47,48,49],"code",{},"k8s.*"," namespace",[34,52,53,54,57,58,61,62,65],{},"Clear separation between ",[14,55,56],{},"stable",", ",[14,59,60],{},"experimental",", and ",[14,63,64],{},"deprecated"," attributes",[34,67,68,69,72],{},"Guidance on ",[14,70,71],{},"cardinality"," (for example, labels\u002Fannotations as selective, filtered signals)",[10,74,75],{},[76,77],"img",{"alt":78,"src":79},"Diagram: k8s.* attributes connect signals","\u002Fimg\u002Fblog\u002Fopentelemetry-kubernetes-semantic-conventions-release-candidate-diagram.svg",[23,81,83],{"id":82},"migrating-collector-and-instrumentation","Migrating Collector and Instrumentation",[10,85,86],{},"In practice, migration often happens in the collector so applications contain less project-specific mapping logic:",[31,88,89,95,109],{},[34,90,91,94],{},[14,92,93],{},"Resource detection"," for cluster and node context",[34,96,97,98,101,102,57,105,108],{},"The ",[47,99,100],{},"k8sattributes"," processor to enrich ",[47,103,104],{},"k8s.namespace.name",[47,106,107],{},"k8s.pod.name",", and related fields",[34,110,111,112,115],{},"Explicit filters to limit ",[14,113,114],{},"high-cardinality"," label\u002Fannotation extraction",[10,117,118],{},"Example configuration for an OpenTelemetry Collector:",[120,121,126],"pre",{"className":122,"code":123,"language":124,"meta":125,"style":125},"language-yaml shiki shiki-themes github-light github-dark","processors:\n  k8sattributes:\n    auth_type: serviceAccount\n    extract:\n      metadata:\n        - k8s.namespace.name\n        - k8s.pod.name\n        - k8s.node.name\n  resource:\n    attributes:\n      - key: k8s.cluster.name\n        value: \"production-eu-1\"\n        action: upsert\nservice:\n  pipelines:\n    traces:\n      processors: [k8sattributes, resource]\n","yaml","",[47,127,128,141,149,162,170,178,187,195,203,211,219,233,244,255,263,271,279],{"__ignoreMap":125},[129,130,133,137],"span",{"class":131,"line":132},"line",1,[129,134,136],{"class":135},"s9eBZ","processors",[129,138,140],{"class":139},"sVt8B",":\n",[129,142,144,147],{"class":131,"line":143},2,[129,145,146],{"class":135},"  k8sattributes",[129,148,140],{"class":139},[129,150,152,155,158],{"class":131,"line":151},3,[129,153,154],{"class":135},"    auth_type",[129,156,157],{"class":139},": ",[129,159,161],{"class":160},"sZZnC","serviceAccount\n",[129,163,165,168],{"class":131,"line":164},4,[129,166,167],{"class":135},"    extract",[129,169,140],{"class":139},[129,171,173,176],{"class":131,"line":172},5,[129,174,175],{"class":135},"      metadata",[129,177,140],{"class":139},[129,179,181,184],{"class":131,"line":180},6,[129,182,183],{"class":139},"        - ",[129,185,186],{"class":160},"k8s.namespace.name\n",[129,188,190,192],{"class":131,"line":189},7,[129,191,183],{"class":139},[129,193,194],{"class":160},"k8s.pod.name\n",[129,196,198,200],{"class":131,"line":197},8,[129,199,183],{"class":139},[129,201,202],{"class":160},"k8s.node.name\n",[129,204,206,209],{"class":131,"line":205},9,[129,207,208],{"class":135},"  resource",[129,210,140],{"class":139},[129,212,214,217],{"class":131,"line":213},10,[129,215,216],{"class":135},"    attributes",[129,218,140],{"class":139},[129,220,222,225,228,230],{"class":131,"line":221},11,[129,223,224],{"class":139},"      - ",[129,226,227],{"class":135},"key",[129,229,157],{"class":139},[129,231,232],{"class":160},"k8s.cluster.name\n",[129,234,236,239,241],{"class":131,"line":235},12,[129,237,238],{"class":135},"        value",[129,240,157],{"class":139},[129,242,243],{"class":160},"\"production-eu-1\"\n",[129,245,247,250,252],{"class":131,"line":246},13,[129,248,249],{"class":135},"        action",[129,251,157],{"class":139},[129,253,254],{"class":160},"upsert\n",[129,256,258,261],{"class":131,"line":257},14,[129,259,260],{"class":135},"service",[129,262,140],{"class":139},[129,264,266,269],{"class":131,"line":265},15,[129,267,268],{"class":135},"  pipelines",[129,270,140],{"class":139},[129,272,274,277],{"class":131,"line":273},16,[129,275,276],{"class":135},"    traces",[129,278,140],{"class":139},[129,280,282,285,288,290,292,295],{"class":131,"line":281},17,[129,283,284],{"class":135},"      processors",[129,286,287],{"class":139},": [",[129,289,100],{"class":160},[129,291,57],{"class":139},[129,293,294],{"class":160},"resource",[129,296,297],{"class":139},"]\n",[23,299,301],{"id":300},"why-this-matters","Why This Matters",[10,303,304,305,57,308,61,311,314],{},"Standard Kubernetes attributes reduce mapping overhead, make dashboards consistent, and enable reliable cross-links between ",[14,306,307],{},"metrics",[14,309,310],{},"logs",[14,312,313],{},"traces",". That consistency is a prerequisite for portable observability strategies across teams, clusters, and vendors.",[316,317,318],"style",{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":125,"searchDepth":143,"depth":143,"links":320},[321,322,323],{"id":25,"depth":143,"text":26},{"id":82,"depth":143,"text":83},{"id":300,"depth":143,"text":301},"\u002Fimg\u002Fblog\u002Fopentelemetry-kubernetes-semantic-conventions-release-candidate-cover.jpg","2026-04-05","OpenTelemetry consolidates Kubernetes resource attributes as a release candidate to standardize correlation across logs, metrics, and traces.",false,"md",{},true,"\u002Fen\u002Fblog\u002Fopentelemetry-kubernetes-semantic-conventions-release-candidate",{"title":5,"description":326},"en\u002Fblog\u002Fopentelemetry-kubernetes-semantic-conventions-release-candidate",[335,336,337,338],"OpenTelemetry","Kubernetes","Observability","Standards","d2zYn5bflunNbugVCvF1zpSVEYauGqmCKmhPFyGE1Aw",1775892933864]