From 26e3779ba8367c7f4c1d5c6e23000cdb51455d86 Mon Sep 17 00:00:00 2001 From: Yevhenii Solomchenko Date: Mon, 9 Sep 2024 11:48:16 +0200 Subject: [PATCH] Modify host.id lookup to be generated from YAML. (#1396) Co-authored-by: Joao Grassi <5938087+joaopgrassi@users.noreply.github.com> --- .chloggen/updete_host.id_lookup.yaml | 22 ++++++++++ docs/resource/host.md | 62 ++++++++++++++-------------- model/resource/host.yaml | 26 ++++++++++++ 3 files changed, 79 insertions(+), 31 deletions(-) create mode 100644 .chloggen/updete_host.id_lookup.yaml diff --git a/.chloggen/updete_host.id_lookup.yaml b/.chloggen/updete_host.id_lookup.yaml new file mode 100644 index 0000000000..133269633e --- /dev/null +++ b/.chloggen/updete_host.id_lookup.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: enhancement + +# The name of the area of concern in the attributes-registry, (e.g. http, cloud, db) +component: host + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: update lookup for os.build_id + +# 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: [1396] + +# (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/resource/host.md b/docs/resource/host.md index 77689d5ca1..ca4f3348c8 100644 --- a/docs/resource/host.md +++ b/docs/resource/host.md @@ -19,18 +19,44 @@ To report host metrics, the `system.*` namespace SHOULD be used. | Attribute | Type | Description | Examples | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Stability | |---|---|---|---|---|---| | [`host.arch`](/docs/attributes-registry/host.md) | string | The CPU architecture the host system is running on. | `amd64`; `arm32`; `arm64` | `Recommended` | ![Experimental](https://img.shields.io/badge/-experimental-blue) | -| [`host.id`](/docs/attributes-registry/host.md) | string | Unique host ID. For Cloud, this must be the instance_id assigned by the cloud provider. For non-containerized systems, this should be the `machine-id`. See the table below for the sources to use to determine the `machine-id` based on operating system. | `fdbf79e8af94cb7f9e8df36789187052` | `Recommended` | ![Experimental](https://img.shields.io/badge/-experimental-blue) | +| [`host.id`](/docs/attributes-registry/host.md) | string | Unique host ID. For Cloud, this must be the instance_id assigned by the cloud provider. For non-containerized systems, this should be the `machine-id`. See the table below for the sources to use to determine the `machine-id` based on operating system. [1] | `fdbf79e8af94cb7f9e8df36789187052` | `Recommended` | ![Experimental](https://img.shields.io/badge/-experimental-blue) | | [`host.image.id`](/docs/attributes-registry/host.md) | string | VM image ID or host OS image ID. For Cloud, this value is from the provider. | `ami-07b06b442921831e5` | `Recommended` | ![Experimental](https://img.shields.io/badge/-experimental-blue) | | [`host.image.name`](/docs/attributes-registry/host.md) | string | Name of the VM image or OS install the host was instantiated from. | `infra-ami-eks-worker-node-7d4ec78312`; `CentOS-8-x86_64-1905` | `Recommended` | ![Experimental](https://img.shields.io/badge/-experimental-blue) | | [`host.image.version`](/docs/attributes-registry/host.md) | string | The version string of the VM image or host OS as defined in [Version Attributes](/docs/resource/README.md#version-attributes). | `0.1` | `Recommended` | ![Experimental](https://img.shields.io/badge/-experimental-blue) | | [`host.name`](/docs/attributes-registry/host.md) | string | Name of the host. On Unix systems, it may contain what the hostname command returns, or the fully qualified hostname, or another name specified by the user. | `opentelemetry-test` | `Recommended` | ![Experimental](https://img.shields.io/badge/-experimental-blue) | | [`host.type`](/docs/attributes-registry/host.md) | string | Type of host. For Cloud, this must be the machine type. | `n1-standard-1` | `Recommended` | ![Experimental](https://img.shields.io/badge/-experimental-blue) | -| [`host.ip`](/docs/attributes-registry/host.md) | string[] | Available IP addresses of the host, excluding loopback interfaces. [1] | `["192.168.1.140", "fe80::abc2:4a28:737a:609e"]` | `Opt-In` | ![Experimental](https://img.shields.io/badge/-experimental-blue) | -| [`host.mac`](/docs/attributes-registry/host.md) | string[] | Available MAC addresses of the host, excluding loopback interfaces. [2] | `["AC-DE-48-23-45-67", "AC-DE-48-23-45-67-01-9F"]` | `Opt-In` | ![Experimental](https://img.shields.io/badge/-experimental-blue) | +| [`host.ip`](/docs/attributes-registry/host.md) | string[] | Available IP addresses of the host, excluding loopback interfaces. [2] | `["192.168.1.140", "fe80::abc2:4a28:737a:609e"]` | `Opt-In` | ![Experimental](https://img.shields.io/badge/-experimental-blue) | +| [`host.mac`](/docs/attributes-registry/host.md) | string[] | Available MAC addresses of the host, excluding loopback interfaces. [3] | `["AC-DE-48-23-45-67", "AC-DE-48-23-45-67-01-9F"]` | `Opt-In` | ![Experimental](https://img.shields.io/badge/-experimental-blue) | -**[1]:** IPv4 Addresses MUST be specified in dotted-quad notation. IPv6 addresses MUST be specified in the [RFC 5952](https://www.rfc-editor.org/rfc/rfc5952.html) format. +**[1]:** Collecting `host.id` from non-containerized systems -**[2]:** MAC Addresses MUST be represented in [IEEE RA hexadecimal form](https://standards.ieee.org/wp-content/uploads/import/documents/tutorials/eui.pdf): as hyphen-separated octets in uppercase hexadecimal form from most to least significant. +**Non-privileged Machine ID Lookup** + +When collecting `host.id` for non-containerized systems non-privileged lookups +of the machine id are preferred. SDK detector implementations MUST use the +sources listed below to obtain the machine id. + +| OS | Primary | Fallback | +|---------|---------|---------| +| Linux | contents of `/etc/machine-id` | contents of `/var/lib/dbus/machine-id` | +| BSD | contents of `/etc/hostid` | output of `kenv -q smbios.system.uuid` | +| MacOS | `IOPlatformUUID` line from the output of `ioreg -rd1 -c "IOPlatformExpertDevice"` | - | +| Windows | `MachineGuid` from registry `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography` | - | + +**Privileged Machine ID Lookup** + +The `host.id` can be looked up using privileged sources. For example, Linux +systems can use the output of `dmidecode -t system`, `dmidecode -t baseboard`, +`dmidecode -t chassis`, or read the corresponding data from the filesystem +(e.g. `cat /sys/devices/virtual/dmi/id/product_id`, +`cat /sys/devices/virtual/dmi/id/product_uuid`, etc), however, SDK resource +detector implementations MUST not collect `host.id` from privileged sources. If +privileged lookup of `host.id` is required, the value should be injected via the +`OTEL_RESOURCE_ATTRIBUTES` environment variable. + +**[2]:** IPv4 Addresses MUST be specified in dotted-quad notation. IPv6 addresses MUST be specified in the [RFC 5952](https://www.rfc-editor.org/rfc/rfc5952.html) format. + +**[3]:** MAC Addresses MUST be represented in [IEEE RA hexadecimal form](https://standards.ieee.org/wp-content/uploads/import/documents/tutorials/eui.pdf): as hyphen-separated octets in uppercase hexadecimal form from most to least significant. @@ -82,30 +108,4 @@ To report host metrics, the `system.*` namespace SHOULD be used. -## Collecting host.id from non-containerized systems - -### Non-privileged Machine ID Lookup - -When collecting `host.id` for non-containerized systems non-privileged lookups -of the machine id are preferred. SDK detector implementations MUST use the -sources listed below to obtain the machine id. - -| OS | Primary | Fallback | -|---------|-----------------------------------------------------------------------------------|----------------------------------------| -| Linux | contents of `/etc/machine-id` | contents of `/var/lib/dbus/machine-id` | -| BSD | contents of `/etc/hostid` | output of `kenv -q smbios.system.uuid` | -| MacOS | `IOPlatformUUID` line from the output of `ioreg -rd1 -c "IOPlatformExpertDevice"` | - | -| Windows | `MachineGuid` from registry `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography` | - | - -### Privileged Machine ID Lookup - -The `host.id` can be looked up using privileged sources. For example, Linux -systems can use the output of `dmidecode -t system`, `dmidecode -t baseboard`, -`dmidecode -t chassis`, or read the corresponding data from the filesystem -(e.g. `cat /sys/devices/virtual/dmi/id/product_id`, -`cat /sys/devices/virtual/dmi/id/product_uuid`, etc), however, SDK resource -detector implementations MUST not collect `host.id` from privileged sources. If -privileged lookup of `host.id` is required, the value should be injected via the -`OTEL_RESOURCE_ATTRIBUTES` environment variable. - [DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status diff --git a/model/resource/host.yaml b/model/resource/host.yaml index 7a6c95b2d6..5e2b8fc7c6 100644 --- a/model/resource/host.yaml +++ b/model/resource/host.yaml @@ -5,6 +5,32 @@ groups: A host is defined as a computing instance. For example, physical servers, virtual machines, switches or disk array. attributes: - ref: host.id + note: | + Collecting `host.id` from non-containerized systems + + **Non-privileged Machine ID Lookup** + + When collecting `host.id` for non-containerized systems non-privileged lookups + of the machine id are preferred. SDK detector implementations MUST use the + sources listed below to obtain the machine id. + + | OS | Primary | Fallback | + |---------|---------|---------| + | Linux | contents of `/etc/machine-id` | contents of `/var/lib/dbus/machine-id` | + | BSD | contents of `/etc/hostid` | output of `kenv -q smbios.system.uuid` | + | MacOS | `IOPlatformUUID` line from the output of `ioreg -rd1 -c "IOPlatformExpertDevice"` | - | + | Windows | `MachineGuid` from registry `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography` | - | + + **Privileged Machine ID Lookup** + + The `host.id` can be looked up using privileged sources. For example, Linux + systems can use the output of `dmidecode -t system`, `dmidecode -t baseboard`, + `dmidecode -t chassis`, or read the corresponding data from the filesystem + (e.g. `cat /sys/devices/virtual/dmi/id/product_id`, + `cat /sys/devices/virtual/dmi/id/product_uuid`, etc), however, SDK resource + detector implementations MUST not collect `host.id` from privileged sources. If + privileged lookup of `host.id` is required, the value should be injected via the + `OTEL_RESOURCE_ATTRIBUTES` environment variable. - ref: host.name - ref: host.type - ref: host.arch