From 450410f7f6ad7e04a9205acab25255b21dd74690 Mon Sep 17 00:00:00 2001 From: Jakub Malinowski Date: Thu, 1 Jul 2021 00:11:54 +0200 Subject: [PATCH] Rename Metrics labels to attributes (#1775) --- .../metrics/semantic_conventions/README.md | 20 +-- .../semantic_conventions/http-metrics.md | 58 ++++----- .../openmetrics-guidelines.md | 9 +- .../semantic_conventions/process-metrics.md | 2 +- .../metrics/semantic_conventions/rpc.md | 10 +- .../semantic_conventions/system-metrics.md | 116 +++++++++--------- 6 files changed, 108 insertions(+), 107 deletions(-) diff --git a/specification/metrics/semantic_conventions/README.md b/specification/metrics/semantic_conventions/README.md index fc368d3d1..ae6292135 100644 --- a/specification/metrics/semantic_conventions/README.md +++ b/specification/metrics/semantic_conventions/README.md @@ -30,9 +30,9 @@ Conventions](../../resource/semantic_conventions/README.md). ## General Guidelines -Metric names and labels exist within a single universe and a single -hierarchy. Metric names and labels MUST be considered within the universe of -all existing metric names. When defining new metric names and labels, +Metric names and attributes exist within a single universe and a single +hierarchy. Metric names and attributes MUST be considered within the universe of +all existing metric names. When defining new metric names and attributes, consider the prior art of existing standard metrics and metrics from frameworks/libraries. @@ -48,8 +48,8 @@ OpenTelemetry artifacts define the metric structures and hierarchies for some categories of metrics, and these can assist decisions when creating future metrics. -Common labels SHOULD be consistently named. This aids in discoverability and -disambiguates similar labels to metric names. +Common attributes SHOULD be consistently named. This aids in discoverability and +disambiguates similar attributes to metric names. ["As a rule of thumb, **aggregations** over all the dimensions of a given metric **SHOULD** be @@ -106,9 +106,9 @@ for the total amount of memory on a system. - **usage** - an instrument that measures an amount used out of a known total (**limit**) amount should be called `entity.usage`. For example, -`system.memory.usage` with label `state = used | cached | free | ...` for the +`system.memory.usage` with attribute `state = used | cached | free | ...` for the amount of memory in a each state. Where appropriate, the sum of **usage** -over all label values SHOULD be equal to the **limit**. +over all attribute values SHOULD be equal to the **limit**. A measure of the amount of an unlimited resource consumed is differentiated from **usage**. @@ -119,19 +119,19 @@ out of its **limit** should be called `entity.utilization`. For example, values are in the range `[0, 1]`. - **time** - an instrument that measures passage of time should be called -`entity.time`. For example, `system.cpu.time` with label `state = idle | user +`entity.time`. For example, `system.cpu.time` with attribute `state = idle | user | system | ...`. **time** measurements are not necessarily wall time and can be less than or greater than the real wall time between measurements. **time** instruments are a special case of **usage** metrics, where the - **limit** can usually be calculated as the sum of **time** over all label + **limit** can usually be calculated as the sum of **time** over all attribute values. **utilization** for time instruments can be derived automatically using metric event timestamps. For example, `system.cpu.utilization` is defined as the difference in `system.cpu.time` measurements divided by the elapsed time. - **io** - an instrument that measures bidirectional data flow should be -called `entity.io` and have labels for direction. For example, +called `entity.io` and have attributes for direction. For example, `system.network.io`. - Other instruments that do not fit the above descriptions may be named more diff --git a/specification/metrics/semantic_conventions/http-metrics.md b/specification/metrics/semantic_conventions/http-metrics.md index d563283b8..38d05416a 100644 --- a/specification/metrics/semantic_conventions/http-metrics.md +++ b/specification/metrics/semantic_conventions/http-metrics.md @@ -4,9 +4,9 @@ The conventions described in this section are HTTP specific. When HTTP operations occur, metric events about those operations will be generated and reported to provide insight into the -operations. By adding HTTP labels to metric events it allows for finely tuned filtering. +operations. By adding HTTP attributes to metric events it allows for finely tuned filtering. -**Disclaimer:** These are initial HTTP metric instruments and labels but more may be added in the future. +**Disclaimer:** These are initial HTTP metric instruments and attributes but more may be added in the future. ## Metric Instruments @@ -30,72 +30,72 @@ Below is a table of HTTP client metric instruments. |------------------------|---------------|--------------|-------------| | `http.client.duration` | ValueRecorder | milliseconds | measure the duration of the outbound HTTP request | -## Labels +## Attributes -Below is a table of the labels that SHOULD be included on `duration` metric events +Below is a table of the attributes that SHOULD be included on `duration` metric events and whether they should be on server, client, or both types of HTTP metric events: | Name | Type | Recommended | Notes and examples | |--------------------|---------------------|-------------------|--------------------| | `http.method` | `client` & `server` | Yes | The HTTP request method. E.g. `"GET"` | -| `http.host` | `client` & `server` | see [label alternatives](#label-alternatives) | The value of the [HTTP host header][]. When the header is empty or not present, this label should be the same. | -| `http.scheme` | `client` & `server` | see [label alternatives](#label-alternatives) | The URI scheme identifying the used protocol in lowercase: `"http"` or `"https"` | +| `http.host` | `client` & `server` | see [attribute alternatives](#attribute-alternatives) | The value of the [HTTP host header][]. When the header is empty or not present, this attribute should be the same. | +| `http.scheme` | `client` & `server` | see [attribute alternatives](#attribute-alternatives) | The URI scheme identifying the used protocol in lowercase: `"http"` or `"https"` | | `http.status_code` | `client` & `server` | Optional | [HTTP response status code][]. E.g. `200` (String) | | `http.flavor` | `client` & `server` | Optional | Kind of HTTP protocol used: `"1.0"`, `"1.1"`, `"2"`, `"SPDY"` or `"QUIC"`. | -| `net.peer.name` | `client` | see [1] in [label alternatives](#label-alternatives) | See [general network connection attributes](../../trace/semantic_conventions/span-general.md#general-network-connection-attributes) | -| `net.peer.port` | `client` | see [1] in [label alternatives](#label-alternatives) | See [general network connection attributes](../../trace/semantic_conventions/span-general.md#general-network-connection-attributes) | -| `net.peer.ip` | `client` | see [1] in [label alternatives](#label-alternatives) | See [general network connection attributes](../../trace/semantic_conventions/span-general.md#general-network-connection-attributes) | -| `http.server_name` | `server` | see [2] in [label alternatives](#label-alternatives) | The primary server name of the matched virtual host. This should be obtained via configuration. If no such configuration can be obtained, this label MUST NOT be set ( `net.host.name` should be used instead). | -| `net.host.name` | `server` | see [2] in [label alternatives](#label-alternatives) | See [general network connection attributes](../../trace/semantic_conventions/span-general.md#general-network-connection-attributes) | -| `net.host.port` | `server` | see [2] in [label alternatives](#label-alternatives) | See [general network connection attributes](../../trace/semantic_conventions/span-general.md#general-network-connection-attributes) | +| `net.peer.name` | `client` | see [1] in [attribute alternatives](#attribute-alternatives) | See [general network connection attributes](../../trace/semantic_conventions/span-general.md#general-network-connection-attributes) | +| `net.peer.port` | `client` | see [1] in [attribute alternatives](#attribute-alternatives) | See [general network connection attributes](../../trace/semantic_conventions/span-general.md#general-network-connection-attributes) | +| `net.peer.ip` | `client` | see [1] in [attribute alternatives](#attribute-alternatives) | See [general network connection attributes](../../trace/semantic_conventions/span-general.md#general-network-connection-attributes) | +| `http.server_name` | `server` | see [2] in [attribute alternatives](#attribute-alternatives) | The primary server name of the matched virtual host. This should be obtained via configuration. If no such configuration can be obtained, this attribute MUST NOT be set ( `net.host.name` should be used instead). | +| `net.host.name` | `server` | see [2] in [attribute alternatives](#attribute-alternatives) | See [general network connection attributes](../../trace/semantic_conventions/span-general.md#general-network-connection-attributes) | +| `net.host.port` | `server` | see [2] in [attribute alternatives](#attribute-alternatives) | See [general network connection attributes](../../trace/semantic_conventions/span-general.md#general-network-connection-attributes) | -The following labels SHOULD be included in the `http.server.active_requests` observation: +The following attributes SHOULD be included in the `http.server.active_requests` observation: | Name | Recommended | Notes and examples | |--------------------|-------------|--------------------| | `http.method` | Yes | The HTTP request method. E.g. `"GET"` | -| `http.host` | see [label alternatives](#label-alternatives) | The value of the [HTTP host header][]. When the header is empty or not present, this label should be the same | -| `http.scheme` | see [label alternatives](#label-alternatives) | The URI scheme identifying the used protocol in lowercase: `"http"` or `"https"` | +| `http.host` | see [attribute alternatives](#attribute-alternatives) | The value of the [HTTP host header][]. When the header is empty or not present, this attribute should be the same | +| `http.scheme` | see [attribute alternatives](#attribute-alternatives) | The URI scheme identifying the used protocol in lowercase: `"http"` or `"https"` | | `http.flavor` | Optional | Kind of HTTP protocol used: `"1.0"`, `"1.1"`, `"2"`, `"SPDY"` or `"QUIC"` | -| `http.server_name` | see [2] in [label alternatives](#label-alternatives) | The primary server name of the matched virtual host. This should be obtained via configuration. If no such configuration can be obtained, this label MUST NOT be set ( `net.host.name` should be used instead). | +| `http.server_name` | see [2] in [attribute alternatives](#attribute-alternatives) | The primary server name of the matched virtual host. This should be obtained via configuration. If no such configuration can be obtained, this attribute MUST NOT be set ( `net.host.name` should be used instead). | [HTTP host header]: https://tools.ietf.org/html/rfc7230#section-5.4 [HTTP response status code]: https://tools.ietf.org/html/rfc7231#section-6 [HTTP reason phrase]: https://tools.ietf.org/html/rfc7230#section-3.1.2 -### Parameterized labels +### Parameterized attributes -To avoid high cardinality the following labels SHOULD substitute any parameters when added as labels to http metric events as described below: +To avoid high cardinality the following attributes SHOULD substitute any parameters when added as attributes to http metric events as described below: -| Label name | Type | Recommended | Notes and examples | +| Attribute name | Type | Recommended | Notes and examples | |-------------------|---------------------|-------------|---------------------| -|`http.url` | `client` & `server` | see [label alternatives](#label-alternatives) | The originally requested URL | -|`http.target` | `client` & `server` | see [label alternatives](#label-alternatives) | The full request target as passed in a [HTTP request line][] or equivalent, e.g. `"/path/{id}/?q={}"`. | +|`http.url` | `client` & `server` | see [attribute alternatives](#attribute-alternatives) | The originally requested URL | +|`http.target` | `client` & `server` | see [attribute alternatives](#attribute-alternatives) | The full request target as passed in a [HTTP request line][] or equivalent, e.g. `"/path/{id}/?q={}"`. | [HTTP request line]: https://tools.ietf.org/html/rfc7230#section-3.1.1 Many REST APIs encode parameters into the URI path, e.g. `/api/users/123` where `123` -is a user id, which creates high cardinality value space not suitable for labels on metric events. +is a user id, which creates high cardinality value space not suitable for attributes on metric events. In case of HTTP servers, these endpoints are often mapped by the server frameworks to more concise _HTTP routes_, e.g. `/api/users/{user_id}`, which are -recommended as the low cardinality label values. However, the same approach usually -does not work for HTTP client labels, especially when instrumentation is provided +recommended as the low cardinality attribute values. However, the same approach usually +does not work for HTTP client attributes, especially when instrumentation is provided by a lower-level middleware that is not aware of the specifics of how the URIs -are formed. Therefore, HTTP client labels SHOULD be using conservative, low +are formed. Therefore, HTTP client attributes SHOULD be using conservative, low cardinality names formed from the available parameters of an HTTP request, -such as `"HTTP {METHOD_NAME}"`. These labels MUST NOT default to using URI +such as `"HTTP {METHOD_NAME}"`. These attributes MUST NOT default to using URI path. -### Label alternatives +### Attribute alternatives -**[1]** For client metric labels, one of the following sets of labels is RECOMMENDED (in order of usual preference unless for a particular web client/framework it is known that some other set is preferable for some reason; all strings must be non-empty): +**[1]** For client metric attributes, one of the following sets of attributes is RECOMMENDED (in order of usual preference unless for a particular web client/framework it is known that some other set is preferable for some reason; all strings must be non-empty): * `http.url` * `http.scheme`, `http.host`, `http.target` * `http.scheme`, `net.peer.name`, `net.peer.port`, `http.target` * `http.scheme`, `net.peer.ip`, `net.peer.port`, `http.target` -**[2]** For server metric labels, `http.url` is usually not readily available on the server side but would have to be assembled in a cumbersome and sometimes lossy process from other information (see e.g. ). +**[2]** For server metric attributes, `http.url` is usually not readily available on the server side but would have to be assembled in a cumbersome and sometimes lossy process from other information (see e.g. ). It is thus preferred to supply the raw data that *is* available. Namely, one of the following sets is RECOMMENDED (in order of usual preference unless for a particular web server/framework it is known that some other set is preferable for some reason; all strings must be non-empty): diff --git a/specification/metrics/semantic_conventions/openmetrics-guidelines.md b/specification/metrics/semantic_conventions/openmetrics-guidelines.md index 85c6d2fbd..0c141b9dd 100644 --- a/specification/metrics/semantic_conventions/openmetrics-guidelines.md +++ b/specification/metrics/semantic_conventions/openmetrics-guidelines.md @@ -24,14 +24,15 @@ metrics in the OpenMetrics exposition format. For more information, refer to the ### OpenTelemetry to OpenMetrics -#### Name and Label Keys +#### Name and Attribute Keys Exposing OpenTelemetry metrics in the OpenMetrics format is primarily -problematic for metric and label naming; the OpenMetrics exposition format -expressly forbids some characters that are allowed in OpenTelemetry. +problematic for metric and attribute (labels in OpenMetrics) naming; the +OpenMetrics exposition format expressly forbids some characters that are allowed +in OpenTelemetry. When converting OpenTelemetry metric events to the OpenMetrics exposition -format, the name field and all label keys MUST be sanitized by replacing +format, the name field and all attribute keys MUST be sanitized by replacing every character that is not a letter or a digit with an underscore. Example pseudocode: diff --git a/specification/metrics/semantic_conventions/process-metrics.md b/specification/metrics/semantic_conventions/process-metrics.md index 30fbf6745..b67ab3ff3 100644 --- a/specification/metrics/semantic_conventions/process-metrics.md +++ b/specification/metrics/semantic_conventions/process-metrics.md @@ -2,7 +2,7 @@ **Status**: [Experimental](../../document-status.md) -This document describes instruments and labels for common OS process level +This document describes instruments and attributes for common OS process level metrics in OpenTelemetry. Also consider the [general metric semantic conventions](README.md#general-metric-semantic-conventions) when creating instruments not explicitly defined in this document. OS process metrics are diff --git a/specification/metrics/semantic_conventions/rpc.md b/specification/metrics/semantic_conventions/rpc.md index fa3d51597..61cd34fc5 100644 --- a/specification/metrics/semantic_conventions/rpc.md +++ b/specification/metrics/semantic_conventions/rpc.md @@ -4,8 +4,8 @@ The conventions described in this section are RPC specific. When RPC operations occur, metric events about those operations will be generated and reported to -provide insight into those operations. By adding RPC labels to metric events -it allows for finely tuned filtering. +provide insight into those operations. By adding RPC properties as attributes +on metric events it allows for finely tuned filtering. @@ -14,7 +14,7 @@ it allows for finely tuned filtering. - [Metric instruments](#metric-instruments) * [RPC Server](#rpc-server) * [RPC Client](#rpc-client) -- [Labels](#labels) +- [Attributes](#attributes) * [Service name](#service-name) - [gRPC conventions](#grpc-conventions) @@ -52,9 +52,9 @@ RPC usage, not streaming RPCs. | `rpc.client.requests_per_rpc` | ValueRecorder | count | measures the number of messages received per RPC. Should be 1 for all non-streaming RPCs | Optional | Required | | `rpc.client.responses_per_rpc` | ValueRecorder | count | measures the number of messages sent per RPC. Should be 1 for all non-streaming RPCs | Optional | Required | -## Labels +## Attributes -Below is a table of labels that SHOULD be included on metric events and whether +Below is a table of attributes that SHOULD be included on metric events and whether or not they should be on the server, client or both. diff --git a/specification/metrics/semantic_conventions/system-metrics.md b/specification/metrics/semantic_conventions/system-metrics.md index e2c315315..02b69ad24 100644 --- a/specification/metrics/semantic_conventions/system-metrics.md +++ b/specification/metrics/semantic_conventions/system-metrics.md @@ -2,7 +2,7 @@ **Status**: [Experimental](../../document-status.md) -This document describes instruments and labels for common system level +This document describes instruments and attributes for common system level metrics in OpenTelemetry. Consider the [general metric semantic conventions](README.md#general-metric-semantic-conventions) when creating instruments not explicitly defined in the specification. @@ -29,48 +29,48 @@ instruments not explicitly defined in the specification. **Description:** System level processor metrics. -| Name | Description | Units | Instrument Type | Value Type | Label Key(s) | Label Values | -| ---------------------- | ----------- | ----- | --------------- | ---------- | ------------ | ----------------------------------- | -| system.cpu.time | | s | SumObserver | Double | state | idle, user, system, interrupt, etc. | -| | | | | | cpu | CPU number [0..n-1] | -| system.cpu.utilization | | 1 | ValueObserver | Double | state | idle, user, system, interrupt, etc. | -| | | | | | cpu | CPU number (0..n) | +| Name | Description | Units | Instrument Type | Value Type | Attribute Key(s) | Attribute Values | +| ---------------------- | ----------- | ----- | --------------- | ---------- | ---------------- | ----------------------------------- | +| system.cpu.time | | s | SumObserver | Double | state | idle, user, system, interrupt, etc. | +| | | | | | cpu | CPU number [0..n-1] | +| system.cpu.utilization | | 1 | ValueObserver | Double | state | idle, user, system, interrupt, etc. | +| | | | | | cpu | CPU number (0..n) | ### `system.memory.` - Memory metrics **Description:** System level memory metrics. This does not include [paging/swap memory](#systempaging---pagingswap-metrics). -| Name | Description | Units | Instrument Type | Value Type | Label Key | Label Values | -| ------------------------- | ----------- | ----- | ----------------- | ---------- | --------- | ------------------------ | -| system.memory.usage | | By | UpDownSumObserver | Int64 | state | used, free, cached, etc. | -| system.memory.utilization | | 1 | ValueObserver | Double | state | used, free, cached, etc. | +| Name | Description | Units | Instrument Type | Value Type | Attribute Key | Attribute Values | +| ------------------------- | ----------- | ----- | ----------------- | ---------- | ------------- | ------------------------ | +| system.memory.usage | | By | UpDownSumObserver | Int64 | state | used, free, cached, etc. | +| system.memory.utilization | | 1 | ValueObserver | Double | state | used, free, cached, etc. | ### `system.paging.` - Paging/swap metrics **Description:** System level paging/swap memory metrics. -| Name | Description | Units | Instrument Type | Value Type | Label Key | Label Values | -| ------------------------- | ----------------------------------- | ------------ | ----------------- | ---------- | --------- | ------------ | -| system.paging.usage | Unix swap or windows pagefile usage | By | UpDownSumObserver | Int64 | state | used, free | -| system.paging.utilization | | 1 | ValueObserver | Double | state | used, free | -| system.paging.faults | | {faults} | SumObserver | Int64 | type | major, minor | -| system.paging.operations | | {operations} | SumObserver | Int64 | type | major, minor | -| | | | | | direction | in, out | +| Name | Description | Units | Instrument Type | Value Type | Attribute Key | Attribute Values | +| ------------------------- | ----------------------------------- | ------------ | ----------------- | ---------- | ------------- | ---------------- | +| system.paging.usage | Unix swap or windows pagefile usage | By | UpDownSumObserver | Int64 | state | used, free | +| system.paging.utilization | | 1 | ValueObserver | Double | state | used, free | +| system.paging.faults | | {faults} | SumObserver | Int64 | type | major, minor | +| system.paging.operations | | {operations} | SumObserver | Int64 | type | major, minor | +| | | | | | direction | in, out | ### `system.disk.` - Disk controller metrics **Description:** System level disk performance metrics. -| Name | Description | Units | Instrument Type | Value Type | Label Key | Label Values | -| --------------------------------------------------------- | ----------------------------------------------- | ------------ | --------------- | ---------- | --------- | ------------ | -| system.disk.io | | By | SumObserver | Int64 | device | (identifier) | -| | | | | | direction | read, write | -| system.disk.operations | | {operations} | SumObserver | Int64 | device | (identifier) | -| | | | | | direction | read, write | -| system.disk.io_time[1](#io_time) | Time disk spent activated | s | SumObserver | Double | device | (identifier) | -| system.disk.operation_time[2](#operation_time) | Sum of the time each operation took to complete | s | SumObserver | Double | device | (identifier) | -| | | | | | direction | read, write | -| system.disk.merged | | {operations} | SumObserver | Int64 | device | (identifier) | -| | | | | | direction | read, write | +| Name | Description | Units | Instrument Type | Value Type | Attribute Key | Attribute Values | +| --------------------------------------------------------- | ----------------------------------------------- | ------------ | --------------- | ---------- | ------------- | ---------------- | +| system.disk.io | | By | SumObserver | Int64 | device | (identifier) | +| | | | | | direction | read, write | +| system.disk.operations | | {operations} | SumObserver | Int64 | device | (identifier) | +| | | | | | direction | read, write | +| system.disk.io_time[1](#io_time) | Time disk spent activated | s | SumObserver | Double | device | (identifier) | +| system.disk.operation_time[2](#operation_time) | Sum of the time each operation took to complete | s | SumObserver | Double | device | (identifier) | +| | | | | | direction | read, write | +| system.disk.merged | | {operations} | SumObserver | Int64 | device | (identifier) | +| | | | | | direction | read, write | 1 The real elapsed time ("wall clock") used in the I/O path (time from operations running in parallel are not @@ -94,35 +94,35 @@ perf counter (similar for Writes) ### `system.filesystem.` - Filesystem metrics **Description:** System level filesystem metrics. -| Name | Description | Units | Instrument Type | Value Type | Label Key | Label Values | -| ----------------------------- | ----------- | ----- | ----------------- | ---------- | ---------- | -------------------- | -| system.filesystem.usage | | By | UpDownSumObserver | Int64 | device | (identifier) | -| | | | | | state | used, free, reserved | -| | | | | | type | ext4, tmpfs, etc. | -| | | | | | mode | rw, ro, etc. | -| | | | | | mountpoint | (path) | -| system.filesystem.utilization | | 1 | ValueObserver | Double | device | (identifier) | -| | | | | | state | used, free, reserved | -| | | | | | type | ext4, tmpfs, etc. | -| | | | | | mode | rw, ro, etc. | -| | | | | | mountpoint | (path) | +| Name | Description | Units | Instrument Type | Value Type | Attribute Key | Attribute Values | +| ----------------------------- | ----------- | ----- | ----------------- | ---------- | -------------- | -------------------- | +| system.filesystem.usage | | By | UpDownSumObserver | Int64 | device | (identifier) | +| | | | | | state | used, free, reserved | +| | | | | | type | ext4, tmpfs, etc. | +| | | | | | mode | rw, ro, etc. | +| | | | | | mountpoint | (path) | +| system.filesystem.utilization | | 1 | ValueObserver | Double | device | (identifier) | +| | | | | | state | used, free, reserved | +| | | | | | type | ext4, tmpfs, etc. | +| | | | | | mode | rw, ro, etc. | +| | | | | | mountpoint | (path) | ### `system.network.` - Network metrics **Description:** System level network metrics. -| Name | Description | Units | Instrument Type | Value Type | Label Key | Label Values | -| ---------------------------------------------- | ----------------------------------------------------------------------------- | ------------- | ----------------- | ---------- | --------- | ---------------------------------------------------------------------------------------------- | -| system.network.dropped[1](#dropped) | Count of packets that are dropped or discarded even though there was no error | {packets} | SumObserver | Int64 | device | (identifier) | -| | | | | | direction | transmit, receive | -| system.network.packets | | {packets} | SumObserver | Int64 | device | (identifier) | -| | | | | | direction | transmit, receive | -| system.network.errors[2](#errors) | Count of network errors detected | {errors} | SumObserver | Int64 | device | (identifier) | -| | | | | | direction | transmit, receive | -| system.network.io | | By | SumObserver | Int64 | device | (identifier) | -| | | | | | direction | transmit, receive | -| system.network.connections | | {connections} | UpDownSumObserver | Int64 | device | (identifier) | -| | | | | | protocol | tcp, udp, [etc.](https://en.wikipedia.org/wiki/Transport_layer#Protocols) | -| | | | | | state | [e.g. for tcp](https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Protocol_operation) | +| Name | Description | Units | Instrument Type | Value Type | Attribute Key | Attribute Values | +| ---------------------------------------------- | ----------------------------------------------------------------------------- | ------------- | ----------------- | ---------- | ------------- | ---------------------------------------------------------------------------------------------- | +| system.network.dropped[1](#dropped) | Count of packets that are dropped or discarded even though there was no error | {packets} | SumObserver | Int64 | device | (identifier) | +| | | | | | direction | transmit, receive | +| system.network.packets | | {packets} | SumObserver | Int64 | device | (identifier) | +| | | | | | direction | transmit, receive | +| system.network.errors[2](#errors) | Count of network errors detected | {errors} | SumObserver | Int64 | device | (identifier) | +| | | | | | direction | transmit, receive | +| system.network.io | | By | SumObserver | Int64 | device | (identifier) | +| | | | | | direction | transmit, receive | +| system.network.connections | | {connections} | UpDownSumObserver | Int64 | device | (identifier) | +| | | | | | protocol | tcp, udp, [etc.](https://en.wikipedia.org/wiki/Transport_layer#Protocols) | +| | | | | | state | [e.g. for tcp](https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Protocol_operation) | 1 Measured as: @@ -146,10 +146,10 @@ from **Description:** System level aggregate process metrics. For metrics at the individual process level, see [process metrics](process-metrics.md). -| Name | Description | Units | Instrument Type | Value Type | Label Key | Label Values | -| ------------------------ | --------------------------------------------------------- | ----------- | ----------------- | ---------- | --------- | ---------------------------------------------------------------------------------------------- | -| system.processes.count | Total number of processes in each state | {processes} | UpDownSumObserver | Int64 | status | running, sleeping, [etc.](https://man7.org/linux/man-pages/man1/ps.1.html#PROCESS_STATE_CODES) | -| system.processes.created | Total number of processes created over uptime of the host | {processes} | SumObserver | Int64 | - | - | +| Name | Description | Units | Instrument Type | Value Type | Attribute Key | Attribute Values | +| ------------------------ | --------------------------------------------------------- | ----------- | ----------------- | ---------- | ------------- | ---------------------------------------------------------------------------------------------- | +| system.processes.count | Total number of processes in each state | {processes} | UpDownSumObserver | Int64 | status | running, sleeping, [etc.](https://man7.org/linux/man-pages/man1/ps.1.html#PROCESS_STATE_CODES) | +| system.processes.created | Total number of processes created over uptime of the host | {processes} | SumObserver | Int64 | - | - | ### `system.{os}.` - OS Specific System Metrics