209 lines
7.6 KiB
YAML
209 lines
7.6 KiB
YAML
groups:
|
|
- id: rpc
|
|
prefix: rpc
|
|
brief: 'This document defines semantic conventions for remote procedure calls.'
|
|
events: [rpc.message]
|
|
attributes:
|
|
- id: system
|
|
requirement_level: required
|
|
brief: 'A string identifying the remoting system. See below for a list of well-known identifiers.'
|
|
type:
|
|
allow_custom_values: true
|
|
members:
|
|
- id: grpc
|
|
value: 'grpc'
|
|
brief: 'gRPC'
|
|
- id: java_rmi
|
|
value: 'java_rmi'
|
|
brief: 'Java RMI'
|
|
- id: dotnet_wcf
|
|
value: 'dotnet_wcf'
|
|
brief: '.NET WCF'
|
|
- id: apache_dubbo
|
|
value: 'apache_dubbo'
|
|
brief: 'Apache Dubbo'
|
|
- id: service
|
|
type: string
|
|
requirement_level: recommended
|
|
brief: 'The full (logical) name of the service being called, including its package name, if applicable.'
|
|
note: >
|
|
This is the logical name of the service from the RPC interface perspective,
|
|
which can be different from the name of any implementing class.
|
|
The `code.namespace` attribute may be used to store the latter
|
|
(despite the attribute name, it may include a class name;
|
|
e.g., class with method actually executing the call on the server side,
|
|
RPC client stub class on the client side).
|
|
examples: "myservice.EchoService"
|
|
- id: method
|
|
type: string
|
|
requirement_level: recommended
|
|
brief: 'The name of the (logical) method being called, must be equal to the $method part in the span name.'
|
|
note: >
|
|
This is the logical name of the method from the RPC interface perspective,
|
|
which can be different from the name of any implementing method/function.
|
|
The `code.function` attribute may be used to store the latter
|
|
(e.g., method actually executing the call on the server side,
|
|
RPC client stub method on the client side).
|
|
examples: "exampleMethod"
|
|
- ref: net.sock.peer.addr
|
|
- ref: net.sock.peer.port
|
|
requirement_level:
|
|
recommended: If different than `net.peer.port` and if `net.sock.peer.addr` is set.
|
|
- ref: net.sock.family
|
|
requirement_level:
|
|
conditionally_required: If and only if `net.sock.peer.addr` is set.
|
|
- ref: net.sock.peer.name
|
|
requirement_level:
|
|
recommended: If different than `net.peer.name` and if `net.sock.peer.addr` is set.
|
|
- ref: net.peer.name
|
|
requirement_level: required
|
|
brief: >
|
|
RPC server [host name](https://grpc.github.io/grpc/core/md_doc_naming.html).
|
|
note: >
|
|
May contain server IP address, DNS name, or local socket name. When host component is an IP address,
|
|
instrumentations SHOULD NOT do a reverse proxy lookup to obtain DNS name and SHOULD set
|
|
`net.peer.name` to the IP address provided in the host component.
|
|
- ref: net.peer.port
|
|
requirement_level:
|
|
conditionally_required: See below
|
|
- ref: net.transport
|
|
requirement_level:
|
|
conditionally_required: See below
|
|
constraints:
|
|
- any_of:
|
|
- net.sock.peer.addr
|
|
- net.peer.name
|
|
- include: network
|
|
|
|
- id: rpc.server
|
|
prefix: rpc
|
|
extends: rpc
|
|
span_kind: server
|
|
brief: 'Semantic Convention for RPC server spans'
|
|
attributes:
|
|
- ref: net.host.name
|
|
- ref: net.sock.host.addr
|
|
- ref: net.sock.host.port
|
|
- ref: net.sock.family
|
|
|
|
- id: rpc.grpc
|
|
prefix: rpc.grpc
|
|
extends: rpc
|
|
brief: 'Tech-specific attributes for gRPC.'
|
|
attributes:
|
|
- id: status_code
|
|
type:
|
|
members:
|
|
- id: ok
|
|
brief: OK
|
|
value: 0
|
|
- id: cancelled
|
|
brief: CANCELLED
|
|
value: 1
|
|
- id: unknown
|
|
brief: UNKNOWN
|
|
value: 2
|
|
- id: invalid_argument
|
|
brief: INVALID_ARGUMENT
|
|
value: 3
|
|
- id: deadline_exceeded
|
|
brief: DEADLINE_EXCEEDED
|
|
value: 4
|
|
- id: not_found
|
|
brief: NOT_FOUND
|
|
value: 5
|
|
- id: already_exists
|
|
brief: ALREADY_EXISTS
|
|
value: 6
|
|
- id: permission_denied
|
|
brief: PERMISSION_DENIED
|
|
value: 7
|
|
- id: resource_exhausted
|
|
brief: RESOURCE_EXHAUSTED
|
|
value: 8
|
|
- id: failed_precondition
|
|
brief: FAILED_PRECONDITION
|
|
value: 9
|
|
- id: aborted
|
|
brief: ABORTED
|
|
value: 10
|
|
- id: out_of_range
|
|
brief: OUT_OF_RANGE
|
|
value: 11
|
|
- id: unimplemented
|
|
brief: UNIMPLEMENTED
|
|
value: 12
|
|
- id: internal
|
|
brief: INTERNAL
|
|
value: 13
|
|
- id: unavailable
|
|
brief: UNAVAILABLE
|
|
value: 14
|
|
- id: data_loss
|
|
brief: DATA_LOSS
|
|
value: 15
|
|
- id: unauthenticated
|
|
brief: UNAUTHENTICATED
|
|
value: 16
|
|
requirement_level: required
|
|
brief: "The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request."
|
|
|
|
- id: rpc.jsonrpc
|
|
prefix: rpc.jsonrpc
|
|
extends: rpc
|
|
brief: 'Tech-specific attributes for [JSON RPC](https://www.jsonrpc.org/).'
|
|
attributes:
|
|
- id: version
|
|
type: string
|
|
requirement_level:
|
|
conditionally_required: If other than the default version (`1.0`)
|
|
brief: "Protocol version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0 does not specify this, the value can be omitted."
|
|
examples: ['2.0', '1.0']
|
|
- id: request_id
|
|
type: string
|
|
brief: >
|
|
`id` property of request or response.
|
|
Since protocol allows id to be int, string, `null` or missing (for notifications),
|
|
value is expected to be cast to string for simplicity.
|
|
Use empty string in case of `null` value. Omit entirely if this is a notification.
|
|
examples: ['10', 'request-7', '']
|
|
- id: error_code
|
|
type: int
|
|
requirement_level:
|
|
conditionally_required: If response is not successful.
|
|
brief: "`error.code` property of response if it is an error response."
|
|
examples: [-32700, 100]
|
|
- id: error_message
|
|
type: string
|
|
brief: "`error.message` property of response if it is an error response."
|
|
examples: ['Parse error', 'User already exists']
|
|
- ref: rpc.method
|
|
requirement_level: required
|
|
note: >
|
|
This is always required for jsonrpc. See the note in the general
|
|
RPC conventions for more information.
|
|
|
|
- id: rpc.message
|
|
prefix: "message" # TODO: Change the prefix to rpc.message?
|
|
type: event
|
|
brief: "RPC received/sent message."
|
|
attributes:
|
|
- id: type
|
|
type:
|
|
members:
|
|
- id: sent
|
|
value: "SENT"
|
|
- id: received
|
|
value: "RECEIVED"
|
|
brief: "Whether this is a received or sent message."
|
|
- id: id
|
|
type: int
|
|
brief: "MUST be calculated as two different counters starting from `1` one for sent messages and one for received message."
|
|
note: "This way we guarantee that the values will be consistent between different implementations."
|
|
- id: compressed_size
|
|
type: int
|
|
brief: "Compressed size of the message in bytes."
|
|
- id: uncompressed_size
|
|
type: int
|
|
brief: "Uncompressed size of the message in bytes."
|