From 777bb6795d358599f8ff916c9141253b28a2313d Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Wed, 19 Apr 2023 16:27:59 -0700 Subject: [PATCH] Convert JVM metrics to yaml and more --- CHANGELOG.md | 2 + .../metrics/process-runtime-jvm-metrics.yaml | 195 ++++++++++ .../runtime-environment-metrics.md | 363 +++++++++++++++--- 3 files changed, 515 insertions(+), 45 deletions(-) create mode 100644 semantic_conventions/metrics/process-runtime-jvm-metrics.yaml diff --git a/CHANGELOG.md b/CHANGELOG.md index f0765df35b7..d9de06b9cad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,8 @@ release. ([#3388](https://github.com/open-telemetry/opentelemetry-specification/pull/3388)) - Change http.server.duration and http.client.duration units to seconds ([#3390](https://github.com/open-telemetry/opentelemetry-specification/pull/3390)) +- Change process.runtime.jvm.gc.duration units to seconds + ([#3413](https://github.com/open-telemetry/opentelemetry-specification/pull/3413)) ### Compatibility diff --git a/semantic_conventions/metrics/process-runtime-jvm-metrics.yaml b/semantic_conventions/metrics/process-runtime-jvm-metrics.yaml new file mode 100644 index 00000000000..ac2356b1ed8 --- /dev/null +++ b/semantic_conventions/metrics/process-runtime-jvm-metrics.yaml @@ -0,0 +1,195 @@ +groups: + - id: attributes.process.runtime.jvm.memory + type: attribute_group + brief: "Describes JVM memory metric attributes." + attributes: + - id: type + type: + allow_custom_values: false + members: + - id: heap + value: 'heap' + brief: 'Heap memory.' + - id: non_heap + value: 'non_heap' + brief: 'Non-heap memory' + requirement_level: required + brief: The type of memory. + examples: ["heap", "non_heap"] + - id: pool + type: string + requirement_level: required + brief: Name of the memory pool. + examples: ["G1 Old Gen", "G1 Eden space", "G1 Survivor Space"] + note: > + Pool names are generally obtained via + [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()). + + - id: metric.process.runtime.jvm.memory.usage + type: metric + metric_name: process.runtime.jvm.memory.usage + extends: attributes.process.runtime.jvm.memory + brief: "Measure of memory used." + instrument: updowncounter + unit: "By" + attributes: + - ref: type + + - id: metric.process.runtime.jvm.memory.init + type: metric + metric_name: process.runtime.jvm.memory.init + extends: attributes.process.runtime.jvm.memory + brief: "Measure of initial memory requested." + instrument: updowncounter + unit: "By" + attributes: + - ref: type + + - id: metric.process.runtime.jvm.memory.committed + type: metric + metric_name: process.runtime.jvm.memory.committed + extends: attributes.process.runtime.jvm.memory + brief: "Measure of memory committed." + instrument: updowncounter + unit: "By" + attributes: + - ref: type + + - id: metric.process.runtime.jvm.memory.limit + type: metric + metric_name: process.runtime.jvm.memory.limit + extends: attributes.process.runtime.jvm.memory + brief: "Measure of max obtainable memory." + instrument: updowncounter + unit: "By" + attributes: + - ref: type + + - id: metric.process.runtime.jvm.memory.usage_after_last_gc + type: metric + metric_name: process.runtime.jvm.memory.usage_after_last_gc + extends: attributes.process.runtime.jvm.memory + brief: "Measure of memory used, as measured after the most recent garbage collection event on this pool." + instrument: updowncounter + unit: "By" + attributes: + - ref: type + + - id: metric.process.runtime.jvm.gc.duration + type: metric + metric_name: process.runtime.jvm.gc.duration + brief: "Duration of JVM garbage collection actions." + instrument: histogram + unit: "s" + attributes: + - id: gc + type: string + requirement_level: required + brief: Name of the garbage collector. + examples: ["G1 Young Generation", "G1 Old Generation"] + note: > + Garbage collector name is generally obtained via + [GarbageCollectionNotificationInfo#getGcName()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcName()). + - id: action + type: string + requirement_level: required + brief: Name of the garbage collector action. + examples: ["end of minor GC", "end of major GC"] + note: > + Garbage collector action is generally obtained via + [GarbageCollectionNotificationInfo#getGcAction()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcAction()). + + - id: metric.process.runtime.jvm.threads.count + type: metric + metric_name: process.runtime.jvm.threads.count + brief: "Number of executing threads." + instrument: updowncounter + unit: "{thread}" + attributes: + - id: daemon + brief: "Whether the thread is daemon or not." + type: boolean + requirement_level: required + + - id: metric.process.runtime.jvm.classes.loaded + type: metric + metric_name: process.runtime.jvm.classes.loaded + brief: "Number of classes loaded since JVM start." + instrument: counter + unit: "{class}" + + - id: metric.process.runtime.jvm.classes.unloaded + type: metric + metric_name: process.runtime.jvm.classes.unloaded + brief: "Number of classes unloaded since JVM start." + instrument: counter + unit: "{class}" + + - id: metric.process.runtime.jvm.classes.current_loaded + type: metric + metric_name: process.runtime.jvm.classes.current_loaded + brief: "Number of classes currently loaded." + instrument: updowncounter + unit: "{class}" + + - id: metric.process.runtime.jvm.cpu.utilization + type: metric + metric_name: process.runtime.jvm.cpu.utilization + brief: "Recent CPU utilization for the process." + note: > + This utilization is not defined as being for the specific interval since last measurement + (unlike `system.cpu.utilization`). + instrument: gauge + unit: "1" + + - id: metric.process.runtime.jvm.system.cpu.utilization + type: metric + metric_name: process.runtime.jvm.system.cpu.utilization + brief: "Recent CPU utilization for the whole system." + note: > + This utilization is not defined as being for the specific interval since last measurement + (unlike `system.cpu.utilization`). + instrument: gauge + unit: "1" + + - id: metric.process.runtime.jvm.system.cpu.load_1m + type: metric + metric_name: process.runtime.jvm.system.cpu.load_1m + brief: "Average CPU load of the whole system for the last minute." + instrument: gauge + unit: "1" + + - id: attributes.process.runtime.jvm.buffer + type: attribute_group + brief: "Describes JVM buffer metric attributes." + attributes: + - ref: pool + brief: Name of the memory pool. + examples: ["TODO"] + note: > + Pool names are generally obtained via + [BufferPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/BufferPoolMXBean.html#getName()). + + - id: metric.process.runtime.jvm.buffer.usage + type: metric + metric_name: process.runtime.jvm.buffer.usage + extends: attributes.process.runtime.jvm.buffer + brief: "Measure of memory used by buffers." + instrument: updowncounter + unit: "By" + + - id: metric.process.runtime.jvm.buffer.limit + type: metric + metric_name: process.runtime.jvm.buffer.limit + extends: attributes.process.runtime.jvm.buffer + brief: "Measure of total memory capacity of buffers." + instrument: updowncounter + unit: "By" + + - id: metric.process.runtime.jvm.buffer.count + type: metric + metric_name: process.runtime.jvm.buffer.count + extends: attributes.process.runtime.jvm.buffer + brief: "Number of buffers in the pool." + instrument: updowncounter + unit: "{buffer}" diff --git a/specification/metrics/semantic_conventions/runtime-environment-metrics.md b/specification/metrics/semantic_conventions/runtime-environment-metrics.md index 84a1eaa4ba2..b76e64c9925 100644 --- a/specification/metrics/semantic_conventions/runtime-environment-metrics.md +++ b/specification/metrics/semantic_conventions/runtime-environment-metrics.md @@ -20,6 +20,22 @@ semantic conventions when instrumenting runtime environments. * [Runtime Environment Specific Metrics - `process.runtime.{environment}.`](#runtime-environment-specific-metrics---processruntimeenvironment) - [Attributes](#attributes) - [JVM Metrics](#jvm-metrics) + * [Metric: `process.runtime.jvm.memory.usage`](#metric-processruntimejvmmemoryusage) + * [Metric: `process.runtime.jvm.memory.init`](#metric-processruntimejvmmemoryinit) + * [Metric: `process.runtime.jvm.memory.committed`](#metric-processruntimejvmmemorycommitted) + * [Metric: `process.runtime.jvm.memory.limit`](#metric-processruntimejvmmemorylimit) + * [Metric: `process.runtime.jvm.memory.usage_after_last_gc`](#metric-processruntimejvmmemoryusage_after_last_gc) + * [Metric: `process.runtime.jvm.gc.duration`](#metric-processruntimejvmgcduration) + * [Metric: `process.runtime.jvm.threads.count`](#metric-processruntimejvmthreadscount) + * [Metric: `process.runtime.jvm.classes.loaded`](#metric-processruntimejvmclassesloaded) + * [Metric: `process.runtime.jvm.classes.unloaded`](#metric-processruntimejvmclassesunloaded) + * [Metric: `process.runtime.jvm.classes.current_loaded`](#metric-processruntimejvmclassescurrent_loaded) + * [Metric: `process.runtime.jvm.cpu.utilization`](#metric-processruntimejvmcpuutilization) + * [Metric: `process.runtime.jvm.system.cpu.utilization`](#metric-processruntimejvmsystemcpuutilization) + * [Metric: `process.runtime.jvm.system.cpu.load_1m`](#metric-processruntimejvmsystemcpuload_1m) + * [Metric: `process.runtime.jvm.buffer.usage`](#metric-processruntimejvmbufferusage) + * [Metric: `process.runtime.jvm.buffer.limit`](#metric-processruntimejvmbufferlimit) + * [Metric: `process.runtime.jvm.buffer.count`](#metric-processruntimejvmbuffercount) @@ -59,48 +75,305 @@ consider, for example pthreads vs green thread implementations. **Description:** Java Virtual Machine (JVM) metrics captured under `process.runtime.jvm.` -All JVM metric attributes are required unless otherwise indicated. - -| Name | Description | Unit | Unit ([UCUM](README.md#instrument-units)) | Instrument Type ([*](README.md#instrument-types)) | Value Type | Attribute Key | Attribute Values | -|------------------------------------------------|-------------------------------------------------------------------------------------------------|--------------|-------------------------------------------|---------------------------------------------------|------------|---------------|-----------------------| -| process.runtime.jvm.memory.usage | Measure of memory used | Bytes | `By` | UpDownCounter | Int64 | type | `"heap"`, `"non_heap"` | -| | | | | | | pool | Name of pool [1] | -| process.runtime.jvm.memory.init | Measure of initial memory requested | Bytes | `By` | UpDownCounter | Int64 | type | `"heap"`, `"non_heap"` | -| | | | | | | pool | Name of pool [1] | -| process.runtime.jvm.memory.committed | Measure of memory committed | Bytes | `By` | UpDownCounter | Int64 | type | `"heap"`, `"non_heap"` | -| | | | | | | pool | Name of pool [1] | -| process.runtime.jvm.memory.limit | Measure of max obtainable memory | Bytes | `By` | UpDownCounter | Int64 | type | `"heap"`, `"non_heap"` | -| | | | | | | pool | Name of pool [1] | -| process.runtime.jvm.memory.usage_after_last_gc | Measure of memory used, as measured after the most recent garbage collection event on this pool | Bytes | `By` | UpDownCounter | Int64 | type | `"heap"`, `"non_heap"` | -| | | | | | | pool | Name of pool [1] | -| process.runtime.jvm.threads.count | Number of executing threads | threads | `{thread}` | UpDownCounter | Int64 | daemon | `true`, `false` | -| process.runtime.jvm.classes.loaded | Number of classes loaded since JVM start | classes | `{class}` | Counter | Int64 | | | -| process.runtime.jvm.classes.unloaded | Number of classes unloaded since JVM start | classes | `{class}` | Counter | Int64 | | | -| process.runtime.jvm.classes.current_loaded | Number of classes currently loaded | classes | `{class}` | UpDownCounter | Int64 | | | -| process.runtime.jvm.cpu.utilization | Recent CPU utilization for the process [2] | 1 | 1 | Asynchronous Gauge | Double | | | -| process.runtime.jvm.system.cpu.utilization | Recent CPU utilization for the whole system [2] | 1 | 1 | Asynchronous Gauge | Double | | | -| process.runtime.jvm.system.cpu.load_1m | Average CPU load of the whole system for the last minute | 1 | 1 | Asynchronous Gauge | Double | | | -| process.runtime.jvm.buffer.usage | Measure of memory used by buffers | Bytes | `By` | UpDownCounter | Int64 | pool | Name of pool[3] | -| process.runtime.jvm.buffer.limit | Measure of total memory capacity of buffers | Bytes | `By` | UpDownCounter | Int64 | pool | Name of pool[3] | -| process.runtime.jvm.buffer.count | Number of buffers in the pool | buffers | `{buffer}` | UpDownCounter | Int64 | pool | Name of pool[3] | -| process.runtime.jvm.gc.duration | Duration of JVM garbage collection actions | Milliseconds | `ms` | Histogram | Int64 | gc | Name of gc[4] | -| | | | | | | action | The gc action[4] | - -**[1]**: Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()). -Examples include `G1 Old Gen`, `G1 Eden space`, `G1 Survivor Space`, `Metaspace`, etc. - -**[2]**: These utilizations are not defined as being for the specific interval since last measurement (unlike `system.cpu.utilization`). - -**[3]**: Pool names are generally obtained via [BufferPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/BufferPoolMXBean.html#getName()). - -**[4]**: Garbage collector name and action are generally obtained via [GarbageCollectionNotificationInfo#getGcName()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcName()) and [GarbageCollectionNotificationInfo#getGcAction()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcAction()) respectively. The following is an incomplete list of names and actions for several popular garbage collectors: - -* G1 Garbage Collector - * Names: `G1 Young Generation`, `G1 Old Generation` - * Actions: `end of minor GC`, `end of major GC` -* Shenandoah Garbage Collector - * Names: `Shenandoah Cycles`, `Shenandoah Pauses` - * Actions: `end of GC cycle`, `end of GC pause` -* Z Garbage Collector - * Names: `ZGC Cycles`, `ZGC Pauses` - * Actions: `end of GC cycle`, `end of GC pause` +### Metric: `process.runtime.jvm.memory.usage` + +This metric is [recommended](../metric-requirement-level.md#recommended). + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `process.runtime.jvm.memory.usage` | UpDownCounter | `By` | Measure of memory used. | + + + +| Attribute | Type | Description | Examples | Requirement Level | +|---|---|---|---|---| +| `pool` | string | Name of the memory pool. [1] | `G1 Old Gen`; `G1 Eden space`; `G1 Survivor Space` | Required | +| `type` | string | The type of memory. | `heap`; `non_heap` | Required | + +**[1]:** Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()). + +`type` MUST be one of the following: + +| Value | Description | +|---|---| +| `heap` | Heap memory. | +| `non_heap` | Non-heap memory | + + +### Metric: `process.runtime.jvm.memory.init` + +This metric is [recommended](../metric-requirement-level.md#recommended). + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `process.runtime.jvm.memory.init` | UpDownCounter | `By` | Measure of initial memory requested. | + + + +| Attribute | Type | Description | Examples | Requirement Level | +|---|---|---|---|---| +| `pool` | string | Name of the memory pool. [1] | `G1 Old Gen`; `G1 Eden space`; `G1 Survivor Space` | Required | +| `type` | string | The type of memory. | `heap`; `non_heap` | Required | + +**[1]:** Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()). + +`type` MUST be one of the following: + +| Value | Description | +|---|---| +| `heap` | Heap memory. | +| `non_heap` | Non-heap memory | + + +### Metric: `process.runtime.jvm.memory.committed` + +This metric is [recommended](../metric-requirement-level.md#recommended). + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `process.runtime.jvm.memory.committed` | UpDownCounter | `By` | Measure of memory committed. | + + + +| Attribute | Type | Description | Examples | Requirement Level | +|---|---|---|---|---| +| `pool` | string | Name of the memory pool. [1] | `G1 Old Gen`; `G1 Eden space`; `G1 Survivor Space` | Required | +| `type` | string | The type of memory. | `heap`; `non_heap` | Required | + +**[1]:** Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()). + +`type` MUST be one of the following: + +| Value | Description | +|---|---| +| `heap` | Heap memory. | +| `non_heap` | Non-heap memory | + + +### Metric: `process.runtime.jvm.memory.limit` + +This metric is [recommended](../metric-requirement-level.md#recommended). + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `process.runtime.jvm.memory.limit` | UpDownCounter | `By` | Measure of max obtainable memory. | + + + +| Attribute | Type | Description | Examples | Requirement Level | +|---|---|---|---|---| +| `pool` | string | Name of the memory pool. [1] | `G1 Old Gen`; `G1 Eden space`; `G1 Survivor Space` | Required | +| `type` | string | The type of memory. | `heap`; `non_heap` | Required | + +**[1]:** Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()). + +`type` MUST be one of the following: + +| Value | Description | +|---|---| +| `heap` | Heap memory. | +| `non_heap` | Non-heap memory | + + +### Metric: `process.runtime.jvm.memory.usage_after_last_gc` + +This metric is [recommended](../metric-requirement-level.md#recommended). + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `process.runtime.jvm.memory.usage_after_last_gc` | UpDownCounter | `By` | Measure of memory used, as measured after the most recent garbage collection event on this pool. | + + + +| Attribute | Type | Description | Examples | Requirement Level | +|---|---|---|---|---| +| `pool` | string | Name of the memory pool. [1] | `G1 Old Gen`; `G1 Eden space`; `G1 Survivor Space` | Required | +| `type` | string | The type of memory. | `heap`; `non_heap` | Required | + +**[1]:** Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()). + +`type` MUST be one of the following: + +| Value | Description | +|---|---| +| `heap` | Heap memory. | +| `non_heap` | Non-heap memory | + + +### Metric: `process.runtime.jvm.gc.duration` + +This metric is [recommended](../metric-requirement-level.md#recommended). + +This metric SHOULD be specified with +[`ExplicitBucketBoundaries`](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/api.md#instrument-advice) +of `[ 0, 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `process.runtime.jvm.gc.duration` | Histogram | `s` | Duration of JVM garbage collection actions. | + + + +| Attribute | Type | Description | Examples | Requirement Level | +|---|---|---|---|---| +| `gc` | string | Name of the garbage collector. [1] | `G1 Young Generation`; `G1 Old Generation` | Required | +| `action` | string | Name of the garbage collector action. [2] | `end of minor GC`; `end of major GC` | Required | + +**[1]:** Garbage collector name is generally obtained via [GarbageCollectionNotificationInfo#getGcName()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcName()). + +**[2]:** Garbage collector action is generally obtained via [GarbageCollectionNotificationInfo#getGcAction()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcAction()). + + +### Metric: `process.runtime.jvm.threads.count` + +This metric is [recommended](../metric-requirement-level.md#recommended). + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `process.runtime.jvm.threads.count` | UpDownCounter | `{thread}` | Number of executing threads. | + + + +| Attribute | Type | Description | Examples | Requirement Level | +|---|---|---|---|---| +| `daemon` | boolean | Whether the thread is daemon or not. | | Required | + + +### Metric: `process.runtime.jvm.classes.loaded` + +This metric is [recommended](../metric-requirement-level.md#recommended). + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `process.runtime.jvm.classes.loaded` | Counter | `{class}` | Number of classes loaded since JVM start. | + + + + + +### Metric: `process.runtime.jvm.classes.unloaded` + +This metric is [recommended](../metric-requirement-level.md#recommended). + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `process.runtime.jvm.classes.unloaded` | Counter | `{class}` | Number of classes unloaded since JVM start. | + + + + + +### Metric: `process.runtime.jvm.classes.current_loaded` + +This metric is [recommended](../metric-requirement-level.md#recommended). + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `process.runtime.jvm.classes.current_loaded` | UpDownCounter | `{class}` | Number of classes currently loaded. | + + + + + +### Metric: `process.runtime.jvm.cpu.utilization` + +This metric is [recommended](../metric-requirement-level.md#recommended). + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `process.runtime.jvm.cpu.utilization` | Gauge | `1` | Recent CPU utilization for the process. | + + + + + +### Metric: `process.runtime.jvm.system.cpu.utilization` + +This metric is [recommended](../metric-requirement-level.md#recommended). + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `process.runtime.jvm.system.cpu.utilization` | Gauge | `1` | Recent CPU utilization for the whole system. | + + + + + +### Metric: `process.runtime.jvm.system.cpu.load_1m` + +This metric is [recommended](../metric-requirement-level.md#recommended). + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `process.runtime.jvm.system.cpu.load_1m` | Gauge | `1` | Average CPU load of the whole system for the last minute. | + + + + + +### Metric: `process.runtime.jvm.buffer.usage` + +This metric is [recommended](../metric-requirement-level.md#recommended). + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `process.runtime.jvm.buffer.usage` | UpDownCounter | `By` | Measure of memory used by buffers. | + + + +| Attribute | Type | Description | Examples | Requirement Level | +|---|---|---|---|---| +| `pool` | string | Name of the memory pool. [1] | `TODO` | Required | + +**[1]:** Pool names are generally obtained via [BufferPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/BufferPoolMXBean.html#getName()). + + +### Metric: `process.runtime.jvm.buffer.limit` + +This metric is [recommended](../metric-requirement-level.md#recommended). + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `process.runtime.jvm.buffer.limit` | UpDownCounter | `By` | Measure of total memory capacity of buffers. | + + + +| Attribute | Type | Description | Examples | Requirement Level | +|---|---|---|---|---| +| `pool` | string | Name of the memory pool. [1] | `TODO` | Required | + +**[1]:** Pool names are generally obtained via [BufferPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/BufferPoolMXBean.html#getName()). + + +### Metric: `process.runtime.jvm.buffer.count` + +This metric is [recommended](../metric-requirement-level.md#recommended). + + +| Name | Instrument Type | Unit (UCUM) | Description | +| -------- | --------------- | ----------- | -------------- | +| `process.runtime.jvm.buffer.count` | UpDownCounter | `{buffer}` | Number of buffers in the pool. | + + + +| Attribute | Type | Description | Examples | Requirement Level | +|---|---|---|---|---| +| `pool` | string | Name of the memory pool. [1] | `TODO` | Required | + +**[1]:** Pool names are generally obtained via [BufferPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/BufferPoolMXBean.html#getName()). +