HTTP 指标的语义约定

状态: 混合

本节描述的约定是 HTTP 特有的。当发生 HTTP 操作时,将生成关于这些操作的指标事件并进行报告,以提供对操作的洞察。通过向指标事件添加 HTTP 属性,可以实现精细化的过滤。

免责声明:这些是最初的 HTTP 指标工具和属性,但未来可能会添加更多。

警告 使用 本文档 v1.20.0(或更早版本)的现有 HTTP 仪器化

  • 在 HTTP 语义约定被标记为稳定之前,**不应**更改其默认发出的 HTTP 或网络约定版本(HTTP 稳定化将包括一组核心网络约定(也用于 HTTP 仪表化)的稳定化)。约定包括但不限于属性、指标和跨度名称以及度量单位。
  • 在现有主版本中,应引入一个名为 OTEL_SEMCONV_STABILITY_OPT_IN 的环境变量,该变量是一个逗号分隔的类别特定值列表(例如,http、databases、messaging)。值列表包括:
    • http - 发出新的、稳定的 HTTP 和网络约定,并停止发出仪表化先前发出的旧的实验性 HTTP 和网络约定。
    • http/dup - 同时发出旧的和稳定的 HTTP 和网络约定,实现无缝过渡。
    • 默认行为(如果没有指定这些值之一)是继续发出仪表化先前发出的旧的实验性 HTTP 和网络约定版本。
    • 注意:如果同时存在这两个值,http/dup 的优先级高于 http
  • 在开始发出两组约定后,应至少维护现有主版本(至少进行安全修补)六个月。
  • 应在下一个主版本中删除该环境变量。

HTTP 服务器

指标:http.server.request.duration

此指标是必需的。

当此指标与 HTTP 服务器跨度一起报告时,指标值应与 HTTP 服务器跨度持续时间相同。

此指标 SHOULD 使用 ExplicitBucketBoundaries,其值为 [ 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 ]

名称Instrument TypeUnit (UCUM)描述Stability实体关联
http.server.request.durationHistogramsHTTP 服务器请求的持续时间。Stable

Attributes

Stability需求级别Value Type描述Example Values
http.request.methodStable必需字符串HTTP 请求方法。[1]GET; POST; HEAD
url.schemeStable必需字符串标识所使用的协议的 URI scheme 组件。[2]http; https
error.typeStable有条件必需 如果请求以错误结束。字符串描述操作结束的错误类别。[3]timeoutjava.net.UnknownHostExceptionserver_certificate_invalid500
http.response.status_codeStable有条件必需 仅当收到/发送时。intHTTP 响应状态码.200
http.routeStable有条件必需 仅当可用时字符串请求匹配的路由模板。这必须是低基数的,并且包括所有静态路径段,动态路径段用占位符表示。[4]/users/:userID?; my-controller/my-action/{id?}
network.protocol.nameStable有条件地必需 [5]字符串OSI 应用层或非 OSI 等效项。[6]httpspdy
network.protocol.versionStable推荐字符串网络通信实际使用的协议版本。[7]1.0; 1.1; 2; 3
server.addressStable选择加入字符串接收请求的本地 HTTP 服务器的名称。[8]example.com10.1.2.80/tmp/my.sock
server.portStable选择加入int接收请求的本地 HTTP 服务器的端口。[9]80; 8080; 443
user_agent.synthetic.typeDevelopment选择加入字符串指定合成流量的类别,例如测试或机器人。[10]bot; test

[1] http.request.method: HTTP 请求方法值应被仪器化“已知”。默认情况下,此约定定义“已知”方法为 RFC9110 中列出的方法,RFC5789 中定义的 PATCH 方法,以及 httpbis-safe-method-w-body 中定义的 QUERY 方法。

如果 HTTP 请求方法仪器不了解,则必须将 http.request.method 属性设置为 _OTHER

如果 HTTP 仪器最终可能将有效的 HTTP 请求方法转换为 _OTHER,则必须提供一种方法来覆盖已知 HTTP 方法的列表。如果此覆盖是通过环境变量完成的,则环境变量必须命名为 OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS,并支持一个逗号分隔的、区分大小写的已知 HTTP 方法列表(此列表必须完全覆盖默认已知方法,而不是默认方法之外的已知方法列表)。

HTTP 方法名称区分大小写,http.request.method 属性值必须精确匹配一个已知的 HTTP 方法名称。对于将 HTTP 方法视为不区分大小写的特定 Web 框架的仪器,应填充一个规范等效值。进行此操作的跟踪仪器还必须将 http.request.method_original 设置为原始值。

