Add k8s container resource related metrics (#2178)

Signed-off-by: ChrsMark <chrismarkou92@gmail.com>
This commit is contained in:
Christos Markou 2025-05-29 16:56:11 +03:00 committed by GitHub
parent 778afe4ec8
commit a05b3ec82d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 325 additions and 0 deletions

View File

@ -0,0 +1,22 @@
# Use this changelog template to create an entry for release notes.
#
# If your change doesn't affect end users you should instead start
# your pull request title with [chore] or use the "Skip Changelog" label.
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
change_type: enhancement
# The name of the area of concern in the attributes-registry, (e.g. http, cloud, db)
component: k8s
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
note: Add K8s container resource related metrics
# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
# The values here must be integers.
issues: [2074]
# (Optional) One or more lines of additional information to render under the primary note.
# These lines will be padded with 2 spaces and then inserted directly into the document.
# Use pipe (|) for multiline entries.
subtext:

View File

@ -57,6 +57,7 @@ and one for disabling the old schema called `semconv.k8s.disableLegacy`. Then:
- [K8s Namespace metrics](#k8s-namespace-metrics)
- [K8s ResourceQuota resource](#k8s-resourcequota-resource)
- [K8s ReplicationController resource](#k8s-replicationcontroller-resource)
- [K8s Container metrics](#k8s-container-metrics)
<!-- tocstop -->
@ -282,4 +283,27 @@ The changes are the following:
|---------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------|
| `k8s.replication_controller.{name,uid}` | `k8s.replicationcontroller.{name,uid}` |
### K8s Container metrics
The K8s Container metrics implemented by the Collector and specifically the
[k8scluster](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/v0.115.0/receiver/k8sclusterreceiver/documentation.md)
receiver were introduced as semantic conventions in
[#2178](https://github.com/open-telemetry/semantic-conventions/pull/2178) (TODO: replace with SemConv version once
available).
The changes in their metrics are the following:
<!-- prettier-ignore-start -->
| Old (Collector) ![changed](https://img.shields.io/badge/changed-orange?style=flat) | New |
|------------------------------------------------------------------------------------|-------------------------------------------|
| `k8s.container.cpu_limit` | `k8s.container.cpu.limit` |
| `k8s.container.cpu_request` | `k8s.container.cpu.request` |
| `k8s.container.memory_limit` | `k8s.container.memory.limit` |
| `k8s.container.memory_request` | `k8s.container.memory.request` |
| `k8s.container.storage_limit` | `k8s.container.storage.limit` |
| `k8s.container.storage_request` | `k8s.container.storage.request` |
| `k8s.container.ephemeralstorage_limit` | `k8s.container.ephemeral_storage.limit` |
| `k8s.container.ephemeralstorage_request` | `k8s.container.ephemeral_storage.request` |
<!-- prettier-ignore-end -->

View File

@ -65,6 +65,15 @@ and therefore inherit its attributes, like `k8s.pod.name` and `k8s.pod.uid`.
- [Metric: `k8s.cronjob.active_jobs`](#metric-k8scronjobactive_jobs)
- [Namespace metrics](#namespace-metrics)
- [Metric: `k8s.namespace.phase`](#metric-k8snamespacephase)
- [K8s Container metrics](#k8s-container-metrics)
- [Metric: `k8s.container.cpu.limit`](#metric-k8scontainercpulimit)
- [Metric: `k8s.container.cpu.request`](#metric-k8scontainercpurequest)
- [Metric: `k8s.container.memory.limit`](#metric-k8scontainermemorylimit)
- [Metric: `k8s.container.memory.request`](#metric-k8scontainermemoryrequest)
- [Metric: `k8s.container.storage.limit`](#metric-k8scontainerstoragelimit)
- [Metric: `k8s.container.storage.request`](#metric-k8scontainerstoragerequest)
- [Metric: `k8s.container.ephemeral_storage.limit`](#metric-k8scontainerephemeral_storagelimit)
- [Metric: `k8s.container.ephemeral_storage.request`](#metric-k8scontainerephemeral_storagerequest)
<!-- tocstop -->
@ -1089,5 +1098,185 @@ This metric is [recommended][MetricRecommended].
<!-- END AUTOGENERATED TEXT -->
<!-- endsemconv -->
## K8s Container metrics
**Description:** K8s Container level metrics captured under the namespace `k8s.container`.
### Metric: `k8s.container.cpu.limit`
This metric is [recommended][MetricRecommended].
<!-- semconv metric.k8s.container.cpu.limit -->
<!-- NOTE: THIS TEXT IS AUTOGENERATED. DO NOT EDIT BY HAND. -->
<!-- see templates/registry/markdown/snippet.md.j2 -->
<!-- prettier-ignore-start -->
<!-- markdownlint-capture -->
<!-- markdownlint-disable -->
| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations |
| -------- | --------------- | ----------- | -------------- | --------- | ------ |
| `k8s.container.cpu.limit` | Gauge | `{cpu}` | Maximum CPU resource limit set for the container [1] | ![Development](https://img.shields.io/badge/-development-blue) | `k8s.container` |
**[1]:** See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- END AUTOGENERATED TEXT -->
<!-- endsemconv -->
### Metric: `k8s.container.cpu.request`
This metric is [recommended][MetricRecommended].
<!-- semconv metric.k8s.container.cpu.request -->
<!-- NOTE: THIS TEXT IS AUTOGENERATED. DO NOT EDIT BY HAND. -->
<!-- see templates/registry/markdown/snippet.md.j2 -->
<!-- prettier-ignore-start -->
<!-- markdownlint-capture -->
<!-- markdownlint-disable -->
| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations |
| -------- | --------------- | ----------- | -------------- | --------- | ------ |
| `k8s.container.cpu.request` | Gauge | `{cpu}` | CPU resource requested for the container [1] | ![Development](https://img.shields.io/badge/-development-blue) | `k8s.container` |
**[1]:** See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- END AUTOGENERATED TEXT -->
<!-- endsemconv -->
### Metric: `k8s.container.memory.limit`
This metric is [recommended][MetricRecommended].
<!-- semconv metric.k8s.container.memory.limit -->
<!-- NOTE: THIS TEXT IS AUTOGENERATED. DO NOT EDIT BY HAND. -->
<!-- see templates/registry/markdown/snippet.md.j2 -->
<!-- prettier-ignore-start -->
<!-- markdownlint-capture -->
<!-- markdownlint-disable -->
| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations |
| -------- | --------------- | ----------- | -------------- | --------- | ------ |
| `k8s.container.memory.limit` | Gauge | `By` | Maximum memory resource limit set for the container [1] | ![Development](https://img.shields.io/badge/-development-blue) | `k8s.container` |
**[1]:** See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- END AUTOGENERATED TEXT -->
<!-- endsemconv -->
### Metric: `k8s.container.memory.request`
This metric is [recommended][MetricRecommended].
<!-- semconv metric.k8s.container.memory.request -->
<!-- NOTE: THIS TEXT IS AUTOGENERATED. DO NOT EDIT BY HAND. -->
<!-- see templates/registry/markdown/snippet.md.j2 -->
<!-- prettier-ignore-start -->
<!-- markdownlint-capture -->
<!-- markdownlint-disable -->
| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations |
| -------- | --------------- | ----------- | -------------- | --------- | ------ |
| `k8s.container.memory.request` | Gauge | `By` | Memory resource requested for the container [1] | ![Development](https://img.shields.io/badge/-development-blue) | `k8s.container` |
**[1]:** See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- END AUTOGENERATED TEXT -->
<!-- endsemconv -->
### Metric: `k8s.container.storage.limit`
This metric is [recommended][MetricRecommended].
<!-- semconv metric.k8s.container.storage.limit -->
<!-- NOTE: THIS TEXT IS AUTOGENERATED. DO NOT EDIT BY HAND. -->
<!-- see templates/registry/markdown/snippet.md.j2 -->
<!-- prettier-ignore-start -->
<!-- markdownlint-capture -->
<!-- markdownlint-disable -->
| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations |
| -------- | --------------- | ----------- | -------------- | --------- | ------ |
| `k8s.container.storage.limit` | Gauge | `By` | Maximum storage resource limit set for the container [1] | ![Development](https://img.shields.io/badge/-development-blue) | `k8s.container` |
**[1]:** See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- END AUTOGENERATED TEXT -->
<!-- endsemconv -->
### Metric: `k8s.container.storage.request`
This metric is [recommended][MetricRecommended].
<!-- semconv metric.k8s.container.storage.request -->
<!-- NOTE: THIS TEXT IS AUTOGENERATED. DO NOT EDIT BY HAND. -->
<!-- see templates/registry/markdown/snippet.md.j2 -->
<!-- prettier-ignore-start -->
<!-- markdownlint-capture -->
<!-- markdownlint-disable -->
| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations |
| -------- | --------------- | ----------- | -------------- | --------- | ------ |
| `k8s.container.storage.request` | Gauge | `By` | Storage resource requested for the container [1] | ![Development](https://img.shields.io/badge/-development-blue) | `k8s.container` |
**[1]:** See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- END AUTOGENERATED TEXT -->
<!-- endsemconv -->
### Metric: `k8s.container.ephemeral_storage.limit`
This metric is [recommended][MetricRecommended].
<!-- semconv metric.k8s.container.ephemeral_storage.limit -->
<!-- NOTE: THIS TEXT IS AUTOGENERATED. DO NOT EDIT BY HAND. -->
<!-- see templates/registry/markdown/snippet.md.j2 -->
<!-- prettier-ignore-start -->
<!-- markdownlint-capture -->
<!-- markdownlint-disable -->
| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations |
| -------- | --------------- | ----------- | -------------- | --------- | ------ |
| `k8s.container.ephemeral_storage.limit` | Gauge | `By` | Maximum ephemeral storage resource limit set for the container [1] | ![Development](https://img.shields.io/badge/-development-blue) | `k8s.container` |
**[1]:** See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- END AUTOGENERATED TEXT -->
<!-- endsemconv -->
### Metric: `k8s.container.ephemeral_storage.request`
This metric is [recommended][MetricRecommended].
<!-- semconv metric.k8s.container.ephemeral_storage.request -->
<!-- NOTE: THIS TEXT IS AUTOGENERATED. DO NOT EDIT BY HAND. -->
<!-- see templates/registry/markdown/snippet.md.j2 -->
<!-- prettier-ignore-start -->
<!-- markdownlint-capture -->
<!-- markdownlint-disable -->
| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations |
| -------- | --------------- | ----------- | -------------- | --------- | ------ |
| `k8s.container.ephemeral_storage.request` | Gauge | `By` | Ephemeral storage resource requested for the container [1] | ![Development](https://img.shields.io/badge/-development-blue) | `k8s.container` |
**[1]:** See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- END AUTOGENERATED TEXT -->
<!-- endsemconv -->
[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status
[MetricRecommended]: /docs/general/metric-requirement-level.md#recommended

View File

@ -469,3 +469,93 @@ groups:
attributes:
- ref: k8s.namespace.phase
requirement_level: required
# k8s.container.* metrics
- id: metric.k8s.container.cpu.limit
type: metric
metric_name: k8s.container.cpu.limit
stability: development
brief: "Maximum CPU resource limit set for the container"
entity_associations:
- k8s.container
note: |
See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.
instrument: gauge
unit: "{cpu}"
- id: metric.k8s.container.cpu.request
type: metric
metric_name: k8s.container.cpu.request
stability: development
brief: "CPU resource requested for the container"
entity_associations:
- k8s.container
note: |
See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.
instrument: gauge
unit: "{cpu}"
- id: metric.k8s.container.memory.limit
type: metric
metric_name: k8s.container.memory.limit
stability: development
brief: "Maximum memory resource limit set for the container"
entity_associations:
- k8s.container
note: |
See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.
instrument: gauge
unit: "By"
- id: metric.k8s.container.memory.request
type: metric
metric_name: k8s.container.memory.request
stability: development
brief: "Memory resource requested for the container"
entity_associations:
- k8s.container
note: |
See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.
instrument: gauge
unit: "By"
- id: metric.k8s.container.storage.limit
type: metric
metric_name: k8s.container.storage.limit
stability: development
brief: "Maximum storage resource limit set for the container"
entity_associations:
- k8s.container
note: |
See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.
instrument: gauge
unit: "By"
- id: metric.k8s.container.storage.request
type: metric
metric_name: k8s.container.storage.request
stability: development
brief: "Storage resource requested for the container"
entity_associations:
- k8s.container
note: |
See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.
instrument: gauge
unit: "By"
- id: metric.k8s.container.ephemeral_storage.limit
type: metric
metric_name: k8s.container.ephemeral_storage.limit
stability: development
brief: "Maximum ephemeral storage resource limit set for the container"
entity_associations:
- k8s.container
note: |
See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.
instrument: gauge
unit: "By"
- id: metric.k8s.container.ephemeral_storage.request
type: metric
metric_name: k8s.container.ephemeral_storage.request
stability: development
brief: "Ephemeral storage resource requested for the container"
entity_associations:
- k8s.container
note: |
See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.
instrument: gauge
unit: "By"