Rename Metrics labels to attributes (#1775)

This commit is contained in:
Jakub Malinowski 2021-07-01 00:11:54 +02:00 committed by GitHub
parent ecec5145dc
commit 450410f7f6
6 changed files with 108 additions and 107 deletions

View File

@ -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

View File

@ -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. <https://github.com/open-telemetry/opentelemetry-python/pull/148>).
**[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. <https://github.com/open-telemetry/opentelemetry-python/pull/148>).
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):

View File

@ -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:

View File

@ -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

View File

@ -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.
<!-- Re-generate TOC with `markdown-toc --no-first-h1 -i` -->
@ -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.
<!-- semconv rpc -->

View File

@ -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<!--notlink--> | | By | SumObserver | Int64 | device | (identifier) |
| | | | | | direction | read, write |
| system.disk.operations | | {operations} | SumObserver | Int64 | device | (identifier) |
| | | | | | direction | read, write |
| system.disk.io_time<sup>[1](#io_time)</sup> | Time disk spent activated | s | SumObserver | Double | device | (identifier) |
| system.disk.operation_time<sup>[2](#operation_time)</sup> | 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<!--notlink--> | | By | SumObserver | Int64 | device | (identifier) |
| | | | | | direction | read, write |
| system.disk.operations | | {operations} | SumObserver | Int64 | device | (identifier) |
| | | | | | direction | read, write |
| system.disk.io_time<sup>[1](#io_time)</sup> | Time disk spent activated | s | SumObserver | Double | device | (identifier) |
| system.disk.operation_time<sup>[2](#operation_time)</sup> | 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 |
<sup><a name="io_time">1</a></sup> 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<sup>[1](#dropped)</sup> | 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<sup>[2](#errors)</sup> | Count of network errors detected | {errors} | SumObserver | Int64 | device | (identifier) |
| | | | | | direction | transmit, receive |
| system<!--notlink-->.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<sup>[1](#dropped)</sup> | 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<sup>[2](#errors)</sup> | Count of network errors detected | {errors} | SumObserver | Int64 | device | (identifier) |
| | | | | | direction | transmit, receive |
| system<!--notlink-->.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) |
<sup><a name="dropped">1</a></sup> 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