Generate process metrics with `semconv` yaml (#330)
Co-authored-by: Joao Grassi <joao.grassi@dynatrace.com>
This commit is contained in:
parent
a41f0e8961
commit
d21135e07c
|
|
@ -1,5 +1,8 @@
|
||||||
extends: default
|
extends: default
|
||||||
|
|
||||||
|
ignore-from-file:
|
||||||
|
- .gitignore
|
||||||
|
|
||||||
rules:
|
rules:
|
||||||
document-start: disable
|
document-start: disable
|
||||||
octal-values: enable
|
octal-values: enable
|
||||||
|
|
|
||||||
14
CHANGELOG.md
14
CHANGELOG.md
|
|
@ -13,6 +13,20 @@ release.
|
||||||
([#484](https://github.com/open-telemetry/semantic-conventions/pull/484))
|
([#484](https://github.com/open-telemetry/semantic-conventions/pull/484))
|
||||||
- Depluralize labels for pod (`k8s.pod.labels.*`) and container (`container.labels.*`) resources
|
- Depluralize labels for pod (`k8s.pod.labels.*`) and container (`container.labels.*`) resources
|
||||||
([#625](https://github.com/open-telemetry/semantic-conventions/pull/625))
|
([#625](https://github.com/open-telemetry/semantic-conventions/pull/625))
|
||||||
|
- BREAKING: Generate process metrics from YAML
|
||||||
|
([#330](https://github.com/open-telemetry/semantic-conventions/pull/330))
|
||||||
|
- Rename `process.threads` to `process.thread.count`
|
||||||
|
- Rename `process.open_file_descriptors` to `process.open_file_descriptor.count`
|
||||||
|
- Rename attributes for `process.cpu.*`
|
||||||
|
- `state` to `process.cpu.state`
|
||||||
|
- Change attributes for `process.disk.io`
|
||||||
|
- Instead of `direction` use `disk.io.direction` from global registry
|
||||||
|
- Change attributes for `process.network.io`
|
||||||
|
- Instead of `direction` use `network.io.direction` from global registry
|
||||||
|
- Rename attributes for `process.context_switches`
|
||||||
|
- `type` to `process.context_switch_type`
|
||||||
|
- Rename attributes for `process.paging.faults`
|
||||||
|
- `type` to `process.paging.fault_type`
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,9 +19,17 @@ metrics](/docs/runtime/README.md#metrics).
|
||||||
|
|
||||||
<!-- toc -->
|
<!-- toc -->
|
||||||
|
|
||||||
- [Metric Instruments](#metric-instruments)
|
- [Process Metrics](#process-metrics)
|
||||||
* [Process](#process)
|
* [Metric: `process.cpu.time`](#metric-processcputime)
|
||||||
- [Attributes](#attributes)
|
* [Metric: `process.cpu.utilization`](#metric-processcpuutilization)
|
||||||
|
* [Metric: `process.memory.usage`](#metric-processmemoryusage)
|
||||||
|
* [Metric: `process.memory.virtual`](#metric-processmemoryvirtual)
|
||||||
|
* [Metric: `process.disk.io`](#metric-processdiskio)
|
||||||
|
* [Metric: `process.network.io`](#metric-processnetworkio)
|
||||||
|
* [Metric: `process.thread.count`](#metric-processthreadcount)
|
||||||
|
* [Metric: `process.open_file_descriptor.count`](#metric-processopen_file_descriptorcount)
|
||||||
|
* [Metric: `process.context_switches`](#metric-processcontext_switches)
|
||||||
|
* [Metric: `process.paging.faults`](#metric-processpagingfaults)
|
||||||
|
|
||||||
<!-- tocstop -->
|
<!-- tocstop -->
|
||||||
|
|
||||||
|
|
@ -35,27 +43,199 @@ metrics](/docs/runtime/README.md#metrics).
|
||||||
> * SHOULD introduce a control mechanism to allow users to opt-in to the new
|
> * SHOULD introduce a control mechanism to allow users to opt-in to the new
|
||||||
> conventions once the migration plan is finalized.
|
> conventions once the migration plan is finalized.
|
||||||
|
|
||||||
## Metric Instruments
|
## Process Metrics
|
||||||
|
|
||||||
### Process
|
### Metric: `process.cpu.time`
|
||||||
|
|
||||||
Below is a table of Process metric instruments.
|
This metric is [recommended][MetricRecommended].
|
||||||
|
|
||||||
| Name | Instrument Type ([\*](/docs/general/metrics.md#instrument-types)) | Unit | Description | Labels |
|
<!-- semconv metric.process.cpu.time(metric_table) -->
|
||||||
|---------------------------------|----------------------------------------------------|-----------|-------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
| `process.cpu.time` | Counter | s | Total CPU seconds broken down by different states. | `state`, if specified, SHOULD be one of: `system`, `user`, `wait`. A process SHOULD be characterized _either_ by data points with no `state` labels, _or only_ data points with `state` labels. |
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
| `process.cpu.utilization` | Gauge | 1 | Difference in process.cpu.time since the last measurement, divided by the elapsed time and number of CPUs available to the process. | `state`, if specified, SHOULD be one of: `system`, `user`, `wait`. A process SHOULD be characterized _either_ by data points with no `state` labels, _or only_ data points with `state` labels. |
|
| `process.cpu.time` | Counter | `s` | Total CPU seconds broken down by different states. |
|
||||||
| `process.memory.usage` | UpDownCounter | By | The amount of physical memory in use. | |
|
<!-- endsemconv -->
|
||||||
| `process.memory.virtual` | UpDownCounter | By | The amount of committed virtual memory. | |
|
|
||||||
| `process.disk.io` | Counter | By | Disk bytes transferred. | `direction` SHOULD be one of: `read`, `write` |
|
|
||||||
| `process.network.io` | Counter | By | Network bytes transferred. | `direction` SHOULD be one of: `receive`, `transmit` |
|
|
||||||
| `process.threads` | UpDownCounter | {thread} | Process threads count. | |
|
|
||||||
| `process.open_file_descriptors` | UpDownCounter | {count} | Number of file descriptors in use by the process. | |
|
|
||||||
| `process.context_switches` | Counter | {count} | Number of times the process has been context switched. | `type` SHOULD be one of: `involuntary`, `voluntary` |
|
|
||||||
| `process.paging.faults` | Counter | {fault} | Number of page faults the process has made. | `type`, if specified, SHOULD be one of: `major` (for major, or hard, page faults), `minor` (for minor, or soft, page faults). |
|
|
||||||
|
|
||||||
## Attributes
|
<!-- semconv metric.process.cpu.time(full) -->
|
||||||
|
| Attribute | Type | Description | Examples | Requirement Level |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| `process.cpu.state` | string | The CPU state for this data point. A process SHOULD be characterized _either_ by data points with no `state` labels, _or only_ data points with `state` labels. | `system` | Recommended |
|
||||||
|
|
||||||
Process metrics SHOULD be associated with a [`process`](/docs/resource/process.md#process) resource whose attributes provide additional context about the process.
|
`process.cpu.state` has the following list of well-known values. If one of them applies, then the respective value MUST be used, otherwise a custom value MAY be used.
|
||||||
|
|
||||||
|
| Value | Description |
|
||||||
|
|---|---|
|
||||||
|
| `system` | system |
|
||||||
|
| `user` | user |
|
||||||
|
| `wait` | wait |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
### Metric: `process.cpu.utilization`
|
||||||
|
|
||||||
|
This metric is [recommended][MetricRecommended].
|
||||||
|
|
||||||
|
<!-- semconv metric.process.cpu.utilization(metric_table) -->
|
||||||
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `process.cpu.utilization` | Gauge | `1` | Difference in process.cpu.time since the last measurement, divided by the elapsed time and number of CPUs available to the process. |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
<!-- semconv metric.process.cpu.utilization(full) -->
|
||||||
|
| Attribute | Type | Description | Examples | Requirement Level |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| `process.cpu.state` | string | The CPU state for this data point. A process SHOULD be characterized _either_ by data points with no `state` labels, _or only_ data points with `state` labels. | `system` | Recommended |
|
||||||
|
|
||||||
|
`process.cpu.state` has the following list of well-known values. If one of them applies, then the respective value MUST be used, otherwise a custom value MAY be used.
|
||||||
|
|
||||||
|
| Value | Description |
|
||||||
|
|---|---|
|
||||||
|
| `system` | system |
|
||||||
|
| `user` | user |
|
||||||
|
| `wait` | wait |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
### Metric: `process.memory.usage`
|
||||||
|
|
||||||
|
This metric is [recommended][MetricRecommended].
|
||||||
|
|
||||||
|
<!-- semconv metric.process.memory.usage(metric_table) -->
|
||||||
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `process.memory.usage` | UpDownCounter | `By` | The amount of physical memory in use. |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
<!-- semconv metric.process.memory.usage(full) -->
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
### Metric: `process.memory.virtual`
|
||||||
|
|
||||||
|
This metric is [recommended][MetricRecommended].
|
||||||
|
|
||||||
|
<!-- semconv metric.process.memory.virtual(metric_table) -->
|
||||||
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `process.memory.virtual` | UpDownCounter | `By` | The amount of committed virtual memory. |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
<!-- semconv metric.process.memory.virtual(full) -->
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
### Metric: `process.disk.io`
|
||||||
|
|
||||||
|
This metric is [recommended][MetricRecommended].
|
||||||
|
|
||||||
|
<!-- semconv metric.process.disk.io(metric_table) -->
|
||||||
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `process.disk.io` | Counter | `By` | Disk bytes transferred. |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
<!-- semconv metric.process.disk.io(full) -->
|
||||||
|
| Attribute | Type | Description | Examples | Requirement Level |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| [`disk.io.direction`](../attributes-registry/disk.md) | string | The disk IO operation direction. | `read` | Recommended |
|
||||||
|
|
||||||
|
`disk.io.direction` MUST be one of the following:
|
||||||
|
|
||||||
|
| Value | Description |
|
||||||
|
|---|---|
|
||||||
|
| `read` | read |
|
||||||
|
| `write` | write |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
### Metric: `process.network.io`
|
||||||
|
|
||||||
|
This metric is [recommended][MetricRecommended].
|
||||||
|
|
||||||
|
<!-- semconv metric.process.network.io(metric_table) -->
|
||||||
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `process.network.io` | Counter | `By` | Network bytes transferred. |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
<!-- semconv metric.process.network.io(full) -->
|
||||||
|
| Attribute | Type | Description | Examples | Requirement Level |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| [`network.io.direction`](../attributes-registry/network.md) | string | The network IO operation direction. | `transmit` | Recommended |
|
||||||
|
|
||||||
|
`network.io.direction` MUST be one of the following:
|
||||||
|
|
||||||
|
| Value | Description |
|
||||||
|
|---|---|
|
||||||
|
| `transmit` | transmit |
|
||||||
|
| `receive` | receive |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
### Metric: `process.thread.count`
|
||||||
|
|
||||||
|
This metric is [recommended][MetricRecommended].
|
||||||
|
|
||||||
|
<!-- semconv metric.process.thread.count(metric_table) -->
|
||||||
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `process.thread.count` | UpDownCounter | `{thread}` | Process threads count. |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
<!-- semconv metric.process.thread.count(full) -->
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
### Metric: `process.open_file_descriptor.count`
|
||||||
|
|
||||||
|
This metric is [recommended][MetricRecommended].
|
||||||
|
|
||||||
|
<!-- semconv metric.process.open_file_descriptor.count(metric_table) -->
|
||||||
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `process.open_file_descriptor.count` | UpDownCounter | `{count}` | Number of file descriptors in use by the process. |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
<!-- semconv metric.process.open_file_descriptor.count(full) -->
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
### Metric: `process.context_switches`
|
||||||
|
|
||||||
|
This metric is [recommended][MetricRecommended].
|
||||||
|
|
||||||
|
<!-- semconv metric.process.context_switches(metric_table) -->
|
||||||
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `process.context_switches` | Counter | `{count}` | Number of times the process has been context switched. |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
<!-- semconv metric.process.context_switches(full) -->
|
||||||
|
| Attribute | Type | Description | Examples | Requirement Level |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| `process.context_switch_type` | string | Specifies whether the context switches for this data point were voluntary or involuntary. | `voluntary` | Recommended |
|
||||||
|
|
||||||
|
`process.context_switch_type` has the following list of well-known values. If one of them applies, then the respective value MUST be used, otherwise a custom value MAY be used.
|
||||||
|
|
||||||
|
| Value | Description |
|
||||||
|
|---|---|
|
||||||
|
| `voluntary` | voluntary |
|
||||||
|
| `involuntary` | involuntary |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
### Metric: `process.paging.faults`
|
||||||
|
|
||||||
|
This metric is [recommended][MetricRecommended].
|
||||||
|
|
||||||
|
<!-- semconv metric.process.paging.faults(metric_table) -->
|
||||||
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `process.paging.faults` | Counter | `{fault}` | Number of page faults the process has made. |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
<!-- semconv metric.process.paging.faults(full) -->
|
||||||
|
| Attribute | Type | Description | Examples | Requirement Level |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| `process.paging.fault_type` | string | The type of page fault for this data point. Type `major` is for major/hard page faults, and `minor` is for minor/soft page faults. | `major` | Recommended |
|
||||||
|
|
||||||
|
`process.paging.fault_type` has the following list of well-known values. If one of them applies, then the respective value MUST be used, otherwise a custom value MAY be used.
|
||||||
|
|
||||||
|
| Value | Description |
|
||||||
|
|---|---|
|
||||||
|
| `major` | major |
|
||||||
|
| `minor` | minor |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
[DocumentStatus]: https://github.com/open-telemetry/opentelemetry-specification/tree/v1.26.0/specification/document-status.md
|
[DocumentStatus]: https://github.com/open-telemetry/opentelemetry-specification/tree/v1.26.0/specification/document-status.md
|
||||||
|
[MetricRecommended]: https://github.com/open-telemetry/opentelemetry-specification/tree/v1.26.0/specification/metrics/metric-requirement-level.md#recommended
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,120 @@
|
||||||
|
groups:
|
||||||
|
- id: attributes.process.cpu
|
||||||
|
prefix: process.cpu
|
||||||
|
type: attribute_group
|
||||||
|
brief: "Attributes for process CPU metrics."
|
||||||
|
attributes:
|
||||||
|
- id: state
|
||||||
|
brief: "The CPU state for this data point. A process SHOULD be characterized _either_ by data points with no `state` labels, _or only_ data points with `state` labels."
|
||||||
|
type:
|
||||||
|
allow_custom_values: true
|
||||||
|
members:
|
||||||
|
- id: system
|
||||||
|
value: 'system'
|
||||||
|
- id: user
|
||||||
|
value: 'user'
|
||||||
|
- id: wait
|
||||||
|
value: 'wait'
|
||||||
|
|
||||||
|
- id: metric.process.cpu.time
|
||||||
|
type: metric
|
||||||
|
metric_name: process.cpu.time
|
||||||
|
brief: "Total CPU seconds broken down by different states."
|
||||||
|
instrument: counter
|
||||||
|
unit: "s"
|
||||||
|
attributes:
|
||||||
|
- ref: process.cpu.state
|
||||||
|
|
||||||
|
- id: metric.process.cpu.utilization
|
||||||
|
type: metric
|
||||||
|
metric_name: process.cpu.utilization
|
||||||
|
brief: "Difference in process.cpu.time since the last measurement, divided by the elapsed time and number of CPUs available to the process."
|
||||||
|
instrument: gauge
|
||||||
|
unit: "1"
|
||||||
|
attributes:
|
||||||
|
- ref: process.cpu.state
|
||||||
|
|
||||||
|
- id: metric.process.memory.usage
|
||||||
|
type: metric
|
||||||
|
metric_name: process.memory.usage
|
||||||
|
brief: "The amount of physical memory in use."
|
||||||
|
instrument: updowncounter
|
||||||
|
unit: "By"
|
||||||
|
attributes: []
|
||||||
|
|
||||||
|
- id: metric.process.memory.virtual
|
||||||
|
type: metric
|
||||||
|
metric_name: process.memory.virtual
|
||||||
|
brief: "The amount of committed virtual memory."
|
||||||
|
instrument: updowncounter
|
||||||
|
unit: "By"
|
||||||
|
attributes: []
|
||||||
|
|
||||||
|
- id: metric.process.disk.io
|
||||||
|
type: metric
|
||||||
|
metric_name: process.disk.io
|
||||||
|
prefix: process.disk
|
||||||
|
brief: "Disk bytes transferred."
|
||||||
|
instrument: counter
|
||||||
|
unit: "By"
|
||||||
|
attributes:
|
||||||
|
- ref: disk.io.direction
|
||||||
|
|
||||||
|
- id: metric.process.network.io
|
||||||
|
type: metric
|
||||||
|
metric_name: process.network.io
|
||||||
|
brief: "Network bytes transferred."
|
||||||
|
instrument: counter
|
||||||
|
unit: "By"
|
||||||
|
attributes:
|
||||||
|
- ref: network.io.direction
|
||||||
|
|
||||||
|
- id: metric.process.thread.count
|
||||||
|
type: metric
|
||||||
|
metric_name: process.thread.count
|
||||||
|
brief: "Process threads count."
|
||||||
|
instrument: updowncounter
|
||||||
|
unit: "{thread}"
|
||||||
|
attributes: []
|
||||||
|
|
||||||
|
- id: metric.process.open_file_descriptor.count
|
||||||
|
type: metric
|
||||||
|
metric_name: process.open_file_descriptor.count
|
||||||
|
brief: "Number of file descriptors in use by the process."
|
||||||
|
instrument: updowncounter
|
||||||
|
unit: "{count}"
|
||||||
|
attributes: []
|
||||||
|
|
||||||
|
- id: metric.process.context_switches
|
||||||
|
type: metric
|
||||||
|
metric_name: process.context_switches
|
||||||
|
brief: "Number of times the process has been context switched."
|
||||||
|
instrument: counter
|
||||||
|
unit: "{count}"
|
||||||
|
attributes:
|
||||||
|
- id: process.context_switch_type
|
||||||
|
brief: "Specifies whether the context switches for this data point were voluntary or involuntary."
|
||||||
|
type:
|
||||||
|
allow_custom_values: true
|
||||||
|
members:
|
||||||
|
- id: voluntary
|
||||||
|
value: 'voluntary'
|
||||||
|
- id: involuntary
|
||||||
|
value: 'involuntary'
|
||||||
|
|
||||||
|
- id: metric.process.paging.faults
|
||||||
|
type: metric
|
||||||
|
metric_name: process.paging.faults
|
||||||
|
brief: "Number of page faults the process has made."
|
||||||
|
instrument: counter
|
||||||
|
unit: "{fault}"
|
||||||
|
attributes:
|
||||||
|
- id: process.paging.fault_type
|
||||||
|
brief: "The type of page fault for this data point. Type `major` is for major/hard page faults, and `minor` is for minor/soft page faults."
|
||||||
|
type:
|
||||||
|
allow_custom_values: true
|
||||||
|
members:
|
||||||
|
- id: major
|
||||||
|
value: 'major'
|
||||||
|
- id: minor
|
||||||
|
value: 'minor'
|
||||||
|
|
@ -18,6 +18,37 @@ versions:
|
||||||
attribute_map:
|
attribute_map:
|
||||||
container.labels: container.label
|
container.labels: container.label
|
||||||
k8s.pod.labels: k8s.pod.label
|
k8s.pod.labels: k8s.pod.label
|
||||||
|
# https://github.com/open-telemetry/semantic-conventions/pull/330
|
||||||
|
- rename_metrics:
|
||||||
|
process.threads: process.thread.count
|
||||||
|
process.open_file_descriptors: process.open_file_descriptor.count
|
||||||
|
- rename_attributes:
|
||||||
|
attribute_map:
|
||||||
|
state: process.cpu.state
|
||||||
|
apply_to_metrics:
|
||||||
|
- process.cpu.time
|
||||||
|
- process.cpu.utilization
|
||||||
|
- rename_attributes:
|
||||||
|
attribute_map:
|
||||||
|
direction: disk.io.direction
|
||||||
|
apply_to_metrics:
|
||||||
|
- process.disk.io
|
||||||
|
- rename_attributes:
|
||||||
|
attribute_map:
|
||||||
|
type: process.context_switch_type
|
||||||
|
apply_to_metrics:
|
||||||
|
- process.context_switches
|
||||||
|
- rename_attributes:
|
||||||
|
attribute_map:
|
||||||
|
direction: network.io.direction
|
||||||
|
apply_to_metrics:
|
||||||
|
- process.network.io
|
||||||
|
- rename_attributes:
|
||||||
|
attribute_map:
|
||||||
|
type: process.paging.fault_type
|
||||||
|
apply_to_metrics:
|
||||||
|
- process.paging.faults
|
||||||
|
|
||||||
1.24.0:
|
1.24.0:
|
||||||
metrics:
|
metrics:
|
||||||
changes:
|
changes:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue