Generate RPC metrics from YAML (#93)
This commit is contained in:
parent
6deba959d0
commit
b89a033767
|
|
@ -18,7 +18,17 @@ metrics can be filtered for finer grain analysis.
|
||||||
|
|
||||||
- [Metric instruments](#metric-instruments)
|
- [Metric instruments](#metric-instruments)
|
||||||
* [RPC Server](#rpc-server)
|
* [RPC Server](#rpc-server)
|
||||||
|
+ [Metric: `rpc.server.duration`](#metric-rpcserverduration)
|
||||||
|
+ [Metric: `rpc.server.request.size`](#metric-rpcserverrequestsize)
|
||||||
|
+ [Metric: `rpc.server.response.size`](#metric-rpcserverresponsesize)
|
||||||
|
+ [Metric: `rpc.server.requests_per_rpc`](#metric-rpcserverrequests_per_rpc)
|
||||||
|
+ [Metric: `rpc.server.responses_per_rpc`](#metric-rpcserverresponses_per_rpc)
|
||||||
* [RPC Client](#rpc-client)
|
* [RPC Client](#rpc-client)
|
||||||
|
+ [Metric: `rpc.client.duration`](#metric-rpcclientduration)
|
||||||
|
+ [Metric: `rpc.client.request.size`](#metric-rpcclientrequestsize)
|
||||||
|
+ [Metric: `rpc.client.response.size`](#metric-rpcclientresponsesize)
|
||||||
|
+ [Metric: `rpc.client.requests_per_rpc`](#metric-rpcclientrequests_per_rpc)
|
||||||
|
+ [Metric: `rpc.client.responses_per_rpc`](#metric-rpcclientresponses_per_rpc)
|
||||||
- [Attributes](#attributes)
|
- [Attributes](#attributes)
|
||||||
* [Service name](#service-name)
|
* [Service name](#service-name)
|
||||||
- [Semantic Conventions for specific RPC technologies](#semantic-conventions-for-specific-rpc-technologies)
|
- [Semantic Conventions for specific RPC technologies](#semantic-conventions-for-specific-rpc-technologies)
|
||||||
|
|
@ -59,28 +69,118 @@ MUST be of the specified type and units.
|
||||||
|
|
||||||
### RPC Server
|
### RPC Server
|
||||||
|
|
||||||
Below is a table of RPC server metric instruments.
|
Below is a list of RPC server metric instruments.
|
||||||
|
|
||||||
| Name | Instrument Type ([*](/docs/general/metrics.md#instrument-types)) | Unit | Unit ([UCUM](/docs/general/metrics.md#instrument-units)) | Description | Status | Streaming |
|
#### Metric: `rpc.server.duration`
|
||||||
|------|------------|------|-------------------------------------------|-------------|--------|-----------|
|
|
||||||
| `rpc.server.duration` | Histogram | milliseconds | `ms` | measures duration of inbound RPC | Recommended | N/A. While streaming RPCs may record this metric as start-of-batch to end-of-batch, it's hard to interpret in practice. |
|
This metric is [recommended][MetricRecommended].
|
||||||
| `rpc.server.request.size` | Histogram | Bytes | `By` | measures size of RPC request messages (uncompressed) | Optional | Recorded per message in a streaming batch |
|
|
||||||
| `rpc.server.response.size` | Histogram | Bytes | `By` | measures size of RPC response messages (uncompressed) | Optional | Recorded per response in a streaming batch |
|
<!-- semconv metric.rpc.server.duration(metric_table) -->
|
||||||
| `rpc.server.requests_per_rpc` | Histogram | count | `{count}` | measures the number of messages received per RPC. Should be 1 for all non-streaming RPCs | Optional | Required |
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
| `rpc.server.responses_per_rpc` | Histogram | count | `{count}` | measures the number of messages sent per RPC. Should be 1 for all non-streaming RPCs | Optional | Required |
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `rpc.server.duration` | Histogram | `ms` | Measures the duration of inbound RPC. **Streaming**: N/A. [1] |
|
||||||
|
|
||||||
|
**[1]:** While streaming RPCs may record this metric as start-of-batch
|
||||||
|
to end-of-batch, it's hard to interpret in practice.
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
#### Metric: `rpc.server.request.size`
|
||||||
|
|
||||||
|
This metric is [recommended][MetricRecommended].
|
||||||
|
|
||||||
|
<!-- semconv metric.rpc.server.request.size(metric_table) -->
|
||||||
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `rpc.server.request.size` | Histogram | `By` | Measures the size of RPC request messages (uncompressed). **Streaming**: Recorded per message in a streaming batch |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
#### Metric: `rpc.server.response.size`
|
||||||
|
|
||||||
|
This metric is [recommended][MetricRecommended].
|
||||||
|
|
||||||
|
<!-- semconv metric.rpc.server.response.size(metric_table) -->
|
||||||
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `rpc.server.response.size` | Histogram | `By` | Measures the size of RPC response messages (uncompressed). **Streaming**: Recorded per response in a streaming batch |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
#### Metric: `rpc.server.requests_per_rpc`
|
||||||
|
|
||||||
|
This metric is [recommended][MetricRecommended].
|
||||||
|
|
||||||
|
<!-- semconv metric.rpc.server.requests_per_rpc(metric_table) -->
|
||||||
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `rpc.server.requests_per_rpc` | Histogram | `{count}` | Measures the number of messages received per RPC. Should be 1 for all non-streaming RPCs. **Streaming**: This metric is required for server and client streaming RPCs |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
#### Metric: `rpc.server.responses_per_rpc`
|
||||||
|
|
||||||
|
This metric is [recommended][MetricRecommended].
|
||||||
|
|
||||||
|
<!-- semconv metric.rpc.server.responses_per_rpc(metric_table) -->
|
||||||
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `rpc.server.responses_per_rpc` | Histogram | `{count}` | Measures the number of messages sent per RPC. Should be 1 for all non-streaming RPCs. **Streaming**: This metric is required for server and client streaming RPCs |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
### RPC Client
|
### RPC Client
|
||||||
|
|
||||||
Below is a table of RPC client metric instruments. These apply to traditional
|
Below is a list of RPC client metric instruments.
|
||||||
RPC usage, not streaming RPCs.
|
These apply to traditional RPC usage, not streaming RPCs.
|
||||||
|
|
||||||
| Name | Instrument Type ([*](/docs/general/metrics.md#instrument-types)) | Unit | Unit ([UCUM](/docs/general/metrics.md#instrument-units)) | Description | Status | Streaming |
|
#### Metric: `rpc.client.duration`
|
||||||
|------|------------|------|-------------------------------------------|-------------|--------|-----------|
|
|
||||||
| `rpc.client.duration` | Histogram | milliseconds | `ms` | measures duration of outbound RPC | Recommended | N/A. While streaming RPCs may record this metric as start-of-batch to end-of-batch, it's hard to interpret in practice. |
|
This metric is [recommended][MetricRecommended].
|
||||||
| `rpc.client.request.size` | Histogram | Bytes | `By` | measures size of RPC request messages (uncompressed) | Optional | Recorded per message in a streaming batch |
|
|
||||||
| `rpc.client.response.size` | Histogram | Bytes | `By` | measures size of RPC response messages (uncompressed) | Optional | Recorded per message in a streaming batch |
|
<!-- semconv metric.rpc.client.duration(metric_table) -->
|
||||||
| `rpc.client.requests_per_rpc` | Histogram | count | `{count}` | measures the number of messages received per RPC. Should be 1 for all non-streaming RPCs | Optional | Required |
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
| `rpc.client.responses_per_rpc` | Histogram | count | `{count}` | measures the number of messages sent per RPC. Should be 1 for all non-streaming RPCs | Optional | Required |
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `rpc.client.duration` | Histogram | `ms` | Measures the duration of outbound RPC **Streaming**: N/A. [1] |
|
||||||
|
|
||||||
|
**[1]:** While streaming RPCs may record this metric as start-of-batch
|
||||||
|
to end-of-batch, it's hard to interpret in practice.
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
#### Metric: `rpc.client.request.size`
|
||||||
|
|
||||||
|
This metric is [recommended][MetricRecommended].
|
||||||
|
|
||||||
|
<!-- semconv metric.rpc.client.request.size(metric_table) -->
|
||||||
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `rpc.client.request.size` | Histogram | `By` | Measures the size of RPC request messages (uncompressed). **Streaming**: Recorded per message in a streaming batch |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
#### Metric: `rpc.client.response.size`
|
||||||
|
|
||||||
|
This metric is [recommended][MetricRecommended].
|
||||||
|
|
||||||
|
<!-- semconv metric.rpc.client.response.size(metric_table) -->
|
||||||
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `rpc.client.response.size` | Histogram | `By` | Measures the size of RPC response messages (uncompressed). **Streaming**: Recorded per response in a streaming batch |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
#### Metric: `rpc.client.requests_per_rpc`
|
||||||
|
|
||||||
|
This metric is [recommended][MetricRecommended].
|
||||||
|
|
||||||
|
<!-- semconv metric.rpc.client.requests_per_rpc(metric_table) -->
|
||||||
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `rpc.client.requests_per_rpc` | Histogram | `{count}` | Measures the number of messages received per RPC. Should be 1 for all non-streaming RPCs. **Streaming**: This metric is required for server and client streaming RPCs |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
|
#### Metric: `rpc.client.responses_per_rpc`
|
||||||
|
|
||||||
|
This metric is [recommended][MetricRecommended].
|
||||||
|
|
||||||
|
<!-- semconv metric.rpc.client.responses_per_rpc(metric_table) -->
|
||||||
|
| Name | Instrument Type | Unit (UCUM) | Description |
|
||||||
|
| -------- | --------------- | ----------- | -------------- |
|
||||||
|
| `rpc.client.responses_per_rpc` | Histogram | `{count}` | Measures the number of messages sent per RPC. Should be 1 for all non-streaming RPCs. **Streaming**: This metric is required for server and client streaming RPCs |
|
||||||
|
<!-- endsemconv -->
|
||||||
|
|
||||||
## Attributes
|
## Attributes
|
||||||
|
|
||||||
|
|
@ -146,4 +246,5 @@ More specific Semantic Conventions are defined for the following RPC technologie
|
||||||
* [gRPC](grpc.md): Semantic Conventions for *gRPC*.
|
* [gRPC](grpc.md): Semantic Conventions for *gRPC*.
|
||||||
* [JSON-RPC](json-rpc.md): Semantic Conventions for *JSON-RPC*.
|
* [JSON-RPC](json-rpc.md): Semantic Conventions for *JSON-RPC*.
|
||||||
|
|
||||||
[DocumentStatus]: https://github.com/open-telemetry/opentelemetry-specification/tree/v1.22.0/specification/document-status.md
|
[DocumentStatus]: https://github.com/open-telemetry/opentelemetry-specification/blob/v1.22.0/specification/document-status.md
|
||||||
|
[MetricRecommended]: https://github.com/open-telemetry/opentelemetry-specification/blob/v1.22.0/specification/metrics/metric-requirement-level.md#recommended
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,115 @@
|
||||||
|
groups:
|
||||||
|
# TODO: Should we list the attributes on each metric
|
||||||
|
# OR leave a single table like it is today? Since all attributes are applied
|
||||||
|
# to all metrics, the repetition of them bloats the page
|
||||||
|
- id: attributes.metrics.rpc
|
||||||
|
type: attribute_group
|
||||||
|
brief: "Describes RPC metric attributes."
|
||||||
|
attributes:
|
||||||
|
- ref: rpc.system
|
||||||
|
- ref: rpc.service
|
||||||
|
- ref: rpc.method
|
||||||
|
- ref: network.transport
|
||||||
|
- ref: network.type
|
||||||
|
- ref: server.address
|
||||||
|
- ref: server.port
|
||||||
|
- ref: server.socket.address
|
||||||
|
- ref: server.socket.port
|
||||||
|
|
||||||
|
# RPC Server metrics
|
||||||
|
- id: metric.rpc.server.duration
|
||||||
|
type: metric
|
||||||
|
metric_name: rpc.server.duration
|
||||||
|
brief: >
|
||||||
|
Measures the duration of inbound RPC.
|
||||||
|
**Streaming**: N/A.
|
||||||
|
instrument: histogram
|
||||||
|
unit: "ms"
|
||||||
|
note: |
|
||||||
|
While streaming RPCs may record this metric as start-of-batch
|
||||||
|
to end-of-batch, it's hard to interpret in practice.
|
||||||
|
|
||||||
|
- id: metric.rpc.server.request.size
|
||||||
|
type: metric
|
||||||
|
metric_name: rpc.server.request.size
|
||||||
|
brief: >
|
||||||
|
Measures the size of RPC request messages (uncompressed).
|
||||||
|
**Streaming**: Recorded per message in a streaming batch
|
||||||
|
instrument: histogram
|
||||||
|
unit: "By"
|
||||||
|
|
||||||
|
- id: metric.rpc.server.response.size
|
||||||
|
type: metric
|
||||||
|
metric_name: rpc.server.response.size
|
||||||
|
brief: >
|
||||||
|
Measures the size of RPC response messages (uncompressed).
|
||||||
|
**Streaming**: Recorded per response in a streaming batch
|
||||||
|
instrument: histogram
|
||||||
|
unit: "By"
|
||||||
|
|
||||||
|
- id: metric.rpc.server.requests_per_rpc
|
||||||
|
type: metric
|
||||||
|
metric_name: rpc.server.requests_per_rpc
|
||||||
|
brief: >
|
||||||
|
Measures the number of messages received per RPC. Should be 1 for all non-streaming RPCs.
|
||||||
|
**Streaming**: This metric is required for server and client streaming RPCs
|
||||||
|
instrument: histogram
|
||||||
|
unit: "{count}"
|
||||||
|
|
||||||
|
- id: metric.rpc.server.responses_per_rpc
|
||||||
|
type: metric
|
||||||
|
metric_name: rpc.server.responses_per_rpc
|
||||||
|
brief: >
|
||||||
|
Measures the number of messages sent per RPC. Should be 1 for all non-streaming RPCs.
|
||||||
|
**Streaming**: This metric is required for server and client streaming RPCs
|
||||||
|
instrument: histogram
|
||||||
|
unit: "{count}"
|
||||||
|
|
||||||
|
# RPC Client metrics
|
||||||
|
- id: metric.rpc.client.duration
|
||||||
|
type: metric
|
||||||
|
metric_name: rpc.client.duration
|
||||||
|
brief: >
|
||||||
|
Measures the duration of outbound RPC
|
||||||
|
**Streaming**: N/A.
|
||||||
|
instrument: histogram
|
||||||
|
unit: "ms"
|
||||||
|
note: |
|
||||||
|
While streaming RPCs may record this metric as start-of-batch
|
||||||
|
to end-of-batch, it's hard to interpret in practice.
|
||||||
|
|
||||||
|
- id: metric.rpc.client.request.size
|
||||||
|
type: metric
|
||||||
|
metric_name: rpc.client.request.size
|
||||||
|
brief: >
|
||||||
|
Measures the size of RPC request messages (uncompressed).
|
||||||
|
**Streaming**: Recorded per message in a streaming batch
|
||||||
|
instrument: histogram
|
||||||
|
unit: "By"
|
||||||
|
|
||||||
|
- id: metric.rpc.client.response.size
|
||||||
|
type: metric
|
||||||
|
metric_name: rpc.client.response.size
|
||||||
|
brief: >
|
||||||
|
Measures the size of RPC response messages (uncompressed).
|
||||||
|
**Streaming**: Recorded per response in a streaming batch
|
||||||
|
instrument: histogram
|
||||||
|
unit: "By"
|
||||||
|
|
||||||
|
- id: metric.rpc.client.requests_per_rpc
|
||||||
|
type: metric
|
||||||
|
metric_name: rpc.client.requests_per_rpc
|
||||||
|
brief: >
|
||||||
|
Measures the number of messages received per RPC. Should be 1 for all non-streaming RPCs.
|
||||||
|
**Streaming**: This metric is required for server and client streaming RPCs
|
||||||
|
instrument: histogram
|
||||||
|
unit: "{count}"
|
||||||
|
|
||||||
|
- id: metric.rpc.client.responses_per_rpc
|
||||||
|
type: metric
|
||||||
|
metric_name: rpc.client.responses_per_rpc
|
||||||
|
brief: >
|
||||||
|
Measures the number of messages sent per RPC. Should be 1 for all non-streaming RPCs.
|
||||||
|
**Streaming**: This metric is required for server and client streaming RPCs
|
||||||
|
instrument: histogram
|
||||||
|
unit: "{count}"
|
||||||
Loading…
Reference in New Issue