The fragments present in the URI. Note that this contains the leading # character, while the `url.fragment` attribute does not.
Example#details
Changelog
v0.0.0
Raw JSON
{
"key": "http.fragment",
"brief": "The fragments present in the URI. Note that this contains the leading # character, while the `url.fragment` attribute does not.",
"type": "string",
"apply_scrubbing": {
"key": "auto"
},
"is_in_otel": false,
"visibility": "public",
"example": "#details",
"changelog": [
{
"version": "0.0.0"
}
]
}
The query string present in the URL. Note that this contains the leading ? character, while the `url.query` attribute does not.
Scrubbing ReasonQuery string values can contain sensitive information. Clients should attempt to scrub parameters that might contain sensitive information.
Example?foo=bar&bar=baz
Changelog
v0.0.0
Raw JSON
{
"key": "http.query",
"brief": "The query string present in the URL. Note that this contains the leading ? character, while the `url.query` attribute does not.",
"type": "string",
"apply_scrubbing": {
"key": "auto",
"reason": "Query string values can contain sensitive information. Clients should attempt to scrub parameters that might contain sensitive information."
},
"is_in_otel": false,
"visibility": "public",
"example": "?foo=bar&bar=baz",
"changelog": [
{
"version": "0.0.0"
}
]
}
{
"key": "http.request.body.decoded_size",
"brief": "The decoded body size of the request (in bytes).",
"type": "integer",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"example": 456,
"alias": [
"http.request_content_length_uncompressed"
],
"additional_context": [
"This is the size after content decoding. Set it only when the decoded size is actually known, for example by measuring a decompressed request stream.",
"Do not derive this from the `content-length` header, which always carries the encoded size. Use `http.request.body.size` for that."
],
"changelog": [
{
"version": "next",
"prs": [
574
],
"description": "Added http.request.body.decoded_size attribute"
}
]
}
This is the on-the-wire (encoded) size. The `content-length` header always carries the encoded size, so set this attribute whenever `content-length` is known, regardless of whether `content-encoding` is present.
The UNIX timestamp representing the time immediately after the browser finishes establishing the connection to the server to retrieve the resource. The timestamp value includes the time interval to establish the transport connection, as well as other time intervals such as TLS handshake and SOCKS authentication.
{
"key": "http.request.connection_end",
"brief": "The UNIX timestamp representing the time immediately after the browser finishes establishing the connection to the server to retrieve the resource. The timestamp value includes the time interval to establish the transport connection, as well as other time intervals such as TLS handshake and SOCKS authentication.",
"type": "double",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"example": 1732829555.15,
"changelog": [
{
"version": "0.4.0",
"prs": [
228
]
},
{
"version": "0.1.0",
"prs": [
134
]
},
{
"version": "0.0.0"
}
]
}
The UNIX timestamp representing the time immediately before the browser starts requesting the resource from the server, cache, or local resource. If the transport connection fails and the browser retires the request, the value returned will be the start of the retry request.
{
"key": "http.request.request_start",
"brief": "The UNIX timestamp representing the time immediately before the browser starts requesting the resource from the server, cache, or local resource. If the transport connection fails and the browser retires the request, the value returned will be the start of the retry request.",
"type": "double",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"example": 1732829555.51,
"changelog": [
{
"version": "0.4.0",
"prs": [
228
]
},
{
"version": "0.1.0",
"prs": [
134
]
},
{
"version": "0.0.0"
}
]
}
The UNIX timestamp representing the time immediately after the browser receives the last byte of the resource or immediately before the transport connection is closed, whichever comes first.
{
"key": "http.request.response_end",
"brief": "The UNIX timestamp representing the time immediately after the browser receives the last byte of the resource or immediately before the transport connection is closed, whichever comes first.",
"type": "double",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"example": 1732829555.89,
"changelog": [
{
"version": "0.4.0",
"prs": [
228
]
},
{
"version": "0.1.0",
"prs": [
134
]
},
{
"version": "0.0.0"
}
]
}
The UNIX timestamp representing the time immediately before the browser starts requesting the resource from the server, cache, or local resource. If the transport connection fails and the browser retires the request, the value returned will be the start of the retry request.
{
"key": "http.request.response_start",
"brief": "The UNIX timestamp representing the time immediately before the browser starts requesting the resource from the server, cache, or local resource. If the transport connection fails and the browser retires the request, the value returned will be the start of the retry request.",
"type": "double",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"example": 1732829555.7,
"changelog": [
{
"version": "0.4.0",
"prs": [
228
]
},
{
"version": "0.1.0",
"prs": [
134
]
},
{
"version": "0.0.0"
}
]
}
The UNIX timestamp representing the time immediately before the browser starts the handshake process to secure the current connection. If a secure connection is not used, the property returns zero.
{
"key": "http.request.secure_connection_start",
"brief": "The UNIX timestamp representing the time immediately before the browser starts the handshake process to secure the current connection. If a secure connection is not used, the property returns zero.",
"type": "double",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"example": 1732829555.73,
"changelog": [
{
"version": "0.4.0",
"prs": [
228
]
},
{
"version": "0.1.0",
"prs": [
134
]
},
{
"version": "0.0.0"
}
]
}
The time in seconds from the browser's timeorigin to when the first byte of the request's response was received. See https://web.dev/articles/ttfb#measure-resource-requests
{
"key": "http.request.time_to_first_byte",
"brief": "The time in seconds from the browser's timeorigin to when the first byte of the request's response was received. See https://web.dev/articles/ttfb#measure-resource-requests",
"type": "double",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"example": 1.032,
"changelog": [
{
"version": "0.4.0",
"prs": [
228
]
},
{
"version": "0.1.0",
"prs": [
131
]
}
]
}
The UNIX timestamp representing the timestamp immediately before dispatching the FetchEvent if a Service Worker thread is already running, or immediately before starting the Service Worker thread if it is not already running.
{
"key": "http.request.worker_start",
"brief": "The UNIX timestamp representing the timestamp immediately before dispatching the FetchEvent if a Service Worker thread is already running, or immediately before starting the Service Worker thread if it is not already running.",
"type": "double",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"example": 1732829553.68,
"changelog": [
{
"version": "0.4.0",
"prs": [
228
]
},
{
"version": "0.1.0",
"prs": [
130,
134
]
}
]
}
This is the size after content decoding. Set it only when the decoded size is actually known, for example from the browser Resource Timing `decodedBodySize` or by measuring a decompressed response stream.
Do not derive this from the `content-length` header, which always carries the encoded size. Use `http.response.body.size` for that.
{
"key": "http.response.body.decoded_size",
"brief": "The decoded body size of the response (in bytes).",
"type": "integer",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"example": 456,
"alias": [
"http.decoded_response_content_length",
"http.response_content_length_uncompressed"
],
"additional_context": [
"This is the size after content decoding. Set it only when the decoded size is actually known, for example from the browser Resource Timing `decodedBodySize` or by measuring a decompressed response stream.",
"Do not derive this from the `content-length` header, which always carries the encoded size. Use `http.response.body.size` for that."
],
"changelog": [
{
"version": "next",
"prs": [
574
],
"description": "Added http.response.body.decoded_size attribute"
}
]
}
{
"key": "http.response.status_text",
"brief": "The reason phrase of the HTTP response.",
"type": "string",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"example": "NOT FOUND",
"alias": [
"http.status_text"
],
"additional_context": [
"HTTP/2 and HTTP/3 do not carry a reason phrase. Do not set this attribute when the protocol provides none; use `http.response.status_code` instead."
],
"changelog": [
{
"version": "next",
"prs": [
574
],
"description": "Added http.response.status_text attribute"
}
]
}
{
"key": "http.route",
"brief": "The matched route, that is, the path template in the format used by the respective server framework.",
"type": "string",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": true,
"visibility": "public",
"examples": [
"/users/:id",
"my-controller/my-action/{id}",
"/posts"
],
"alias": [
"route"
],
"additional_context": [
"This attribute should primarily be set by server-side instrumentation that captures the framework route of an incoming request.",
"For `http.client` spans and client-side routing, use `url.template` instead."
],
"changelog": [
{
"version": "0.19.0",
"prs": [
505,
521
],
"description": "Added multiple examples, removed alias to `url.template`, added additional context"
},
{
"version": "0.1.0",
"prs": [
127
]
},
{
"version": "0.0.0"
}
]
}
The time in milliseconds the request spent in the server queue before processing began. Measured from the X-Request-Start header set by reverse proxies (e.g., Nginx, HAProxy, Heroku) to when the application started handling the request.
{
"key": "http.server.request.time_in_queue",
"brief": "The time in milliseconds the request spent in the server queue before processing began. Measured from the X-Request-Start header set by reverse proxies (e.g., Nginx, HAProxy, Heroku) to when the application started handling the request.",
"type": "double",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"example": 50,
"changelog": [
{
"version": "0.5.0",
"prs": [
267
]
}
]
}
Deprecated Attributes
These attributes are deprecated and should not be used in new code. See each attribute for migration guidance.
This attribute is being deprecated in favor of url.path, url.query and url.fragment. The value holds all three parts at once, so it has no single replacement.
Changelog
nextDocumented url.path, url.query and url.fragment as the replacements for http.target
{
"key": "http.target",
"brief": "The pathname and query string of the URL.",
"type": "string",
"apply_scrubbing": {
"key": "auto"
},
"is_in_otel": true,
"visibility": "public",
"example": "/test?foo=bar#buzz",
"deprecation": {
"reason": "This attribute is being deprecated in favor of url.path, url.query and url.fragment. The value holds all three parts at once, so it has no single replacement.",
"_status": null
},
"changelog": [
{
"version": "next",
"description": "Documented url.path, url.query and url.fragment as the replacements for http.target"
},
{
"version": "0.1.0",
"prs": [
61
]
},
{
"version": "0.0.0"
}
]
}