RPC 指标的语义约定
状态: 开发中
本节描述的约定是 RPC 特定的。当发生 RPC 操作时,关于这些操作的测量值会被记录到仪器中。测量值会被聚合并导出为指标,从而提供对这些操作的洞察。通过将 RPC 属性作为测量值的属性,可以过滤指标以进行更精细粒度的分析。
警告 现有使用 v1.37.0 本文档(或之前版本)的 RPC 仪器化
- 不应在现有主版本中更改其默认发出的 RPC 约定版本。约定包括(但不限于)属性、指标和 Span 名称以及度量单位。
- 应在其现有主版本中引入一个环境变量
OTEL_SEMCONV_STABILITY_OPT_IN,该变量是以逗号分隔的类别特定值列表(例如,http、databases、rpc)。值列表包括
rpc- 发出稳定的 RPC 约定,并停止发出仪器化先前发出的实验性 RPC 约定。rpc/dup- 同时发出实验性和稳定的 RPC 约定,从而允许对稳定语义约定进行分阶段推出。- 默认行为(在没有这些值的情况下)是继续发出仪器化先前发出的旧实验性 RPC 约定的任何版本。
- 注意:如果同时存在
rpc和rpc/dup这两个值,rpc/dup的优先级高于rpc。- SHOULD 在开始发出这两套约定后,至少维护其现有主版本(至少包括安全补丁)六个月。
- 可以在其下一个主版本中删除环境变量,并且仅发出稳定的 RPC 约定。
指标仪器
以下指标仪器必须用于描述 RPC 操作。它们必须是指定的类型和单位。
注意:RPC 服务器和客户端指标被分开,以便在客户端/服务器边界之间进行关联,例如,通过调整 RPC 方法的延迟来确定客户端看到的延迟是否由服务器引起。
RPC 服务器
以下是 RPC 服务器指标仪器列表。
指标: rpc.server.duration
此指标是推荐的。
| 名称 | Instrument Type | Unit (UCUM) | 描述 | Stability | 实体关联 |
|---|---|---|---|---|---|
rpc.server.duration | Histogram | 毫秒 | 测量传入 RPC 的持续时间。[1] |
[1]: 流式 RPC 可能将此指标记录为从批次开始到批次结束,但这在实践中很难解释。
流式传输:不适用。
Attributes
| 键 | Stability | 需求级别 | Value Type | 描述 | Example Values |
|---|---|---|---|---|---|
rpc.system | 必需 | 字符串 | 标识远程系统的字符串。有关知名标识符列表,请参阅下文。 | grpc; java_rmi; dotnet_wcf | |
error.type | 有条件必需 仅在操作失败时。 | 字符串 | 描述操作最终结束的一类错误。[1] | timeout;java.net.UnknownHostException;server_certificate_invalid;500 | |
network.protocol.name | 推荐 | 字符串 | OSI 应用层或非 OSI 等效层。[2] | http | |
network.protocol.version | 推荐 | 字符串 | 用于网络通信的协议的实际版本。[3] | 1.1; 2 | |
network.transport | 推荐 | 字符串 | OSI 传输层或进程间通信方法。[4] | tcp;udp | |
rpc.method | 推荐 | 字符串 | 这是从 RPC 接口角度来看的逻辑方法名称。 | exampleMethod | |
rpc.service | 推荐 | 字符串 | 被调用的服务的完整(逻辑)名称,包括其包名称(如果适用)。 | myservice.EchoService | |
server.address | 选择加入 | 字符串 | 服务器域名(如果无需反向 DNS 查找即可获得);否则,是 IP 地址或 Unix 域套接字名称。 | example.com;10.1.2.80;/tmp/my.sock | |
server.port | 选择加入 | int | 服务器端口号。 | 80; 8080; 443 |
[1] error.type: error.type 应该可预测,并且应该具有低基数性。
当 error.type 设置为某个类型(例如,异常类型)时,应该使用该工件内识别类型的规范类名。
Instrumentations 应该记录它们报告的错误列表。
一个仪器库内的 error.type 基数性应该低。从多个仪器库和应用程序聚合数据的遥测消费者,在没有额外过滤时,应准备好 error.type 在查询时具有高基数性。
如果操作已成功完成,Instrumentations 不应设置 error.type。
如果特定域定义了自己的一组错误标识符(例如 HTTP 或 gRPC 状态码),则建议
- 使用特定于域的属性
- 设置
error.type以捕获所有错误,无论它们是否包含在特定于域的集合中。
[2] network.protocol.name: 值应规范化为小写。
[3] network.protocol.version: 如果协议版本受协商(例如,使用 ALPN),则此属性应设置为协商后的版本。如果实际协议版本未知,则此属性不应设置。
[4] network.transport: 值应规范化为小写。
在设置端口号时,应始终考虑设置传输协议,因为没有传输协议的端口号是模糊的。例如,不同的进程可能正在监听 TCP 端口 12345 和 UDP 端口 12345。
error.type 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以使用自定义值。
| 值 | 描述 | Stability |
|---|---|---|
_OTHER | 当检测不到自定义值时使用的回退错误值。 |
network.transport 具有以下已知值列表。如果其中一个适用,则必须使用相应的_值_;否则,可以_使用_自定义值。
| 值 | 描述 | Stability |
|---|---|---|
pipe | 命名或匿名管道。 | |
quic | QUIC | |
tcp | TCP | |
udp | UDP | |
unix | Unix 域套接字 |
rpc.system 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以改用自定义值。
| 值 | 描述 | Stability |
|---|---|---|
apache_dubbo | Apache Dubbo | |
connect_rpc | Connect RPC | |
dotnet_wcf | .NET WCF | |
grpc | gRPC | |
java_rmi | Java RMI | |
jsonrpc | JSON-RPC | |
onc_rpc | ONC RPC (Sun RPC) |
指标: rpc.server.request.size
此指标是推荐的。
| 名称 | Instrument Type | Unit (UCUM) | 描述 | Stability | 实体关联 |
|---|---|---|---|---|---|
rpc.server.request.size | Histogram | 每个调用的最大内存使用量的分布。 | 测量 RPC 请求消息的大小(未压缩)。[1] |
[1]: 流式传输:为流式批处理中的每条消息记录
Attributes
| 键 | Stability | 需求级别 | Value Type | 描述 | Example Values |
|---|---|---|---|---|---|
rpc.system | 必需 | 字符串 | 标识远程系统的字符串。有关知名标识符列表,请参阅下文。 | grpc; java_rmi; dotnet_wcf | |
error.type | 有条件必需 仅在操作失败时。 | 字符串 | 描述操作最终结束的一类错误。[1] | timeout;java.net.UnknownHostException;server_certificate_invalid;500 | |
network.protocol.name | 推荐 | 字符串 | OSI 应用层或非 OSI 等效层。[2] | http | |
network.protocol.version | 推荐 | 字符串 | 用于网络通信的协议的实际版本。[3] | 1.1; 2 | |
network.transport | 推荐 | 字符串 | OSI 传输层或进程间通信方法。[4] | tcp;udp | |
rpc.method | 推荐 | 字符串 | 这是从 RPC 接口角度来看的逻辑方法名称。 | exampleMethod | |
rpc.service | 推荐 | 字符串 | 被调用的服务的完整(逻辑)名称,包括其包名称(如果适用)。 | myservice.EchoService | |
server.address | 选择加入 | 字符串 | 服务器域名(如果无需反向 DNS 查找即可获得);否则,是 IP 地址或 Unix 域套接字名称。 | example.com;10.1.2.80;/tmp/my.sock | |
server.port | 选择加入 | int | 服务器端口号。 | 80; 8080; 443 |
[1] error.type: error.type 应该可预测,并且应该具有低基数性。
当 error.type 设置为某个类型(例如,异常类型)时,应该使用该工件内识别类型的规范类名。
Instrumentations 应该记录它们报告的错误列表。
一个仪器库内的 error.type 基数性应该低。从多个仪器库和应用程序聚合数据的遥测消费者,在没有额外过滤时,应准备好 error.type 在查询时具有高基数性。
如果操作已成功完成,Instrumentations 不应设置 error.type。
如果特定域定义了自己的一组错误标识符(例如 HTTP 或 gRPC 状态码),则建议
- 使用特定于域的属性
- 设置
error.type以捕获所有错误,无论它们是否包含在特定于域的集合中。
[2] network.protocol.name: 值应规范化为小写。
[3] network.protocol.version: 如果协议版本受协商(例如,使用 ALPN),则此属性应设置为协商后的版本。如果实际协议版本未知,则此属性不应设置。
[4] network.transport: 值应规范化为小写。
在设置端口号时,应始终考虑设置传输协议,因为没有传输协议的端口号是模糊的。例如,不同的进程可能正在监听 TCP 端口 12345 和 UDP 端口 12345。
error.type 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以使用自定义值。
| 值 | 描述 | Stability |
|---|---|---|
_OTHER | 当检测不到自定义值时使用的回退错误值。 |
network.transport 具有以下已知值列表。如果其中一个适用,则必须使用相应的_值_;否则,可以_使用_自定义值。
| 值 | 描述 | Stability |
|---|---|---|
pipe | 命名或匿名管道。 | |
quic | QUIC | |
tcp | TCP | |
udp | UDP | |
unix | Unix 域套接字 |
rpc.system 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以改用自定义值。
| 值 | 描述 | Stability |
|---|---|---|
apache_dubbo | Apache Dubbo | |
connect_rpc | Connect RPC | |
dotnet_wcf | .NET WCF | |
grpc | gRPC | |
java_rmi | Java RMI | |
jsonrpc | JSON-RPC | |
onc_rpc | ONC RPC (Sun RPC) |
指标: rpc.server.response.size
此指标是推荐的。
| 名称 | Instrument Type | Unit (UCUM) | 描述 | Stability | 实体关联 |
|---|---|---|---|---|---|
rpc.server.response.size | Histogram | 每个调用的最大内存使用量的分布。 | 测量 RPC 响应消息的大小(未压缩)。[1] |
[1]: 流式传输:为流式批处理中的每个响应记录
Attributes
| 键 | Stability | 需求级别 | Value Type | 描述 | Example Values |
|---|---|---|---|---|---|
rpc.system | 必需 | 字符串 | 标识远程系统的字符串。有关知名标识符列表,请参阅下文。 | grpc; java_rmi; dotnet_wcf | |
error.type | 有条件必需 仅在操作失败时。 | 字符串 | 描述操作最终结束的一类错误。[1] | timeout;java.net.UnknownHostException;server_certificate_invalid;500 | |
network.protocol.name | 推荐 | 字符串 | OSI 应用层或非 OSI 等效层。[2] | http | |
network.protocol.version | 推荐 | 字符串 | 用于网络通信的协议的实际版本。[3] | 1.1; 2 | |
network.transport | 推荐 | 字符串 | OSI 传输层或进程间通信方法。[4] | tcp;udp | |
rpc.method | 推荐 | 字符串 | 这是从 RPC 接口角度来看的逻辑方法名称。 | exampleMethod | |
rpc.service | 推荐 | 字符串 | 被调用的服务的完整(逻辑)名称,包括其包名称(如果适用)。 | myservice.EchoService | |
server.address | 选择加入 | 字符串 | 服务器域名(如果无需反向 DNS 查找即可获得);否则,是 IP 地址或 Unix 域套接字名称。 | example.com;10.1.2.80;/tmp/my.sock | |
server.port | 选择加入 | int | 服务器端口号。 | 80; 8080; 443 |
[1] error.type: error.type 应该可预测,并且应该具有低基数性。
当 error.type 设置为某个类型(例如,异常类型)时,应该使用该工件内识别类型的规范类名。
Instrumentations 应该记录它们报告的错误列表。
一个仪器库内的 error.type 基数性应该低。从多个仪器库和应用程序聚合数据的遥测消费者,在没有额外过滤时,应准备好 error.type 在查询时具有高基数性。
如果操作已成功完成,Instrumentations 不应设置 error.type。
如果特定域定义了自己的一组错误标识符(例如 HTTP 或 gRPC 状态码),则建议
- 使用特定于域的属性
- 设置
error.type以捕获所有错误,无论它们是否包含在特定于域的集合中。
[2] network.protocol.name: 值应规范化为小写。
[3] network.protocol.version: 如果协议版本受协商(例如,使用 ALPN),则此属性应设置为协商后的版本。如果实际协议版本未知,则此属性不应设置。
[4] network.transport: 值应规范化为小写。
在设置端口号时,应始终考虑设置传输协议,因为没有传输协议的端口号是模糊的。例如,不同的进程可能正在监听 TCP 端口 12345 和 UDP 端口 12345。
error.type 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以使用自定义值。
| 值 | 描述 | Stability |
|---|---|---|
_OTHER | 当检测不到自定义值时使用的回退错误值。 |
network.transport 具有以下已知值列表。如果其中一个适用,则必须使用相应的_值_;否则,可以_使用_自定义值。
| 值 | 描述 | Stability |
|---|---|---|
pipe | 命名或匿名管道。 | |
quic | QUIC | |
tcp | TCP | |
udp | UDP | |
unix | Unix 域套接字 |
rpc.system 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以改用自定义值。
| 值 | 描述 | Stability |
|---|---|---|
apache_dubbo | Apache Dubbo | |
connect_rpc | Connect RPC | |
dotnet_wcf | .NET WCF | |
grpc | gRPC | |
java_rmi | Java RMI | |
jsonrpc | JSON-RPC | |
onc_rpc | ONC RPC (Sun RPC) |
RPC 客户端
以下是 RPC 客户端指标仪器列表。这些适用于传统的 RPC 用法,不适用于流式 RPC。
指标: rpc.client.duration
此指标是推荐的。
| 名称 | Instrument Type | Unit (UCUM) | 描述 | Stability | 实体关联 |
|---|---|---|---|---|---|
rpc.client.duration | Histogram | 毫秒 | 测量出站 RPC 的持续时间。[1] |
[1]: 流式 RPC 可能将此指标记录为从批次开始到批次结束,但这在实践中很难解释。
流式传输:不适用。
Attributes
| 键 | Stability | 需求级别 | Value Type | 描述 | Example Values |
|---|---|---|---|---|---|
rpc.system | 必需 | 字符串 | 标识远程系统的字符串。有关知名标识符列表,请参阅下文。 | grpc; java_rmi; dotnet_wcf | |
server.address | 必需 | 字符串 | 服务器域名(如果无需反向 DNS 查找即可获得);否则,是 IP 地址或 Unix 域套接字名称。[1] | example.com;10.1.2.80;/tmp/my.sock | |
error.type | 有条件必需 仅在操作失败时。 | 字符串 | 描述操作结束时发生的错误类型。[2] | timeout;java.net.UnknownHostException;server_certificate_invalid;500 | |
server.port | 条件必需 如果适用。 | int | 服务器端口号。[3] | 80; 8080; 443 | |
network.protocol.name | 推荐 | 字符串 | OSI 应用层或非 OSI 等效层。[4] | http | |
network.protocol.version | 推荐 | 字符串 | 用于网络通信的协议的实际版本。[5] | 1.1; 2 | |
network.transport | 推荐 | 字符串 | OSI 传输层或进程间通信方法。[6] | tcp;udp | |
rpc.method | 推荐 | 字符串 | 这是从 RPC 接口角度来看的逻辑方法名称。 | exampleMethod | |
rpc.service | 推荐 | 字符串 | 被调用的服务的完整(逻辑)名称,包括其包名称(如果适用)。 | myservice.EchoService |
[1] server.address: 从客户端观察时,并且当通过中间设备通信时,server.address 应代表任何中间设备(例如代理)后面的服务器地址,如果可用。
[2] error.type: error.type 应可预测且具有低基数。
当 error.type 设置为某个类型(例如,异常类型)时,应该使用该工件内识别类型的规范类名。
Instrumentations 应该记录它们报告的错误列表。
一个仪器库内的 error.type 基数性应该低。从多个仪器库和应用程序聚合数据的遥测消费者,在没有额外过滤时,应准备好 error.type 在查询时具有高基数性。
如果操作已成功完成,Instrumentations 不应设置 error.type。
如果特定域定义了自己的一组错误标识符(例如 HTTP 或 gRPC 状态码),则建议
- 使用特定于域的属性
- 设置
error.type以捕获所有错误,无论它们是否包含在特定于域的集合中。
[3] server.port: 从客户端观察时,并且在通过中介进行通信时,server.port 应代表任何中介(例如代理)之后的服务器端口,如果可用。
[4] network.protocol.name: 值应规范化为小写。
[5] network.protocol.version: 如果协议版本受协商(例如,使用 ALPN),则此属性应设置为协商后的版本。如果实际协议版本未知,则此属性不应设置。
[6] network.transport: 值应规范化为小写。
在设置端口号时,应始终考虑设置传输协议,因为没有传输协议的端口号是模糊的。例如,不同的进程可能正在监听 TCP 端口 12345 和 UDP 端口 12345。
error.type 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以使用自定义值。
| 值 | 描述 | Stability |
|---|---|---|
_OTHER | 当检测不到自定义值时使用的回退错误值。 |
network.transport 具有以下已知值列表。如果其中一个适用,则必须使用相应的_值_;否则,可以_使用_自定义值。
| 值 | 描述 | Stability |
|---|---|---|
pipe | 命名或匿名管道。 | |
quic | QUIC | |
tcp | TCP | |
udp | UDP | |
unix | Unix 域套接字 |
rpc.system 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以改用自定义值。
| 值 | 描述 | Stability |
|---|---|---|
apache_dubbo | Apache Dubbo | |
connect_rpc | Connect RPC | |
dotnet_wcf | .NET WCF | |
grpc | gRPC | |
java_rmi | Java RMI | |
jsonrpc | JSON-RPC | |
onc_rpc | ONC RPC (Sun RPC) |
指标: rpc.client.request.size
此指标是推荐的。
| 名称 | Instrument Type | Unit (UCUM) | 描述 | Stability | 实体关联 |
|---|---|---|---|---|---|
rpc.client.request.size | Histogram | 每个调用的最大内存使用量的分布。 | 测量 RPC 请求消息的大小(未压缩)。[1] |
[1]: 流式传输:为流式批处理中的每条消息记录
Attributes
| 键 | Stability | 需求级别 | Value Type | 描述 | Example Values |
|---|---|---|---|---|---|
rpc.system | 必需 | 字符串 | 标识远程系统的字符串。有关知名标识符列表,请参阅下文。 | grpc; java_rmi; dotnet_wcf | |
server.address | 必需 | 字符串 | 服务器域名(如果无需反向 DNS 查找即可获得);否则,是 IP 地址或 Unix 域套接字名称。[1] | example.com;10.1.2.80;/tmp/my.sock | |
error.type | 有条件必需 仅在操作失败时。 | 字符串 | 描述操作结束时发生的错误类型。[2] | timeout;java.net.UnknownHostException;server_certificate_invalid;500 | |
server.port | 条件必需 如果适用。 | int | 服务器端口号。[3] | 80; 8080; 443 | |
network.protocol.name | 推荐 | 字符串 | OSI 应用层或非 OSI 等效层。[4] | http | |
network.protocol.version | 推荐 | 字符串 | 用于网络通信的协议的实际版本。[5] | 1.1; 2 | |
network.transport | 推荐 | 字符串 | OSI 传输层或进程间通信方法。[6] | tcp;udp | |
rpc.method | 推荐 | 字符串 | 这是从 RPC 接口角度来看的逻辑方法名称。 | exampleMethod | |
rpc.service | 推荐 | 字符串 | 被调用的服务的完整(逻辑)名称,包括其包名称(如果适用)。 | myservice.EchoService |
[1] server.address: 从客户端观察时,并且当通过中间设备通信时,server.address 应代表任何中间设备(例如代理)后面的服务器地址,如果可用。
[2] error.type: error.type 应可预测且具有低基数。
当 error.type 设置为某个类型(例如,异常类型)时,应该使用该工件内识别类型的规范类名。
Instrumentations 应该记录它们报告的错误列表。
一个仪器库内的 error.type 基数性应该低。从多个仪器库和应用程序聚合数据的遥测消费者,在没有额外过滤时,应准备好 error.type 在查询时具有高基数性。
如果操作已成功完成,Instrumentations 不应设置 error.type。
如果特定域定义了自己的一组错误标识符(例如 HTTP 或 gRPC 状态码),则建议
- 使用特定于域的属性
- 设置
error.type以捕获所有错误,无论它们是否包含在特定于域的集合中。
[3] server.port: 从客户端观察时,并且在通过中介进行通信时,server.port 应代表任何中介(例如代理)之后的服务器端口,如果可用。
[4] network.protocol.name: 值应规范化为小写。
[5] network.protocol.version: 如果协议版本受协商(例如,使用 ALPN),则此属性应设置为协商后的版本。如果实际协议版本未知,则此属性不应设置。
[6] network.transport: 值应规范化为小写。
在设置端口号时,应始终考虑设置传输协议,因为没有传输协议的端口号是模糊的。例如,不同的进程可能正在监听 TCP 端口 12345 和 UDP 端口 12345。
error.type 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以使用自定义值。
| 值 | 描述 | Stability |
|---|---|---|
_OTHER | 当检测不到自定义值时使用的回退错误值。 |
network.transport 具有以下已知值列表。如果其中一个适用,则必须使用相应的_值_;否则,可以_使用_自定义值。
| 值 | 描述 | Stability |
|---|---|---|
pipe | 命名或匿名管道。 | |
quic | QUIC | |
tcp | TCP | |
udp | UDP | |
unix | Unix 域套接字 |
rpc.system 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以改用自定义值。
| 值 | 描述 | Stability |
|---|---|---|
apache_dubbo | Apache Dubbo | |
connect_rpc | Connect RPC | |
dotnet_wcf | .NET WCF | |
grpc | gRPC | |
java_rmi | Java RMI | |
jsonrpc | JSON-RPC | |
onc_rpc | ONC RPC (Sun RPC) |
指标: rpc.client.response.size
此指标是推荐的。
| 名称 | Instrument Type | Unit (UCUM) | 描述 | Stability | 实体关联 |
|---|---|---|---|---|---|
rpc.client.response.size | Histogram | 每个调用的最大内存使用量的分布。 | 测量 RPC 响应消息的大小(未压缩)。[1] |
[1]: 流式传输:为流式批处理中的每个响应记录
Attributes
| 键 | Stability | 需求级别 | Value Type | 描述 | Example Values |
|---|---|---|---|---|---|
rpc.system | 必需 | 字符串 | 标识远程系统的字符串。有关知名标识符列表,请参阅下文。 | grpc; java_rmi; dotnet_wcf | |
server.address | 必需 | 字符串 | 服务器域名(如果无需反向 DNS 查找即可获得);否则,是 IP 地址或 Unix 域套接字名称。[1] | example.com;10.1.2.80;/tmp/my.sock | |
error.type | 有条件必需 仅在操作失败时。 | 字符串 | 描述操作结束时发生的错误类型。[2] | timeout;java.net.UnknownHostException;server_certificate_invalid;500 | |
server.port | 条件必需 如果适用。 | int | 服务器端口号。[3] | 80; 8080; 443 | |
network.protocol.name | 推荐 | 字符串 | OSI 应用层或非 OSI 等效层。[4] | http | |
network.protocol.version | 推荐 | 字符串 | 用于网络通信的协议的实际版本。[5] | 1.1; 2 | |
network.transport | 推荐 | 字符串 | OSI 传输层或进程间通信方法。[6] | tcp;udp | |
rpc.method | 推荐 | 字符串 | 这是从 RPC 接口角度来看的逻辑方法名称。 | exampleMethod | |
rpc.service | 推荐 | 字符串 | 被调用的服务的完整(逻辑)名称,包括其包名称(如果适用)。 | myservice.EchoService |
[1] server.address: 从客户端观察时,并且当通过中间设备通信时,server.address 应代表任何中间设备(例如代理)后面的服务器地址,如果可用。
[2] error.type: error.type 应可预测且具有低基数。
当 error.type 设置为某个类型(例如,异常类型)时,应该使用该工件内识别类型的规范类名。
Instrumentations 应该记录它们报告的错误列表。
一个仪器库内的 error.type 基数性应该低。从多个仪器库和应用程序聚合数据的遥测消费者,在没有额外过滤时,应准备好 error.type 在查询时具有高基数性。
如果操作已成功完成,Instrumentations 不应设置 error.type。
如果特定域定义了自己的一组错误标识符(例如 HTTP 或 gRPC 状态码),则建议
- 使用特定于域的属性
- 设置
error.type以捕获所有错误,无论它们是否包含在特定于域的集合中。
[3] server.port: 从客户端观察时,并且在通过中介进行通信时,server.port 应代表任何中介(例如代理)之后的服务器端口,如果可用。
[4] network.protocol.name: 值应规范化为小写。
[5] network.protocol.version: 如果协议版本受协商(例如,使用 ALPN),则此属性应设置为协商后的版本。如果实际协议版本未知,则此属性不应设置。
[6] network.transport: 值应规范化为小写。
在设置端口号时,应始终考虑设置传输协议,因为没有传输协议的端口号是模糊的。例如,不同的进程可能正在监听 TCP 端口 12345 和 UDP 端口 12345。
error.type 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以使用自定义值。
| 值 | 描述 | Stability |
|---|---|---|
_OTHER | 当检测不到自定义值时使用的回退错误值。 |
network.transport 具有以下已知值列表。如果其中一个适用,则必须使用相应的_值_;否则,可以_使用_自定义值。
| 值 | 描述 | Stability |
|---|---|---|
pipe | 命名或匿名管道。 | |
quic | QUIC | |
tcp | TCP | |
udp | UDP | |
unix | Unix 域套接字 |
rpc.system 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以改用自定义值。
| 值 | 描述 | Stability |
|---|---|---|
apache_dubbo | Apache Dubbo | |
connect_rpc | Connect RPC | |
dotnet_wcf | .NET WCF | |
grpc | gRPC | |
java_rmi | Java RMI | |
jsonrpc | JSON-RPC | |
onc_rpc | ONC RPC (Sun RPC) |
特定 RPC 技术的语义约定
以下 RPC 技术定义了更具体的语义约定
RPC 系统维护者定义的规范
- gRPC:gRPC 的语义约定。