HTTP

HTTP 属性

本文档定义了 HTTP 命名空间中的语义约定属性。

Attributes

StabilityValue Type描述Example Values
http.connection.stateDevelopment字符串HTTP 连接池中 HTTP 连接的状态。active; idle
http.request.body.sizeDevelopmentint请求 payload body 的大小(以字节为单位)。这是传输的字节数,不包括标头,通常(但不总是)存在于 Content-Length 标头中。对于使用传输编码的请求,这应该是压缩后的大小。3495
http.request.header.<key>Stablestring[]HTTP 请求标头,<key> 是规范化的 HTTP 标头名称(小写),值是标头的值。[1]["application/json"]; ["1.2.3.4", "1.2.3.5"]
http.request.methodStable字符串HTTP 请求方法。[2]GET; POST; HEAD
http.request.method_originalStable字符串客户端在请求行中发送的原始 HTTP 方法。GeT; ACL; foo
http.request.resend_countStableint请求重发尝试的序号(出于任何原因,包括重定向)。[3]3
http.request.sizeDevelopmentint请求的总大小(以字节为单位)。这应该是通过网络传输的总字节数,包括请求行(HTTP/1.1)、帧(HTTP/2 和 HTTP/3)、标头以及请求体(如果存在)。1437
http.response.body.sizeDevelopmentint响应 payload body 的大小(以字节为单位)。这是传输的字节数,不包括标头,通常(但不总是)存在于 Content-Length 标头中。对于使用传输编码的请求,这应该是压缩后的大小。3495
http.response.header.<key>Stablestring[]HTTP 响应标头,<key> 是规范化的 HTTP 标头名称(小写),值是标头的值。[4]["application/json"]; ["abc", "def"]
http.response.sizeDevelopmentint响应的总大小(以字节为单位)。这应该是通过网络传输的总字节数,包括状态行(HTTP/1.1)、帧(HTTP/2 和 HTTP/3)、标头以及响应体和 trailers(如果存在)。1437
http.response.status_codeStableintHTTP 响应状态码.200
http.routeStable字符串请求的匹配路由模板。这必须是低基数的,并包含所有静态路径段,动态路径段用占位符表示。/users/:userID?; my-controller/my-action/{id?}

[1] http.request.header.<key>: 仪器应要求显式配置要捕获哪些标头。包含所有请求标头可能存在安全风险——显式配置有助于避免泄露敏感信息。

User-Agent 标头已在 user_agent.original 属性中捕获。用户可以显式配置仪器来捕获它们,即使不推荐。

属性值必须由数组形式的多个标头值组成,或者是一个包含可能被逗号连接的字符串的单项数组,具体取决于 HTTP 库访问标头的方式。

示例

  • 标头 Content-Type: application/json 应被记录为 http.request.header.content-type 属性,值为 ["application/json"]
  • 标头 X-Forwarded-For: 1.2.3.4, 1.2.3.5 应被记录为 http.request.header.x-forwarded-for 属性,值为 ["1.2.3.4", "1.2.3.5"]["1.2.3.4, 1.2.3.5"],具体取决于 HTTP 库。

[2] 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 设置为原始值。

[3] http.request.resend_count: 每次客户端重发 HTTP 请求时,都应更新重发计数,无论重发的原因为何(例如,重定向、授权失败、503 服务器不可用、网络问题或其他任何原因)。

[4] http.response.header.<key>: 仪器应要求显式配置要捕获哪些标头。包含所有响应标头可能存在安全风险——显式配置有助于避免泄露敏感信息。

用户可以显式配置仪器来捕获它们,即使不推荐。

属性值必须由数组形式的多个标头值组成,或者是一个包含可能被逗号连接的字符串的单项数组,具体取决于 HTTP 库访问标头的方式。

示例

  • 标头 Content-Type: application/json 应被记录为 http.request.response.content-type 属性,值为 ["application/json"]
  • 标头 My-custom-header: abc, def 应被记录为 http.response.header.my-custom-header 属性,值为 ["abc", "def"]["abc, def"],具体取决于 HTTP 库。

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

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

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

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


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

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

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 属性

描述了已弃用的 HTTP 属性。

Attributes

StabilityValue Type描述Example Values
http.client_ipDeprecated
已替换为 client.address
字符串已弃用,请改用 client.address83.164.160.102
http.flavorDeprecated
已拆分为 network.protocol.namenetwork.protocol.version
字符串已弃用,请改用 network.protocol.namenetwork.protocol.version1.0; 1.1; 2.0
http.hostDeprecated
根据用法,已替换为 server.addressclient.addresshttp.request.header.host 之一。
字符串已弃用,请根据用法改用 server.addressclient.addresshttp.request.header.host 之一。www.example.org
http.methodDeprecated
已替换为 http.request.method
字符串已弃用,请改用 http.request.methodGET; POST; HEAD
http.request_content_lengthDeprecated
已替换为 http.request.header.content-length
int已弃用,请改用 http.request.header.content-length3495
http.request_content_length_uncompressedDeprecated
已替换为 http.request.body.size
int已弃用,请改用 http.request.body.size5493
http.response_content_lengthDeprecated
已替换为 http.response.header.content-length
int已弃用,请改用 http.response.header.content-length3495
http.response_content_length_uncompressedDeprecated
已替换为 http.response.body.size
int已弃用,请改用 http.response.body.size5493
http.schemeDeprecated
已替换为 url.scheme
字符串已弃用,请改用 url.schemehttp; https
http.server_nameDeprecated
已替换为 server.address
字符串已弃用,请改用 server.addressexample.com
http.status_codeDeprecated
已替换为 http.response.status_code
int已弃用,请改用 http.response.status_code200
http.targetDeprecated
已拆分为 url.pathurl.query
字符串已弃用,请改用 url.pathurl.query/search?q=OpenTelemetry#SemConv
http.urlDeprecated
已替换为 url.full
字符串已弃用,请改用 url.fullhttps://www.foo.bar/search?q=OpenTelemetry#SemConv
http.user_agentDeprecated
已替换为 user_agent.original
字符串已弃用,请改用 user_agent.originalCERN-LineMode/2.15 libwww/2.17b3; Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1

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

描述Stability
1.0HTTP/1.0Development
1.1HTTP/1.1Development
2.0HTTP/2Development
3.0HTTP/3Development
QUICQUIC 协议。Development
SPDYSPDY 协议。Development