Area(s)
area:k8s
Propose new conventions
Description
I would like to propose a new set of semantic conventions to capture node-level system daemon metrics (e.g., kubelet, runtime, pods) exposed by the Kubelet Summary API via Summary.Node.SystemContainers.
Currently, these metrics represent cgroup-level resource trackers on the node but are different from standard application containers because they are not associated with any k8s Pod.
Following the discussion in opentelemetry-collector-contrib#46703, the consensus is to introduce a dedicated namespace (k8s.node.system_container.*) and a self-describing attribute (k8s.node.system_container.name) to cleanly separate these contexts.
Why current k8s.container.* namespace is not suitable
Using the existing k8s.container.* namespace for system containers is problematic because it:
- Violates Pod Assumptions: It mixes node-level daemon metrics with application container metrics under the same metric name.
- Breaks Downstream Queries: Users assume that
k8s.container.* metrics always belong to a pod and will have standard pod-level fields (e.g., k8s.pod.name, k8s.namespace.name), while system containers do not have these fields.
Therefore, creating a new k8s.node.system_container.* namespace with a specific k8s.node.system_container.name attribute ensures we cleanly separate application container metrics from node-level daemon metrics.
Proposed Attribute
| Key |
Stability |
Requirement Level |
Value Type |
Description |
Example Values |
k8s.node.system_container.name |
Development |
Required |
string |
The name of the system container running on the K8s Node. |
kubelet; runtime; pods; misc |
Proposed Metrics
Description: System container level metrics captured under the namespace k8s.node.system_container.
Metric: k8s.node.system_container.cpu.usage
| Name |
Instrument Type |
Unit (UCUM) |
Description |
Stability |
Entity Associations |
k8s.node.system_container.cpu.usage |
Gauge |
{cpu} |
Node's system container CPU usage, measured in cpus. |
Development |
[k8s.node] |
Attributes:
k8s.node.system_container.name (Required)
Metric: k8s.node.system_container.cpu.time
| Name |
Instrument Type |
Unit (UCUM) |
Description |
Stability |
Entity Associations |
k8s.node.system_container.cpu.time |
Counter |
s |
Node's system container CPU time. |
Development |
[k8s.node] |
Attributes:
k8s.node.system_container.name (Required)
Metric: k8s.node.system_container.memory.working_set
| Name |
Instrument Type |
Unit (UCUM) |
Description |
Stability |
Entity Associations |
k8s.node.system_container.memory.working_set |
Gauge |
By |
The amount of working set memory. |
Development |
[k8s.node] |
Attributes:
k8s.node.system_container.name (Required)
Tip
React with 👍 to help prioritize this issue. Please use comments to provide useful context, avoiding +1 or me too, to help us triage it. Learn more here.
Area(s)
area:k8s
Propose new conventions
Description
I would like to propose a new set of semantic conventions to capture node-level system daemon metrics (e.g.,
kubelet,runtime,pods) exposed by the Kubelet Summary API viaSummary.Node.SystemContainers.Currently, these metrics represent cgroup-level resource trackers on the node but are different from standard application containers because they are not associated with any k8s Pod.
Following the discussion in opentelemetry-collector-contrib#46703, the consensus is to introduce a dedicated namespace (
k8s.node.system_container.*) and a self-describing attribute (k8s.node.system_container.name) to cleanly separate these contexts.Why current
k8s.container.*namespace is not suitableUsing the existing k8s.container.* namespace for system containers is problematic because it:
k8s.container.*metrics always belong to a pod and will have standard pod-level fields (e.g.,k8s.pod.name,k8s.namespace.name), while system containers do not have these fields.Therefore, creating a new
k8s.node.system_container.*namespace with a specifick8s.node.system_container.nameattribute ensures we cleanly separate application container metrics from node-level daemon metrics.Proposed Attribute
k8s.node.system_container.namestringkubelet;runtime;pods;miscProposed Metrics
Description: System container level metrics captured under the namespace
k8s.node.system_container.Metric:
k8s.node.system_container.cpu.usagek8s.node.system_container.cpu.usage{cpu}[k8s.node]Attributes:
k8s.node.system_container.name(Required)Metric:
k8s.node.system_container.cpu.timek8s.node.system_container.cpu.times[k8s.node]Attributes:
k8s.node.system_container.name(Required)Metric:
k8s.node.system_container.memory.working_setk8s.node.system_container.memory.working_setBy[k8s.node]Attributes:
k8s.node.system_container.name(Required)Tip
React with 👍 to help prioritize this issue. Please use comments to provide useful context, avoiding
+1orme too, to help us triage it. Learn more here.