diff --git a/.chloggen/container-informativeRuntime.yaml b/.chloggen/container-informativeRuntime.yaml
new file mode 100644
index 000000000..1fe0c55ef
--- /dev/null
+++ b/.chloggen/container-informativeRuntime.yaml
@@ -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: breaking
+
+# The name of the area of concern in the attributes-registry, (e.g. http, cloud, db)
+component: container
+
+# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
+note: The container runtime can now also have the version and description provided
+
+# 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: [2342]
+
+# (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:
diff --git a/docs/non-normative/k8s-migration.md b/docs/non-normative/k8s-migration.md
index c3f370786..e62749ffb 100644
--- a/docs/non-normative/k8s-migration.md
+++ b/docs/non-normative/k8s-migration.md
@@ -63,6 +63,7 @@ and one for disabling the old schema called `semconv.k8s.disableLegacy`. Then:
- [K8s Node condition metrics](#k8s-node-condition-metrics)
- [K8s Filesystem metrics](#k8s-filesystem-metrics)
- [K8s Pod Volume metrics](#k8s-pod-volume-metrics)
+ - [Container Runtime](#container-runtime)
@@ -417,4 +418,19 @@ The changes in these metrics are the following:
| `k8s.volume.inodes.free` | `k8s.pod.volume.inode.free` |
| `k8s.volume.inodes.used` | `k8s.pod.volume.inode.used` |
+
+
+### Container Runtime
+
+The container runtime has become more descriptive with changes introduced to semantic conventions
+within v1.Y.Z .
+
+The changes in their attributes are the following:
+
+
+| Old Attribute  | New Attribute |
+|------------------------------------------------------------------------------------|--------------------------|
+| `container.runtime` | `container.runtime.name` |
+
+
diff --git a/docs/registry/attributes/container.md b/docs/registry/attributes/container.md
index 6db90ba99..e9a134672 100644
--- a/docs/registry/attributes/container.md
+++ b/docs/registry/attributes/container.md
@@ -24,7 +24,9 @@ A container instance.
| `container.image.tags` | string[] | Container image tags. An example can be found in [Docker Image Inspect](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect). Should be only the `` section of the full name for example from `registry.example.com/my-org/my-image:`. | `["v1.27.1", "3.5.7-0"]` |  |
| `container.label.` | string | Container labels, `` being the label name, the value being the label value. [6] | `nginx` |  |
| `container.name` | string | Container name used by container runtime. | `opentelemetry-autoconf` |  |
-| `container.runtime` | string | The container runtime managing this container. | `docker`; `containerd`; `rkt` |  |
+| `container.runtime.description` | string | A description about the runtime which could include, for example details about the CRI/API version being used or other customisations. | `docker://19.3.1 - CRI: 1.22.0` |  |
+| `container.runtime.name` | string | The container runtime managing this container. | `docker`; `containerd`; `rkt` |  |
+| `container.runtime.version` | string | The version of the runtime of this process, as returned by the runtime without modification. | `1.0.0` |  |
**[1] `container.command`:** If using embedded credentials or sensitive data, it is recommended to remove them to prevent potential leakage.
@@ -48,6 +50,7 @@ Describes deprecated container attributes.
|---|---|---|---|---|
| `container.cpu.state` | string | Deprecated, use `cpu.mode` instead. | `user`; `kernel` | 
Replaced by `cpu.mode`. |
| `container.labels.` | string | Deprecated, use `container.label` instead. | `nginx` | 
Replaced by `container.label`. |
+| `container.runtime` | string | The container runtime managing this container. | `docker`; `containerd`; `rkt` | 
Replaced by `container.runtime.name`. |
---
diff --git a/docs/registry/entities/README.md b/docs/registry/entities/README.md
index 263e3c850..2829bc1d6 100644
--- a/docs/registry/entities/README.md
+++ b/docs/registry/entities/README.md
@@ -43,6 +43,8 @@ Currently, the following namespaces exist:
| | [cloudfoundry.system](cloudfoundry.md#cloudfoundry-system) |  |
| Container | | |
| | [container](container.md#container) |  |
+| | [container.image](container.md#container-image) |  |
+| | [container.runtime](container.md#container-runtime) |  |
| Deployment | | |
| | [deployment](deployment.md#deployment) |  |
| Device | | |
diff --git a/docs/registry/entities/container.md b/docs/registry/entities/container.md
index 10782e3d4..b6515d7c0 100644
--- a/docs/registry/entities/container.md
+++ b/docs/registry/entities/container.md
@@ -21,30 +21,66 @@
| Attribute | Type | Description | Examples | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Stability |
|---|---|---|---|---|---|
| [`container.id`](/docs/registry/attributes/container.md) | string | Container ID. Usually a UUID, as for example used to [identify Docker containers](https://docs.docker.com/engine/containers/run/#container-identification). The UUID might be abbreviated. | `a3bf90e006b2` | `Recommended` |  |
-| [`container.image.id`](/docs/registry/attributes/container.md) | string | Runtime specific image identifier. Usually a hash algorithm followed by a UUID. [1] | `sha256:19c92d0a00d1b66d897bceaa7319bee0dd38a10a851c60bcec9474aa3f01e50f` | `Recommended` |  |
-| [`container.image.name`](/docs/registry/attributes/container.md) | string | Name of the image the container was built on. | `gcr.io/opentelemetry/operator` | `Recommended` |  |
-| [`container.image.repo_digests`](/docs/registry/attributes/container.md) | string[] | Repo digests of the container image as provided by the container runtime. [2] | `["example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578"]` | `Recommended` |  |
-| [`container.image.tags`](/docs/registry/attributes/container.md) | string[] | Container image tags. An example can be found in [Docker Image Inspect](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect). Should be only the `` section of the full name for example from `registry.example.com/my-org/my-image:`. | `["v1.27.1", "3.5.7-0"]` | `Recommended` |  |
-| [`container.label.`](/docs/registry/attributes/container.md) | string | Container labels, `` being the label name, the value being the label value. [3] | `nginx` | `Recommended` |  |
+| [`container.label.`](/docs/registry/attributes/container.md) | string | Container labels, `` being the label name, the value being the label value. [1] | `nginx` | `Recommended` |  |
| [`container.name`](/docs/registry/attributes/container.md) | string | Container name used by container runtime. | `opentelemetry-autoconf` | `Recommended` |  |
-| [`container.runtime`](/docs/registry/attributes/container.md) | string | The container runtime managing this container. | `docker`; `containerd`; `rkt` | `Recommended` |  |
-| [`oci.manifest.digest`](/docs/registry/attributes/oci.md) | string | The digest of the OCI image manifest. For container images specifically is the digest by which the container image is known. [4] | `sha256:e4ca62c0d62f3e886e684806dfe9d4e0cda60d54986898173c1083856cfda0f4` | `Recommended` |  |
-| [`container.command`](/docs/registry/attributes/container.md) | string | The command used to run the container (i.e. the command name). [5] | `otelcontribcol` | `Opt-In` |  |
+| [`oci.manifest.digest`](/docs/registry/attributes/oci.md) | string | The digest of the OCI image manifest. For container images specifically is the digest by which the container image is known. [2] | `sha256:e4ca62c0d62f3e886e684806dfe9d4e0cda60d54986898173c1083856cfda0f4` | `Recommended` |  |
+| [`container.command`](/docs/registry/attributes/container.md) | string | The command used to run the container (i.e. the command name). [3] | `otelcontribcol` | `Opt-In` |  |
| [`container.command_args`](/docs/registry/attributes/container.md) | string[] | All the command arguments (including the command/executable itself) run by the container. | `["otelcontribcol", "--config", "config.yaml"]` | `Opt-In` |  |
| [`container.command_line`](/docs/registry/attributes/container.md) | string | The full command run by the container as a single string representing the full command. | `otelcontribcol --config config.yaml` | `Opt-In` |  |
-**[1] `container.image.id`:** Docker defines a sha256 of the image id; `container.image.id` corresponds to the `Image` field from the Docker container inspect [API](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerInspect) endpoint.
+**[1] `container.label.`:** For example, a docker container label `app` with value `nginx` SHOULD be recorded as the `container.label.app` attribute with value `"nginx"`.
+
+**[2] `oci.manifest.digest`:** Follows [OCI Image Manifest Specification](https://github.com/opencontainers/image-spec/blob/main/manifest.md), and specifically the [Digest property](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests).
+An example can be found in [Example Image Manifest](https://github.com/opencontainers/image-spec/blob/main/manifest.md#example-image-manifest).
+
+**[3] `container.command`:** If using embedded credentials or sensitive data, it is recommended to remove them to prevent potential leakage.
+
+## Container Image
+
+**Status:** 
+
+**type:** `container.image`
+
+**Description:** The image used for the container.
+
+**Other Attributes:**
+
+> :warning: This entity definition contains attributes without a role.
+> Stable Entities MUST NOT have attributes without a defined role.
+
+| Attribute | Type | Description | Examples | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Stability |
+|---|---|---|---|---|---|
+| [`container.image.id`](/docs/registry/attributes/container.md) | string | Runtime specific image identifier. Usually a hash algorithm followed by a UUID. [4] | `sha256:19c92d0a00d1b66d897bceaa7319bee0dd38a10a851c60bcec9474aa3f01e50f` | `Recommended` |  |
+| [`container.image.name`](/docs/registry/attributes/container.md) | string | Name of the image the container was built on. | `gcr.io/opentelemetry/operator` | `Recommended` |  |
+| [`container.image.repo_digests`](/docs/registry/attributes/container.md) | string[] | Repo digests of the container image as provided by the container runtime. [5] | `["example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578"]` | `Recommended` |  |
+| [`container.image.tags`](/docs/registry/attributes/container.md) | string[] | Container image tags. An example can be found in [Docker Image Inspect](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect). Should be only the `` section of the full name for example from `registry.example.com/my-org/my-image:`. | `["v1.27.1", "3.5.7-0"]` | `Recommended` |  |
+
+**[4] `container.image.id`:** Docker defines a sha256 of the image id; `container.image.id` corresponds to the `Image` field from the Docker container inspect [API](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerInspect) endpoint.
K8s defines a link to the container registry repository with digest `"imageID": "registry.azurecr.io /namespace/service/dockerfile@sha256:bdeabd40c3a8a492eaf9e8e44d0ebbb84bac7ee25ac0cf8a7159d25f62555625"`.
The ID is assigned by the container runtime and can vary in different environments. Consider using `oci.manifest.digest` if it is important to identify the same image in different environments/runtimes.
-**[2] `container.image.repo_digests`:** [Docker](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect) and [CRI](https://github.com/kubernetes/cri-api/blob/c75ef5b473bbe2d0a4fc92f82235efd665ea8e9f/pkg/apis/runtime/v1/api.proto#L1237-L1238) report those under the `RepoDigests` field.
+**[5] `container.image.repo_digests`:** [Docker](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect) and [CRI](https://github.com/kubernetes/cri-api/blob/c75ef5b473bbe2d0a4fc92f82235efd665ea8e9f/pkg/apis/runtime/v1/api.proto#L1237-L1238) report those under the `RepoDigests` field.
-**[3] `container.label.`:** For example, a docker container label `app` with value `nginx` SHOULD be recorded as the `container.label.app` attribute with value `"nginx"`.
+## Container Runtime
-**[4] `oci.manifest.digest`:** Follows [OCI Image Manifest Specification](https://github.com/opencontainers/image-spec/blob/main/manifest.md), and specifically the [Digest property](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests).
-An example can be found in [Example Image Manifest](https://github.com/opencontainers/image-spec/blob/main/manifest.md#example-image-manifest).
+**Status:** 
-**[5] `container.command`:** If using embedded credentials or sensitive data, it is recommended to remove them to prevent potential leakage.
+**type:** `container.runtime`
+
+**Description:** The runtime being used to run the container
+
+**Identifying Attributes:**
+
+| Attribute | Type | Description | Examples | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Stability |
+|---|---|---|---|---|---|
+| [`container.runtime.name`](/docs/registry/attributes/container.md) | string | The container runtime managing this container. | `docker`; `containerd`; `rkt` | `Recommended` |  |
+| [`container.runtime.version`](/docs/registry/attributes/container.md) | string | The version of the runtime of this process, as returned by the runtime without modification. | `1.0.0` | `Recommended` |  |
+
+**Descriptive Attributes:**
+
+| Attribute | Type | Description | Examples | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Stability |
+|---|---|---|---|---|---|
+| [`container.runtime.description`](/docs/registry/attributes/container.md) | string | A description about the runtime which could include, for example details about the CRI/API version being used or other customisations. | `docker://19.3.1 - CRI: 1.22.0` | `Recommended` |  |
diff --git a/docs/resource/container.md b/docs/resource/container.md
index 8191ad49f..f623a3382 100644
--- a/docs/resource/container.md
+++ b/docs/resource/container.md
@@ -17,30 +17,19 @@
| Attribute | Type | Description | Examples | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Stability |
|---|---|---|---|---|---|
| [`container.id`](/docs/registry/attributes/container.md) | string | Container ID. Usually a UUID, as for example used to [identify Docker containers](https://docs.docker.com/engine/containers/run/#container-identification). The UUID might be abbreviated. | `a3bf90e006b2` | `Recommended` |  |
-| [`container.image.id`](/docs/registry/attributes/container.md) | string | Runtime specific image identifier. Usually a hash algorithm followed by a UUID. [1] | `sha256:19c92d0a00d1b66d897bceaa7319bee0dd38a10a851c60bcec9474aa3f01e50f` | `Recommended` |  |
-| [`container.image.name`](/docs/registry/attributes/container.md) | string | Name of the image the container was built on. | `gcr.io/opentelemetry/operator` | `Recommended` |  |
-| [`container.image.repo_digests`](/docs/registry/attributes/container.md) | string[] | Repo digests of the container image as provided by the container runtime. [2] | `["example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578"]` | `Recommended` |  |
-| [`container.image.tags`](/docs/registry/attributes/container.md) | string[] | Container image tags. An example can be found in [Docker Image Inspect](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect). Should be only the `` section of the full name for example from `registry.example.com/my-org/my-image:`. | `["v1.27.1", "3.5.7-0"]` | `Recommended` |  |
-| [`container.label.`](/docs/registry/attributes/container.md) | string | Container labels, `` being the label name, the value being the label value. [3] | `nginx` | `Recommended` |  |
+| [`container.label.`](/docs/registry/attributes/container.md) | string | Container labels, `` being the label name, the value being the label value. [1] | `nginx` | `Recommended` |  |
| [`container.name`](/docs/registry/attributes/container.md) | string | Container name used by container runtime. | `opentelemetry-autoconf` | `Recommended` |  |
-| [`container.runtime`](/docs/registry/attributes/container.md) | string | The container runtime managing this container. | `docker`; `containerd`; `rkt` | `Recommended` |  |
-| [`oci.manifest.digest`](/docs/registry/attributes/oci.md) | string | The digest of the OCI image manifest. For container images specifically is the digest by which the container image is known. [4] | `sha256:e4ca62c0d62f3e886e684806dfe9d4e0cda60d54986898173c1083856cfda0f4` | `Recommended` |  |
-| [`container.command`](/docs/registry/attributes/container.md) | string | The command used to run the container (i.e. the command name). [5] | `otelcontribcol` | `Opt-In` |  |
+| [`oci.manifest.digest`](/docs/registry/attributes/oci.md) | string | The digest of the OCI image manifest. For container images specifically is the digest by which the container image is known. [2] | `sha256:e4ca62c0d62f3e886e684806dfe9d4e0cda60d54986898173c1083856cfda0f4` | `Recommended` |  |
+| [`container.command`](/docs/registry/attributes/container.md) | string | The command used to run the container (i.e. the command name). [3] | `otelcontribcol` | `Opt-In` |  |
| [`container.command_args`](/docs/registry/attributes/container.md) | string[] | All the command arguments (including the command/executable itself) run by the container. | `["otelcontribcol", "--config", "config.yaml"]` | `Opt-In` |  |
| [`container.command_line`](/docs/registry/attributes/container.md) | string | The full command run by the container as a single string representing the full command. | `otelcontribcol --config config.yaml` | `Opt-In` |  |
-**[1] `container.image.id`:** Docker defines a sha256 of the image id; `container.image.id` corresponds to the `Image` field from the Docker container inspect [API](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerInspect) endpoint.
-K8s defines a link to the container registry repository with digest `"imageID": "registry.azurecr.io /namespace/service/dockerfile@sha256:bdeabd40c3a8a492eaf9e8e44d0ebbb84bac7ee25ac0cf8a7159d25f62555625"`.
-The ID is assigned by the container runtime and can vary in different environments. Consider using `oci.manifest.digest` if it is important to identify the same image in different environments/runtimes.
+**[1] `container.label.`:** For example, a docker container label `app` with value `nginx` SHOULD be recorded as the `container.label.app` attribute with value `"nginx"`.
-**[2] `container.image.repo_digests`:** [Docker](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect) and [CRI](https://github.com/kubernetes/cri-api/blob/c75ef5b473bbe2d0a4fc92f82235efd665ea8e9f/pkg/apis/runtime/v1/api.proto#L1237-L1238) report those under the `RepoDigests` field.
-
-**[3] `container.label.`:** For example, a docker container label `app` with value `nginx` SHOULD be recorded as the `container.label.app` attribute with value `"nginx"`.
-
-**[4] `oci.manifest.digest`:** Follows [OCI Image Manifest Specification](https://github.com/opencontainers/image-spec/blob/main/manifest.md), and specifically the [Digest property](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests).
+**[2] `oci.manifest.digest`:** Follows [OCI Image Manifest Specification](https://github.com/opencontainers/image-spec/blob/main/manifest.md), and specifically the [Digest property](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests).
An example can be found in [Example Image Manifest](https://github.com/opencontainers/image-spec/blob/main/manifest.md#example-image-manifest).
-**[5] `container.command`:** If using embedded credentials or sensitive data, it is recommended to remove them to prevent potential leakage.
+**[3] `container.command`:** If using embedded credentials or sensitive data, it is recommended to remove them to prevent potential leakage.
diff --git a/model/container/deprecated/registry-deprecated.yaml b/model/container/deprecated/registry-deprecated.yaml
index 4bf5f230f..69df73fa7 100644
--- a/model/container/deprecated/registry-deprecated.yaml
+++ b/model/container/deprecated/registry-deprecated.yaml
@@ -33,3 +33,12 @@ groups:
reason: renamed
renamed_to: cpu.mode
examples: [ "user", "kernel" ]
+ - id: container.runtime
+ type: string
+ stability: development
+ deprecated:
+ reason: renamed
+ renamed_to: container.runtime.name
+ brief: >
+ The container runtime managing this container.
+ examples: ['docker', 'containerd', 'rkt']
diff --git a/model/container/entities.yaml b/model/container/entities.yaml
index 23b124977..9c94934bb 100644
--- a/model/container/entities.yaml
+++ b/model/container/entities.yaml
@@ -8,11 +8,6 @@ groups:
attributes:
- ref: container.name
- ref: container.id
- - ref: container.runtime
- - ref: container.image.name
- - ref: container.image.tags
- - ref: container.image.id
- - ref: container.image.repo_digests
- ref: container.command
requirement_level: opt_in
- ref: container.command_line
@@ -21,3 +16,27 @@ groups:
requirement_level: opt_in
- ref: container.label
- ref: oci.manifest.digest
+ - id: entity.container.image
+ type: entity
+ stability: development
+ name: container.image
+ brief: >
+ The image used for the container.
+ attributes:
+ - ref: container.image.name
+ - ref: container.image.tags
+ - ref: container.image.id
+ - ref: container.image.repo_digests
+ - id: entity.container.runtime
+ type: entity
+ stability: development
+ name: container.runtime
+ brief: >
+ The runtime being used to run the container
+ attributes:
+ - ref: container.runtime.description
+ role: descriptive
+ - ref: container.runtime.name
+ role: identifying
+ - ref: container.runtime.version
+ role: identifying
diff --git a/model/container/registry.yaml b/model/container/registry.yaml
index a761fdd33..b28bc5814 100644
--- a/model/container/registry.yaml
+++ b/model/container/registry.yaml
@@ -19,12 +19,26 @@ groups:
[identify Docker containers](https://docs.docker.com/engine/containers/run/#container-identification).
The UUID might be abbreviated.
examples: ['a3bf90e006b2']
- - id: container.runtime
+ - id: container.runtime.name
type: string
stability: development
brief: >
The container runtime managing this container.
examples: ['docker', 'containerd', 'rkt']
+ - id: container.runtime.version
+ type: string
+ stability: development
+ brief: >
+ The version of the runtime of this process, as returned by the runtime
+ without modification.
+ examples: '1.0.0'
+ - id: container.runtime.description
+ type: string
+ stability: development
+ brief: >
+ A description about the runtime which could include, for example
+ details about the CRI/API version being used or other customisations.
+ examples: ['docker://19.3.1 - CRI: 1.22.0']
- id: container.image.name
type: string
stability: development