[2] url.scheme: 原始客户端请求的 scheme,如果已知(例如,来自 Forwarded#protoX-Forwarded-Proto 或类似的标头)。否则,为直接对等请求的 scheme。

[3] error.type: 如果请求在发送或接收响应状态码之前失败,则 error.type 应设置为异常类型(其完全限定类名,如果适用)或特定于组件的低基数错误标识符。

如果已发送或接收响应状态码,并且根据 HTTP 跨度状态定义,状态码指示错误,则 error.type 应设置为状态码数字(表示为字符串)、异常类型(如果抛出)或特定于组件的错误标识符。

error.type 值应是可预测的,并且应具有低基数。仪器化应记录其报告的错误列表。

一个仪器库内的 error.type 的基数应较低,但聚合来自多个仪器库和应用程序的数据的遥测消费者应准备好在查询时(在未应用任何其他过滤器时)error.type 具有高基数。

如果请求已成功完成,仪器化不应设置 error.type

[4] http.route: 当 HTTP 服务器框架不支持此属性时,不得填充此属性,因为路由属性应具有低基数,并且 URI 路径不能替代它。如果存在 应用程序根目录,则应包含它。

静态路径段是路由模板中具有固定、低基数值的ส่วน。这包括字面字符串,如 /users/,以及受限于有限、预定义值集合的占位符,例如 {controller}{action}

动态路径段是占位符,用于存储具有高基数且不受预定义列表约束的值,就像静态路径段一样。

仪器应使用相应 Web 框架提供的路由信息。它们应选择最精确的路由信息来源,并可以支持自定义路由格式。仪器应记录使用的格式和获取路由字符串的 API。

[5] network.protocol.name: 如果不为 httpnetwork.protocol.version 已设置。

[6] network.protocol.name: 该值应标准化为小写。

[7] network.protocol.version: 如果协议版本需要协商(例如,使用 ALPN),则此属性应设置为协商后的版本。如果实际协议版本未知,则不应设置此属性。

[8] server.address: 请参阅 设置 server.addressserver.port 属性

警告 由于此属性基于 HTTP 标头,启用此属性可能会使攻击者能够触发基数限制,从而降低指标的有效性。

[9] server.port: 请参阅 设置 server.addressserver.port 属性

警告 由于此属性基于 HTTP 标头,启用此属性可能会使攻击者能够触发基数限制,从而降低指标的有效性。

[10] user_agent.synthetic.type: 此属性可以从 user_agent.original 属性的内容派生。填充此属性的组件负责确定其认为是合成机器人或测试流量的内容。此属性可用于自识别目的,或用于检测为合成请求结果的遥测数据。此属性对于区分真实客户端流量和机器人或测试生成的合成流量很有用。


error.type 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以使用自定义值。

描述Stability
_OTHER当检测不到自定义值时使用的回退错误值。Stable

http.request.method 具有以下一组知名值。如果适用其中一个,则必须使用相应的名称;否则,可以使用自定义名称。

描述Stability
_OTHER仪器不了解的任何 HTTP 方法。Stable
CONNECTCONNECT 方法。Stable
DELETEDELETE 方法。Stable
GETGET 方法。Stable
HEADHEAD 方法。Stable
OPTIONSOPTIONS 方法。Stable
PATCHPATCH 方法。Stable
POSTPOST 方法。Stable
PUTPUT 方法。Stable
QUERYQUERY 方法。Development
TRACETRACE 方法。Stable

user_agent.synthetic.type具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以使用自定义值。

描述Stability
bot机器人来源。Development
test合成测试来源。Development

指标:http.server.active_requests

此指标是可选的。

名称Instrument TypeUnit (UCUM)描述Stability实体关联
http.server.active_requestsUpDownCounter{request}活动 HTTP 服务器请求的数量。Development

Attributes

Stability需求级别Value Type描述Example Values
http.request.methodStable必需字符串HTTP 请求方法。[1]GET; POST; HEAD
url.schemeStable必需字符串The URI 方案组件,用于标识所使用的协议。http; https
server.addressStable选择加入字符串接收请求的本地 HTTP 服务器的名称。[2]example.com10.1.2.80/tmp/my.sock
server.portStable选择加入int接收请求的本地 HTTP 服务器的端口。[3]80; 8080; 443

[1] http.request.method: HTTP 请求方法值应被仪器化“已知”。默认情况下,此约定定义“已知”方法为 RFC9110 中列出的方法,RFC5789 中定义的 PATCH 方法,以及 httpbis-safe-method-w-body 中定义的 QUERY 方法。

如果 HTTP 请求方法仪器不了解,则必须将 http.request.method 属性设置为 _OTHER

如果 HTTP 仪器最终可能将有效的 HTTP 请求方法转换为 _OTHER,则必须提供一种方法来覆盖已知 HTTP 方法的列表。如果此覆盖是通过环境变量完成的,则环境变量必须命名为 OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS,并支持一个逗号分隔的、区分大小写的已知 HTTP 方法列表(此列表必须完全覆盖默认已知方法,而不是默认方法之外的已知方法列表)。

HTTP 方法名称区分大小写,http.request.method 属性值必须精确匹配一个已知的 HTTP 方法名称。对于将 HTTP 方法视为不区分大小写的特定 Web 框架的仪器,应填充一个规范等效值。进行此操作的跟踪仪器还必须将 http.request.method_original 设置为原始值。

[2] server.address: 请参阅 设置 server.addressserver.port 属性

警告 由于此属性基于 HTTP 标头,启用此属性可能会使攻击者能够触发基数限制,从而降低指标的有效性。

[3] server.port: 请参阅 设置 server.addressserver.port 属性

警告 由于此属性基于 HTTP 标头,启用此属性可能会使攻击者能够触发基数限制,从而降低指标的有效性。


http.request.method 具有以下一组知名值。如果适用其中一个,则必须使用相应的名称;否则,可以使用自定义名称。

描述Stability
_OTHER仪器不了解的任何 HTTP 方法。Stable
CONNECTCONNECT 方法。Stable
DELETEDELETE 方法。Stable
GETGET 方法。Stable
HEADHEAD 方法。Stable
OPTIONSOPTIONS 方法。Stable
PATCHPATCH 方法。Stable
POSTPOST 方法。Stable
PUTPUT 方法。Stable
QUERYQUERY 方法。Development
TRACETRACE 方法。Stable

指标:http.server.request.body.size

此指标是可选的。

名称Instrument TypeUnit (UCUM)描述Stability实体关联
http.server.request.body.sizeHistogram每个调用的最大内存使用量的分布。HTTP 服务器请求体的 Size。[1]Development

[1]: 请求有效载荷体的大小(以字节为单位)。这是传输的字节数,不包括标头,通常(但不总是)是 Content-Length 标头。对于使用传输编码的请求,这应该是压缩后的大小。

Attributes

Stability需求级别Value Type描述Example Values
http.request.methodStable必需字符串HTTP 请求方法。[1]GET; POST; HEAD
url.schemeStable必需字符串标识所使用的协议的 URI scheme 组件。[2]http; https
error.typeStable有条件必需 如果请求以错误结束。字符串描述操作结束的错误类别。[3]timeoutjava.net.UnknownHostExceptionserver_certificate_invalid500
http.response.status_codeStable有条件必需 仅当收到/发送时。intHTTP 响应状态码.200
http.routeStable有条件必需 仅当可用时字符串请求匹配的路由模板。这必须是低基数的,并且包括所有静态路径段,动态路径段用占位符表示。[4]/users/:userID?; my-controller/my-action/{id?}
network.protocol.nameStable有条件地必需 [5]字符串OSI 应用层或非 OSI 等效项。[6]httpspdy
network.protocol.versionStable推荐字符串网络通信实际使用的协议版本。[7]1.0; 1.1; 2; 3
server.addressStable选择加入字符串接收请求的本地 HTTP 服务器的名称。[8]example.com10.1.2.80/tmp/my.sock
server.portStable选择加入int接收请求的本地 HTTP 服务器的端口。[9]80; 8080; 443
user_agent.synthetic.typeDevelopment选择加入字符串指定合成流量的类别,例如测试或机器人。[10]bot; test

[1] http.request.method: HTTP 请求方法值应被仪器化“已知”。默认情况下,此约定定义“已知”方法为 RFC9110 中列出的方法,RFC5789 中定义的 PATCH 方法,以及 httpbis-safe-method-w-body 中定义的 QUERY 方法。

如果 HTTP 请求方法仪器不了解,则必须将 http.request.method 属性设置为 _OTHER

如果 HTTP 仪器最终可能将有效的 HTTP 请求方法转换为 _OTHER,则必须提供一种方法来覆盖已知 HTTP 方法的列表。如果此覆盖是通过环境变量完成的,则环境变量必须命名为 OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS,并支持一个逗号分隔的、区分大小写的已知 HTTP 方法列表(此列表必须完全覆盖默认已知方法,而不是默认方法之外的已知方法列表)。

HTTP 方法名称区分大小写,http.request.method 属性值必须精确匹配一个已知的 HTTP 方法名称。对于将 HTTP 方法视为不区分大小写的特定 Web 框架的仪器,应填充一个规范等效值。进行此操作的跟踪仪器还必须将 http.request.method_original 设置为原始值。

[2] url.scheme: 原始客户端请求的 scheme,如果已知(例如,来自 Forwarded#protoX-Forwarded-Proto 或类似的标头)。否则,为直接对等请求的 scheme。

[3] error.type: 如果请求在发送或接收响应状态码之前失败,则 error.type 应设置为异常类型(其完全限定类名,如果适用)或特定于组件的低基数错误标识符。

如果已发送或接收响应状态码,并且根据 HTTP 跨度状态定义,状态码指示错误,则 error.type 应设置为状态码数字(表示为字符串)、异常类型(如果抛出)或特定于组件的错误标识符。

error.type 值应是可预测的,并且应具有低基数。仪器化应记录其报告的错误列表。

一个仪器库内的 error.type 的基数应较低,但聚合来自多个仪器库和应用程序的数据的遥测消费者应准备好在查询时(在未应用任何其他过滤器时)error.type 具有高基数。

如果请求已成功完成,仪器化不应设置 error.type

[4] http.route: 当 HTTP 服务器框架不支持此属性时,不得填充此属性,因为路由属性应具有低基数,并且 URI 路径不能替代它。如果存在 应用程序根目录,则应包含它。

静态路径段是路由模板中具有固定、低基数值的ส่วน。这包括字面字符串,如 /users/,以及受限于有限、预定义值集合的占位符,例如 {controller}{action}

动态路径段是占位符,用于存储具有高基数且不受预定义列表约束的值,就像静态路径段一样。

仪器应使用相应 Web 框架提供的路由信息。它们应选择最精确的路由信息来源,并可以支持自定义路由格式。仪器应记录使用的格式和获取路由字符串的 API。

[5] network.protocol.name: 如果不为 httpnetwork.protocol.version 已设置。

[6] network.protocol.name: 该值应标准化为小写。

[7] network.protocol.version: 如果协议版本需要协商(例如,使用 ALPN),则此属性应设置为协商后的版本。如果实际协议版本未知,则不应设置此属性。

[8] server.address: 请参阅 设置 server.addressserver.port 属性

警告 由于此属性基于 HTTP 标头,启用此属性可能会使攻击者能够触发基数限制,从而降低指标的有效性。

[9] server.port: 请参阅 设置 server.addressserver.port 属性

警告 由于此属性基于 HTTP 标头,启用此属性可能会使攻击者能够触发基数限制,从而降低指标的有效性。

[10] user_agent.synthetic.type: 此属性可以从 user_agent.original 属性的内容派生。填充此属性的组件负责确定其认为是合成机器人或测试流量的内容。此属性可用于自识别目的,或用于检测为合成请求结果的遥测数据。此属性对于区分真实客户端流量和机器人或测试生成的合成流量很有用。


error.type 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以使用自定义值。

描述Stability
_OTHER当检测不到自定义值时使用的回退错误值。Stable

http.request.method 具有以下一组知名值。如果适用其中一个,则必须使用相应的名称;否则,可以使用自定义名称。

描述Stability
_OTHER仪器不了解的任何 HTTP 方法。Stable
CONNECTCONNECT 方法。Stable
DELETEDELETE 方法。Stable
GETGET 方法。Stable
HEADHEAD 方法。Stable
OPTIONSOPTIONS 方法。Stable
PATCHPATCH 方法。Stable
POSTPOST 方法。Stable
PUTPUT 方法。Stable
QUERYQUERY 方法。Development
TRACETRACE 方法。Stable

user_agent.synthetic.type具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以使用自定义值。

描述Stability
bot机器人来源。Development
test合成测试来源。Development

指标:http.server.response.body.size

此指标是可选的。

名称Instrument TypeUnit (UCUM)描述Stability实体关联
http.server.response.body.sizeHistogram每个调用的最大内存使用量的分布。HTTP 服务器响应体的 Size。[1]Development

[1]: 响应有效载荷体的大小(以字节为单位)。这是传输的字节数,不包括标头,通常(但不总是)是 Content-Length 标头。对于使用传输编码的请求,这应该是压缩后的大小。

Attributes

Stability需求级别Value Type描述Example Values
http.request.methodStable必需字符串HTTP 请求方法。[1]GET; POST; HEAD
url.schemeStable必需字符串标识所使用的协议的 URI scheme 组件。[2]http; https
error.typeStable有条件必需 如果请求以错误结束。字符串描述操作结束的错误类别。[3]timeoutjava.net.UnknownHostExceptionserver_certificate_invalid500
http.response.status_codeStable有条件必需 仅当收到/发送时。intHTTP 响应状态码.200
http.routeStable有条件必需 仅当可用时字符串请求匹配的路由模板。这必须是低基数的,并且包括所有静态路径段,动态路径段用占位符表示。[4]/users/:userID?; my-controller/my-action/{id?}
network.protocol.nameStable有条件地必需 [5]字符串OSI 应用层或非 OSI 等效项。[6]httpspdy
network.protocol.versionStable推荐字符串网络通信实际使用的协议版本。[7]1.0; 1.1; 2; 3
server.addressStable选择加入字符串接收请求的本地 HTTP 服务器的名称。[8]example.com10.1.2.80/tmp/my.sock
server.portStable选择加入int接收请求的本地 HTTP 服务器的端口。[9]80; 8080; 443
user_agent.synthetic.typeDevelopment选择加入字符串指定合成流量的类别,例如测试或机器人。[10]bot; test

[1] http.request.method: HTTP 请求方法值应被仪器化“已知”。默认情况下,此约定定义“已知”方法为 RFC9110 中列出的方法,RFC5789 中定义的 PATCH 方法,以及 httpbis-safe-method-w-body 中定义的 QUERY 方法。

如果 HTTP 请求方法仪器不了解,则必须将 http.request.method 属性设置为 _OTHER

如果 HTTP 仪器最终可能将有效的 HTTP 请求方法转换为 _OTHER,则必须提供一种方法来覆盖已知 HTTP 方法的列表。如果此覆盖是通过环境变量完成的,则环境变量必须命名为 OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS,并支持一个逗号分隔的、区分大小写的已知 HTTP 方法列表(此列表必须完全覆盖默认已知方法,而不是默认方法之外的已知方法列表)。

HTTP 方法名称区分大小写,http.request.method 属性值必须精确匹配一个已知的 HTTP 方法名称。对于将 HTTP 方法视为不区分大小写的特定 Web 框架的仪器,应填充一个规范等效值。进行此操作的跟踪仪器还必须将 http.request.method_original 设置为原始值。

[2] url.scheme: 原始客户端请求的 scheme,如果已知(例如,来自 Forwarded#protoX-Forwarded-Proto 或类似的标头)。否则,为直接对等请求的 scheme。

[3] error.type: 如果请求在发送或接收响应状态码之前失败,则 error.type 应设置为异常类型(其完全限定类名,如果适用)或特定于组件的低基数错误标识符。

如果已发送或接收响应状态码,并且根据 HTTP 跨度状态定义,状态码指示错误,则 error.type 应设置为状态码数字(表示为字符串)、异常类型(如果抛出)或特定于组件的错误标识符。

error.type 值应是可预测的,并且应具有低基数。仪器化应记录其报告的错误列表。

一个仪器库内的 error.type 的基数应较低,但聚合来自多个仪器库和应用程序的数据的遥测消费者应准备好在查询时(在未应用任何其他过滤器时)error.type 具有高基数。

如果请求已成功完成,仪器化不应设置 error.type

[4] http.route: 当 HTTP 服务器框架不支持此属性时,不得填充此属性,因为路由属性应具有低基数,并且 URI 路径不能替代它。如果存在 应用程序根目录,则应包含它。

静态路径段是路由模板中具有固定、低基数值的ส่วน。这包括字面字符串,如 /users/,以及受限于有限、预定义值集合的占位符,例如 {controller}{action}

动态路径段是占位符,用于存储具有高基数且不受预定义列表约束的值,就像静态路径段一样。

仪器应使用相应 Web 框架提供的路由信息。它们应选择最精确的路由信息来源,并可以支持自定义路由格式。仪器应记录使用的格式和获取路由字符串的 API。

[5] network.protocol.name: 如果不为 httpnetwork.protocol.version 已设置。

[6] network.protocol.name: 该值应标准化为小写。

[7] network.protocol.version: 如果协议版本需要协商(例如,使用 ALPN),则此属性应设置为协商后的版本。如果实际协议版本未知,则不应设置此属性。

[8] server.address: 请参阅 设置 server.addressserver.port 属性

警告 由于此属性基于 HTTP 标头,启用此属性可能会使攻击者能够触发基数限制,从而降低指标的有效性。

[9] server.port: 请参阅 设置 server.addressserver.port 属性

警告 由于此属性基于 HTTP 标头,启用此属性可能会使攻击者能够触发基数限制,从而降低指标的有效性。

[10] user_agent.synthetic.type: 此属性可以从 user_agent.original 属性的内容派生。填充此属性的组件负责确定其认为是合成机器人或测试流量的内容。此属性可用于自识别目的,或用于检测为合成请求结果的遥测数据。此属性对于区分真实客户端流量和机器人或测试生成的合成流量很有用。


error.type 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以使用自定义值。

描述Stability
_OTHER当检测不到自定义值时使用的回退错误值。Stable

http.request.method 具有以下一组知名值。如果适用其中一个,则必须使用相应的名称;否则,可以使用自定义名称。

描述Stability
_OTHER仪器不了解的任何 HTTP 方法。Stable
CONNECTCONNECT 方法。Stable
DELETEDELETE 方法。Stable
GETGET 方法。Stable
HEADHEAD 方法。Stable
OPTIONSOPTIONS 方法。Stable
PATCHPATCH 方法。Stable
POSTPOST 方法。Stable
PUTPUT 方法。Stable
QUERYQUERY 方法。Development
TRACETRACE 方法。Stable

user_agent.synthetic.type具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以使用自定义值。

描述Stability
bot机器人来源。Development
test合成测试来源。Development

HTTP 客户端

指标:http.client.request.duration

此指标是必需的。

当此指标与 HTTP 客户端跨度一起报告时,指标值应与 HTTP 客户端跨度持续时间相同。

此指标 SHOULD 使用 ExplicitBucketBoundaries,其值为 [ 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 ]

名称Instrument TypeUnit (UCUM)描述Stability实体关联
http.client.request.durationHistogramsHTTP 客户端请求的持续时间。Stable

Attributes

Stability需求级别Value Type描述Example Values
http.request.methodStable必需字符串HTTP 请求方法。[1]GET; POST; HEAD
server.addressStable必需字符串服务器域名(如果无需反向 DNS 查询即可获得);否则,为 IP 地址或 Unix 套接字名称。[2]example.com10.1.2.80/tmp/my.sock
server.portStable必需int服务器端口号。[3]80; 8080; 443
error.typeStable有条件必需 如果请求以错误结束。字符串描述操作结束时的一类错误。[4]timeoutjava.net.UnknownHostExceptionserver_certificate_invalid500
http.response.status_codeStable有条件必需 仅当收到/发送时。intHTTP 响应状态码.200
network.protocol.nameStable有条件地必需 [5]字符串OSI 应用层或非 OSI 等效项。[6]httpspdy
network.protocol.versionStable推荐字符串网络通信实际使用的协议版本。[7]1.0; 1.1; 2; 3
url.schemeStable选择加入字符串The URI 方案组件,用于标识所使用的协议。http; https
url.templateDevelopment选择加入字符串低基数的 绝对路径引用模板。[8]/users/{id}; /users/:id; /users?id={id}

[1] http.request.method: HTTP 请求方法值应被仪器化“已知”。默认情况下,此约定定义“已知”方法为 RFC9110 中列出的方法,RFC5789 中定义的 PATCH 方法,以及 httpbis-safe-method-w-body 中定义的 QUERY 方法。

如果 HTTP 请求方法仪器不了解,则必须将 http.request.method 属性设置为 _OTHER

如果 HTTP 仪器最终可能将有效的 HTTP 请求方法转换为 _OTHER,则必须提供一种方法来覆盖已知 HTTP 方法的列表。如果此覆盖是通过环境变量完成的,则环境变量必须命名为 OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS,并支持一个逗号分隔的、区分大小写的已知 HTTP 方法列表(此列表必须完全覆盖默认已知方法,而不是默认方法之外的已知方法列表)。

HTTP 方法名称区分大小写,http.request.method 属性值必须精确匹配一个已知的 HTTP 方法名称。对于将 HTTP 方法视为不区分大小写的特定 Web 框架的仪器,应填充一个规范等效值。进行此操作的跟踪仪器还必须将 http.request.method_original 设置为原始值。

[2] server.address: 在 HTTP/1.1 中,当 请求目标 以其 绝对形式传递时,server.address 应与请求目标的 host 组件匹配。

在所有其他情况下,server.address 应与 HTTP/1.1 中 Host 标头或 HTTP/2 和 HTTP/3 中的 :authority 伪标头的 host 组件匹配。

[3] server.port: 对于 HTTP/1.1,当 请求目标 以其 绝对形式传递时,server.port 应与请求目标的 port 组件匹配。

在所有其他情况下,server.port 应与 HTTP/1.1 中 Host 标头或 HTTP/2 和 HTTP/3 中的 :authority 伪标头的 port 组件匹配。

[4] error.type: 如果请求在发送或接收响应状态码之前失败,则 error.type 应设置为异常类型(其完全限定类名,如果适用)或特定于组件的低基数错误标识符。

如果已发送或接收响应状态码,并且根据 HTTP 跨度状态定义,状态码指示错误,则 error.type 应设置为状态码数字(表示为字符串)、异常类型(如果抛出)或特定于组件的错误标识符。

error.type 值应是可预测的,并且应具有低基数。仪器化应记录其报告的错误列表。

一个仪器库内的 error.type 的基数应较低,但聚合来自多个仪器库和应用程序的数据的遥测消费者应准备好在查询时(在未应用任何其他过滤器时)error.type 具有高基数。

如果请求已成功完成,仪器化不应设置 error.type

[5] network.protocol.name: 如果不为 httpnetwork.protocol.version 已设置。

[6] network.protocol.name: 该值应标准化为小写。

[7] network.protocol.version: 如果协议版本需要协商(例如,使用 ALPN),则此属性应设置为协商后的版本。如果实际协议版本未知,则不应设置此属性。

[8] url.template: url.template 必须是低基数的。它通常在 HTTP 客户端上不可用,但应用程序或专门的 HTTP 仪器化可能知道它。


error.type 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以使用自定义值。

描述Stability
_OTHER当检测不到自定义值时使用的回退错误值。Stable

http.request.method 具有以下一组知名值。如果适用其中一个,则必须使用相应的名称;否则,可以使用自定义名称。

描述Stability
_OTHER仪器不了解的任何 HTTP 方法。Stable
CONNECTCONNECT 方法。Stable
DELETEDELETE 方法。Stable
GETGET 方法。Stable
HEADHEAD 方法。Stable
OPTIONSOPTIONS 方法。Stable
PATCHPATCH 方法。Stable
POSTPOST 方法。Stable
PUTPUT 方法。Stable
QUERYQUERY 方法。Development
TRACETRACE 方法。Stable

指标:http.client.request.body.size

此指标是可选的。

名称Instrument TypeUnit (UCUM)描述Stability实体关联
http.client.request.body.sizeHistogram每个调用的最大内存使用量的分布。HTTP 客户端请求体的 Size。[1]Development

[1]: 请求有效载荷体的大小(以字节为单位)。这是传输的字节数,不包括标头,通常(但不总是)是 Content-Length 标头。对于使用传输编码的请求,这应该是压缩后的大小。

Attributes

Stability需求级别Value Type描述Example Values
http.request.methodStable必需字符串HTTP 请求方法。[1]GET; POST; HEAD
server.addressStable必需字符串服务器域名(如果无需反向 DNS 查询即可获得);否则,为 IP 地址或 Unix 套接字名称。[2]example.com10.1.2.80/tmp/my.sock
server.portStable必需int服务器端口号。[3]80; 8080; 443
error.typeStable有条件必需 如果请求以错误结束。字符串描述操作结束时的一类错误。[4]timeoutjava.net.UnknownHostExceptionserver_certificate_invalid500
http.response.status_codeStable有条件必需 仅当收到/发送时。intHTTP 响应状态码.200
network.protocol.nameStable有条件地必需 [5]字符串OSI 应用层或非 OSI 等效项。[6]httpspdy
url.templateDevelopment有条件必需 如果可用。字符串低基数的 绝对路径引用模板。[7]/users/{id}; /users/:id; /users?id={id}
network.protocol.versionStable推荐字符串网络通信实际使用的协议版本。[8]1.0; 1.1; 2; 3
url.schemeStable选择加入字符串The URI 方案组件,用于标识所使用的协议。http; https

[1] http.request.method: HTTP 请求方法值应被仪器化“已知”。默认情况下,此约定定义“已知”方法为 RFC9110 中列出的方法,RFC5789 中定义的 PATCH 方法,以及 httpbis-safe-method-w-body 中定义的 QUERY 方法。

如果 HTTP 请求方法仪器不了解,则必须将 http.request.method 属性设置为 _OTHER

如果 HTTP 仪器最终可能将有效的 HTTP 请求方法转换为 _OTHER,则必须提供一种方法来覆盖已知 HTTP 方法的列表。如果此覆盖是通过环境变量完成的,则环境变量必须命名为 OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS,并支持一个逗号分隔的、区分大小写的已知 HTTP 方法列表(此列表必须完全覆盖默认已知方法,而不是默认方法之外的已知方法列表)。

HTTP 方法名称区分大小写,http.request.method 属性值必须精确匹配一个已知的 HTTP 方法名称。对于将 HTTP 方法视为不区分大小写的特定 Web 框架的仪器,应填充一个规范等效值。进行此操作的跟踪仪器还必须将 http.request.method_original 设置为原始值。

[2] server.address: 在 HTTP/1.1 中,当 请求目标 以其 绝对形式传递时,server.address 应与请求目标的 host 组件匹配。

在所有其他情况下,server.address 应与 HTTP/1.1 中 Host 标头或 HTTP/2 和 HTTP/3 中的 :authority 伪标头的 host 组件匹配。

[3] server.port: 对于 HTTP/1.1,当 请求目标 以其 绝对形式传递时,server.port 应与请求目标的 port 组件匹配。

在所有其他情况下,server.port 应与 HTTP/1.1 中 Host 标头或 HTTP/2 和 HTTP/3 中的 :authority 伪标头的 port 组件匹配。

[4] error.type: 如果请求在发送或接收响应状态码之前失败,则 error.type 应设置为异常类型(其完全限定类名,如果适用)或特定于组件的低基数错误标识符。

如果已发送或接收响应状态码,并且根据 HTTP 跨度状态定义,状态码指示错误,则 error.type 应设置为状态码数字(表示为字符串)、异常类型(如果抛出)或特定于组件的错误标识符。

error.type 值应是可预测的,并且应具有低基数。仪器化应记录其报告的错误列表。

一个仪器库内的 error.type 的基数应较低,但聚合来自多个仪器库和应用程序的数据的遥测消费者应准备好在查询时(在未应用任何其他过滤器时)error.type 具有高基数。

如果请求已成功完成,仪器化不应设置 error.type

[5] network.protocol.name: 如果不为 httpnetwork.protocol.version 已设置。

[6] network.protocol.name: 该值应标准化为小写。

[7] url.template: url.template 必须是低基数的。它通常在 HTTP 客户端上不可用,但应用程序或专门的 HTTP 仪器化可能知道它。

[8] network.protocol.version: 如果协议版本需要协商(例如,使用 ALPN),则此属性应设置为协商后的版本。如果实际协议版本未知,则不应设置此属性。


error.type 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以使用自定义值。

描述Stability
_OTHER当检测不到自定义值时使用的回退错误值。Stable

http.request.method 具有以下一组知名值。如果适用其中一个,则必须使用相应的名称;否则,可以使用自定义名称。

描述Stability
_OTHER仪器不了解的任何 HTTP 方法。Stable
CONNECTCONNECT 方法。Stable
DELETEDELETE 方法。Stable
GETGET 方法。Stable
HEADHEAD 方法。Stable
OPTIONSOPTIONS 方法。Stable
PATCHPATCH 方法。Stable
POSTPOST 方法。Stable
PUTPUT 方法。Stable
QUERYQUERY 方法。Development
TRACETRACE 方法。Stable

指标:http.client.response.body.size

此指标是可选的。

名称Instrument TypeUnit (UCUM)描述Stability实体关联
http.client.response.body.sizeHistogram每个调用的最大内存使用量的分布。HTTP 客户端响应体的 Size。[1]Development

[1]: 响应有效载荷体的大小(以字节为单位)。这是传输的字节数,不包括标头,通常(但不总是)是 Content-Length 标头。对于使用传输编码的请求,这应该是压缩后的大小。

Attributes

Stability需求级别Value Type描述Example Values
http.request.methodStable必需字符串HTTP 请求方法。[1]GET; POST; HEAD
server.addressStable必需字符串服务器域名(如果无需反向 DNS 查询即可获得);否则,为 IP 地址或 Unix 套接字名称。[2]example.com10.1.2.80/tmp/my.sock
server.portStable必需int服务器端口号。[3]80; 8080; 443
error.typeStable有条件必需 如果请求以错误结束。字符串描述操作结束时的一类错误。[4]timeoutjava.net.UnknownHostExceptionserver_certificate_invalid500
http.response.status_codeStable有条件必需 仅当收到/发送时。intHTTP 响应状态码.200
network.protocol.nameStable有条件地必需 [5]字符串OSI 应用层或非 OSI 等效项。[6]httpspdy
url.templateDevelopment有条件必需 如果可用。字符串低基数的 绝对路径引用模板。[7]/users/{id}; /users/:id; /users?id={id}
network.protocol.versionStable推荐字符串网络通信实际使用的协议版本。[8]1.0; 1.1; 2; 3
url.schemeStable选择加入字符串The URI 方案组件,用于标识所使用的协议。http; https

[1] http.request.method: HTTP 请求方法值应被仪器化“已知”。默认情况下,此约定定义“已知”方法为 RFC9110 中列出的方法,RFC5789 中定义的 PATCH 方法,以及 httpbis-safe-method-w-body 中定义的 QUERY 方法。

如果 HTTP 请求方法仪器不了解,则必须将 http.request.method 属性设置为 _OTHER

如果 HTTP 仪器最终可能将有效的 HTTP 请求方法转换为 _OTHER,则必须提供一种方法来覆盖已知 HTTP 方法的列表。如果此覆盖是通过环境变量完成的,则环境变量必须命名为 OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS,并支持一个逗号分隔的、区分大小写的已知 HTTP 方法列表(此列表必须完全覆盖默认已知方法,而不是默认方法之外的已知方法列表)。

HTTP 方法名称区分大小写,http.request.method 属性值必须精确匹配一个已知的 HTTP 方法名称。对于将 HTTP 方法视为不区分大小写的特定 Web 框架的仪器,应填充一个规范等效值。进行此操作的跟踪仪器还必须将 http.request.method_original 设置为原始值。

[2] server.address: 在 HTTP/1.1 中,当 请求目标 以其 绝对形式传递时,server.address 应与请求目标的 host 组件匹配。

在所有其他情况下,server.address 应与 HTTP/1.1 中 Host 标头或 HTTP/2 和 HTTP/3 中的 :authority 伪标头的 host 组件匹配。

[3] server.port: 对于 HTTP/1.1,当 请求目标 以其 绝对形式传递时,server.port 应与请求目标的 port 组件匹配。

在所有其他情况下,server.port 应与 HTTP/1.1 中 Host 标头或 HTTP/2 和 HTTP/3 中的 :authority 伪标头的 port 组件匹配。

[4] error.type: 如果请求在发送或接收响应状态码之前失败,则 error.type 应设置为异常类型(其完全限定类名,如果适用)或特定于组件的低基数错误标识符。

如果已发送或接收响应状态码,并且根据 HTTP 跨度状态定义,状态码指示错误,则 error.type 应设置为状态码数字(表示为字符串)、异常类型(如果抛出)或特定于组件的错误标识符。

error.type 值应是可预测的,并且应具有低基数。仪器化应记录其报告的错误列表。

一个仪器库内的 error.type 的基数应较低,但聚合来自多个仪器库和应用程序的数据的遥测消费者应准备好在查询时(在未应用任何其他过滤器时)error.type 具有高基数。

如果请求已成功完成,仪器化不应设置 error.type

[5] network.protocol.name: 如果不为 httpnetwork.protocol.version 已设置。

[6] network.protocol.name: 该值应标准化为小写。

[7] url.template: url.template 必须是低基数的。它通常在 HTTP 客户端上不可用,但应用程序或专门的 HTTP 仪器化可能知道它。

[8] network.protocol.version: 如果协议版本需要协商(例如,使用 ALPN),则此属性应设置为协商后的版本。如果实际协议版本未知,则不应设置此属性。


error.type 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以使用自定义值。

描述Stability
_OTHER当检测不到自定义值时使用的回退错误值。Stable

http.request.method 具有以下一组知名值。如果适用其中一个,则必须使用相应的名称;否则,可以使用自定义名称。

描述Stability
_OTHER仪器不了解的任何 HTTP 方法。Stable
CONNECTCONNECT 方法。Stable
DELETEDELETE 方法。Stable
GETGET 方法。Stable
HEADHEAD 方法。Stable
OPTIONSOPTIONS 方法。Stable
PATCHPATCH 方法。Stable
POSTPOST 方法。Stable
PUTPUT 方法。Stable
QUERYQUERY 方法。Development
TRACETRACE 方法。Stable

指标:http.client.open_connections

此指标是可选的。

名称Instrument TypeUnit (UCUM)描述Stability实体关联
http.client.open_connectionsUpDownCounter{connection}客户端上当前活动或空闲的出站 HTTP 连接数。Development

Attributes

Stability需求级别Value Type描述Example Values
http.connection.stateDevelopment必需字符串HTTP 连接池中 HTTP 连接的状态。active; idle
server.addressStable必需字符串服务器域名(如果无需反向 DNS 查找即可获得);否则,是 IP 地址或 Unix 域套接字名称。[1]example.com10.1.2.80/tmp/my.sock
server.portStable必需int服务器端口号。[2]80; 8080; 443
network.peer.addressStable推荐字符串网络连接的对端地址 - IP 地址或 Unix 域套接字名称。10.1.2.80/tmp/my.sock
network.protocol.versionStable推荐字符串用于网络通信的协议的实际版本。[3]1.1; 2
url.schemeStable选择加入字符串The URI 方案组件,用于标识所使用的协议。http; https

[1] server.address 从客户端观察时,并且当通过中间设备通信时,server.address 应代表任何中间设备(例如代理)后面的服务器地址,如果可用。

[2] server.port 从客户端观察,并且在通过中介通信时,server.port 应表示任何中介(例如代理)后面的服务器端口,如果可用的话。

[3] network.protocol.version 如果协议版本受协商(例如,使用 ALPN),则此属性应设置为协商后的版本。如果实际协议版本未知,则此属性不应设置。


http.connection.state 具有以下已知值列表。如果其中一个适用,则必须使用相应的 {value};否则,可以 {value} 使用自定义值。

描述Stability
activeactive 状态。Development
idleidle 状态。Development

指标:http.client.connection.duration

此指标应使用 ExplicitBucketBoundaries[ 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 30, 60, 120, 300 ] 指定。

此指标是可选的。

名称Instrument TypeUnit (UCUM)描述Stability实体关联
http.client.connection.durationHistograms成功建立的出站 HTTP 连接的持续时间。Development

Attributes

Stability需求级别Value Type描述Example Values
server.addressStable必需字符串服务器域名(如果无需反向 DNS 查找即可获得);否则,是 IP 地址或 Unix 域套接字名称。[1]example.com10.1.2.80/tmp/my.sock
server.portStable必需int服务器端口号。[2]80; 8080; 443
network.peer.addressStable推荐字符串网络连接的对端地址 - IP 地址或 Unix 域套接字名称。10.1.2.80/tmp/my.sock
network.protocol.versionStable推荐字符串用于网络通信的协议的实际版本。[3]1.1; 2
url.schemeStable选择加入字符串The URI 方案组件,用于标识所使用的协议。http; https

[1] server.address 从客户端观察时,并且当通过中间设备通信时,server.address 应代表任何中间设备(例如代理)后面的服务器地址,如果可用。

[2] server.port 从客户端观察,并且在通过中介通信时,server.port 应表示任何中介(例如代理)后面的服务器端口,如果可用的话。

[3] network.protocol.version 如果协议版本受协商(例如,使用 ALPN),则此属性应设置为协商后的版本。如果实际协议版本未知,则此属性不应设置。

指标:http.client.active_requests

状态: 开发中

此指标是可选的。

名称Instrument TypeUnit (UCUM)描述Stability实体关联
http.client.active_requestsUpDownCounter{request}活动 HTTP 请求的数量。Development

Attributes

Stability需求级别Value Type描述Example Values
server.addressStable必需字符串服务器域名(如果无需反向 DNS 查找即可获得);否则,是 IP 地址或 Unix 域套接字名称。[1]example.com10.1.2.80/tmp/my.sock
server.portStable必需int服务器端口号。[2]80; 8080; 443
url.templateDevelopment有条件必需 如果可用。字符串低基数的 绝对路径引用模板。[3]/users/{id}; /users/:id; /users?id={id}
http.request.methodStable推荐字符串HTTP 请求方法。[4]GET; POST; HEAD
url.schemeStable选择加入字符串The URI 方案组件,用于标识所使用的协议。http; https

[1] server.address: 在 HTTP/1.1 中,当 请求目标 以其 绝对形式传递时,server.address 应与请求目标的 host 组件匹配。

在所有其他情况下,server.address 应与 HTTP/1.1 中 Host 标头或 HTTP/2 和 HTTP/3 中的 :authority 伪标头的 host 组件匹配。

[2] server.port: 对于 HTTP/1.1,当 请求目标 以其 绝对形式传递时,server.port 应与请求目标的 port 组件匹配。

在所有其他情况下,server.port 应与 HTTP/1.1 中 Host 标头或 HTTP/2 和 HTTP/3 中的 :authority 伪标头的 port 组件匹配。

[3] url.template: url.template 必须是低基数的。它通常在 HTTP 客户端上不可用,但应用程序或专门的 HTTP 仪器化可能知道它。

[4] http.request.method: HTTP 请求方法值应被仪器化“已知”。默认情况下,此约定定义“已知”方法为 RFC9110 中列出的方法,RFC5789 中定义的 PATCH 方法,以及 httpbis-safe-method-w-body 中定义的 QUERY 方法。

如果 HTTP 请求方法仪器不了解,则必须将 http.request.method 属性设置为 _OTHER

如果 HTTP 仪器最终可能将有效的 HTTP 请求方法转换为 _OTHER,则必须提供一种方法来覆盖已知 HTTP 方法的列表。如果此覆盖是通过环境变量完成的,则环境变量必须命名为 OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS,并支持一个逗号分隔的、区分大小写的已知 HTTP 方法列表(此列表必须完全覆盖默认已知方法,而不是默认方法之外的已知方法列表)。

HTTP 方法名称区分大小写,http.request.method 属性值必须精确匹配一个已知的 HTTP 方法名称。对于将 HTTP 方法视为不区分大小写的特定 Web 框架的仪器,应填充一个规范等效值。进行此操作的跟踪仪器还必须将 http.request.method_original 设置为原始值。


http.request.method 具有以下一组知名值。如果适用其中一个,则必须使用相应的名称;否则,可以使用自定义名称。

描述Stability
_OTHER仪器不了解的任何 HTTP 方法。Stable
CONNECTCONNECT 方法。Stable
DELETEDELETE 方法。Stable
GETGET 方法。Stable
HEADHEAD 方法。Stable
OPTIONSOPTIONS 方法。Stable
PATCHPATCH 方法。Stable
POSTPOST 方法。Stable
PUTPUT 方法。Stable
QUERYQUERY 方法。Development
TRACETRACE 方法。Stable