diff --git a/generated/attributes/ai.md b/generated/attributes/ai.md index c8e70ce5..6b22b254 100644 --- a/generated/attributes/ai.md +++ b/generated/attributes/ai.md @@ -211,6 +211,7 @@ The reason why the model stopped generating. | Exists in OpenTelemetry | No | | Example | `COMPLETE` | | Deprecated | Yes, use `gen_ai.response.finish_reason` instead | +| Aliases | `gen_ai.response.finish_reasons` | ### ai.frequency_penalty @@ -223,6 +224,7 @@ Used to reduce repetitiveness of generated tokens. The higher the value, the str | Exists in OpenTelemetry | No | | Example | `0.5` | | Deprecated | Yes, use `gen_ai.request.frequency_penalty` instead | +| Aliases | `gen_ai.request.frequency_penalty` | ### ai.function_call @@ -235,6 +237,7 @@ For an AI model call, the function that was called. This is deprecated for OpenA | Exists in OpenTelemetry | No | | Example | `function_name` | | Deprecated | Yes, use `gen_ai.tool.name` instead | +| Aliases | `gen_ai.tool.name` | ### ai.generation_id @@ -247,6 +250,7 @@ Unique identifier for the completion. | Exists in OpenTelemetry | No | | Example | `gen_123abc` | | Deprecated | Yes, use `gen_ai.response.id` instead | +| Aliases | `gen_ai.response.id` | ### ai.input_messages @@ -285,6 +289,7 @@ The provider of the model. | Exists in OpenTelemetry | No | | Example | `openai` | | Deprecated | Yes, use `gen_ai.system` instead | +| Aliases | `gen_ai.system` | ### ai.pipeline.name @@ -297,6 +302,7 @@ The name of the AI pipeline. | Exists in OpenTelemetry | No | | Example | `Autofix Pipeline` | | Deprecated | Yes, use `gen_ai.pipeline.name` instead | +| Aliases | `gen_ai.pipeline.name` | ### ai.presence_penalty @@ -309,6 +315,7 @@ Used to reduce repetitiveness of generated tokens. Similar to frequency_penalty, | Exists in OpenTelemetry | No | | Example | `0.5` | | Deprecated | Yes, use `gen_ai.request.presence_penalty` instead | +| Aliases | `gen_ai.request.presence_penalty` | ### ai.prompt_tokens.used @@ -346,6 +353,7 @@ The seed, ideally models given the same seed and same other parameters will prod | Exists in OpenTelemetry | No | | Example | `1234567890` | | Deprecated | Yes, use `gen_ai.request.seed` instead | +| Aliases | `gen_ai.request.seed` | ### ai.streaming @@ -358,6 +366,7 @@ Whether the request was streamed back. | Exists in OpenTelemetry | No | | Example | `true` | | Deprecated | Yes, use `gen_ai.response.streaming` instead | +| Aliases | `gen_ai.response.streaming` | ### ai.temperature @@ -370,6 +379,7 @@ For an AI model call, the temperature parameter. Temperature essentially means h | Exists in OpenTelemetry | No | | Example | `0.1` | | Deprecated | Yes, use `gen_ai.request.temperature` instead | +| Aliases | `gen_ai.request.temperature` | ### ai.tool_calls @@ -406,6 +416,7 @@ Limits the model to only consider the K most likely next tokens, where K is an i | Exists in OpenTelemetry | No | | Example | `35` | | Deprecated | Yes, use `gen_ai.request.top_k` instead | +| Aliases | `gen_ai.request.top_k` | ### ai.top_p @@ -418,6 +429,7 @@ Limits the model to only consider tokens whose cumulative probability mass adds | Exists in OpenTelemetry | No | | Example | `0.7` | | Deprecated | Yes, use `gen_ai.request.top_p` instead | +| Aliases | `gen_ai.request.top_p` | ### ai.total_tokens.used @@ -430,4 +442,5 @@ The total number of tokens used to process the prompt. | Exists in OpenTelemetry | No | | Example | `30` | | Deprecated | Yes, use `gen_ai.usage.total_tokens` instead | +| Aliases | `gen_ai.usage.total_tokens` | diff --git a/generated/attributes/code.md b/generated/attributes/code.md index 8ea475f2..9780eb03 100644 --- a/generated/attributes/code.md +++ b/generated/attributes/code.md @@ -91,7 +91,7 @@ The line number in code.filepath best representing the operation. It SHOULD poin | Exists in OpenTelemetry | Yes | | Example | `42` | | Deprecated | Yes, use `code.line.number` instead | -| Aliases | `code.lineno` | +| Aliases | `code.line.number` | ### code.namespace diff --git a/generated/attributes/gen_ai.md b/generated/attributes/gen_ai.md index 82e81a40..321826c8 100644 --- a/generated/attributes/gen_ai.md +++ b/generated/attributes/gen_ai.md @@ -13,7 +13,6 @@ - [gen_ai.operation.name](#gen_aioperationname) - [gen_ai.operation.type](#gen_aioperationtype) - [gen_ai.pipeline.name](#gen_aipipelinename) - - [gen_ai.prompt](#gen_aiprompt) - [gen_ai.request.available_tools](#gen_airequestavailable_tools) - [gen_ai.request.frequency_penalty](#gen_airequestfrequency_penalty) - [gen_ai.request.max_tokens](#gen_airequestmax_tokens) @@ -47,6 +46,7 @@ - [gen_ai.usage.total_tokens](#gen_aiusagetotal_tokens) - [gen_ai.user.message](#gen_aiusermessage) - [Deprecated Attributes](#deprecated-attributes) + - [gen_ai.prompt](#gen_aiprompt) - [gen_ai.usage.completion_tokens](#gen_aiusagecompletion_tokens) - [gen_ai.usage.prompt_tokens](#gen_aiusageprompt_tokens) @@ -163,17 +163,6 @@ Name of the AI pipeline or chain being executed. | Example | `Autofix Pipeline` | | Aliases | `ai.pipeline.name` | -### gen_ai.prompt - -The input messages sent to the model - -| Property | Value | -| --- | --- | -| Type | `string` | -| Has PII | maybe | -| Exists in OpenTelemetry | Yes | -| Example | `[{"role": "user", "message": "hello"}]` | - ### gen_ai.request.available_tools The available tools for the model. It has to be a stringified version of an array of objects. @@ -218,6 +207,7 @@ The messages passed to the model. It has to be a stringified version of an array | Has PII | maybe | | Exists in OpenTelemetry | No | | Example | `[{"role": "system", "content": "Generate a random number."}, {"role": "user", "content": [{"text": "Generate a random number between 0 and 10.", "type": "text"}]}]` | +| Aliases | `ai.input_messages`, `gen_ai.prompt` | ### gen_ai.request.model @@ -545,6 +535,20 @@ The user message passed to the model. These attributes are deprecated and will be removed in a future version. Please use the recommended replacements. +### gen_ai.prompt + +The input messages sent to the model + +| Property | Value | +| --- | --- | +| Type | `string` | +| Has PII | maybe | +| Exists in OpenTelemetry | Yes | +| Example | `[{"role": "user", "message": "hello"}]` | +| Deprecated | Yes, use `gen_ai.request.messages` instead | +| Deprecation Reason | Deprecated, use gen_ai.request.messages with the new format instead. | +| Aliases | `ai.input_messages`, `gen_ai.request.messages` | + ### gen_ai.usage.completion_tokens The number of tokens used in the GenAI response (completion). diff --git a/generated/attributes/general.md b/generated/attributes/general.md index c962cf6b..b74030ad 100644 --- a/generated/attributes/general.md +++ b/generated/attributes/general.md @@ -155,7 +155,7 @@ The sentry release. | Exists in OpenTelemetry | No | | Example | `production` | | Deprecated | Yes, use `sentry.release` instead | -| Aliases | `sentry.release` | +| Aliases | `sentry.release`, `service.version` | ### replay_id diff --git a/generated/attributes/http.md b/generated/attributes/http.md index 11fac6ef..adea3b9d 100644 --- a/generated/attributes/http.md +++ b/generated/attributes/http.md @@ -21,7 +21,6 @@ - [http.request.secure_connection_start](#httprequestsecure_connection_start) - [http.response.body.size](#httpresponsebodysize) - [http.response.header.\](#httpresponseheaderkey) - - [http.response.header.content-length](#httpresponseheadercontentlength) - [http.response.size](#httpresponsesize) - [http.response.status_code](#httpresponsestatus_code) - [http.route](#httproute) @@ -32,6 +31,7 @@ - [http.method](#httpmethod) - [http.response_content_length](#httpresponse_content_length) - [http.response_transfer_size](#httpresponse_transfer_size) + - [http.response.header.content-length](#httpresponseheadercontentlength) - [http.scheme](#httpscheme) - [http.server_name](#httpserver_name) - [http.status_code](#httpstatus_code) @@ -243,18 +243,6 @@ HTTP response headers, \ being the normalized HTTP Header name (lowercase) | Has dynamic suffix | Yes | | Example | `http.response.header.custom-header=['foo', 'bar']` | -### http.response.header.content-length - -The size of the message body sent to the recipient (in bytes) - -| Property | Value | -| --- | --- | -| Type | `string` | -| Has PII | false | -| Exists in OpenTelemetry | Yes | -| Example | `http.response.header.custom-header=['foo', 'bar']` | -| Aliases | `http.response_content_length`, `http.response.body.size` | - ### http.response.size The transfer size of the response (in bytes). @@ -289,7 +277,7 @@ The matched route, that is, the path template in the format used by the respecti | Has PII | false | | Exists in OpenTelemetry | Yes | | Example | `/users/:id` | -| Aliases | `url.template` | +| Aliases | `route` | ## Deprecated Attributes @@ -319,7 +307,7 @@ The actual version of the protocol used for network communication. | Exists in OpenTelemetry | Yes | | Example | `1.1` | | Deprecated | Yes, use `network.protocol.version` instead | -| Aliases | `network.protocol.version` | +| Aliases | `network.protocol.version`, `net.protocol.version` | ### http.host @@ -333,7 +321,7 @@ The domain name. | Example | `example.com` | | Deprecated | Yes, use `server.address` instead | | Deprecation Reason | Deprecated, use one of `server.address` or `client.address`, depending on the usage | -| Aliases | `server.address`, `client.address` | +| Aliases | `server.address`, `client.address`, `http.server_name`, `net.host.name` | ### http.method @@ -374,6 +362,19 @@ The transfer size of the response (in bytes). | Deprecated | Yes, use `http.response.size` instead | | Aliases | `http.response.size` | +### http.response.header.content-length + +The size of the message body sent to the recipient (in bytes) + +| Property | Value | +| --- | --- | +| Type | `string` | +| Has PII | false | +| Exists in OpenTelemetry | Yes | +| Example | `http.response.header.custom-header=['foo', 'bar']` | +| Deprecated | Yes, use `http.response.body.size` instead | +| Aliases | `http.response_content_length`, `http.response.body.size` | + ### http.scheme The URI scheme component identifying the used protocol. @@ -398,7 +399,7 @@ The server domain name | Exists in OpenTelemetry | Yes | | Example | `example.com` | | Deprecated | Yes, use `server.address` instead | -| Aliases | `server.address` | +| Aliases | `server.address`, `net.host.name`, `http.host` | ### http.status_code @@ -437,7 +438,7 @@ The URL of the resource that was fetched. | Exists in OpenTelemetry | Yes | | Example | `https://example.com/test?foo=bar#buzz` | | Deprecated | Yes, use `url.full` instead | -| Aliases | `url.full`, `http.url` | +| Aliases | `url.full`, `url` | ### http.user_agent diff --git a/generated/attributes/net.md b/generated/attributes/net.md index cc9d2e83..9f2ed57d 100644 --- a/generated/attributes/net.md +++ b/generated/attributes/net.md @@ -34,7 +34,7 @@ Local address of the network connection - IP address or Unix domain socket name. | Exists in OpenTelemetry | Yes | | Example | `192.168.0.1` | | Deprecated | Yes, use `network.local.address` instead | -| Aliases | `network.local.address` | +| Aliases | `network.local.address`, `net.sock.host.addr` | ### net.host.name @@ -47,7 +47,7 @@ Server domain name if available without reverse DNS lookup; otherwise, IP addres | Exists in OpenTelemetry | Yes | | Example | `example.com` | | Deprecated | Yes, use `server.address` instead | -| Aliases | `server.address` | +| Aliases | `server.address`, `http.server_name`, `http.host` | ### net.host.port @@ -73,7 +73,7 @@ Peer address of the network connection - IP address or Unix domain socket name. | Exists in OpenTelemetry | Yes | | Example | `192.168.0.1` | | Deprecated | Yes, use `network.peer.address` instead | -| Aliases | `network.peer.address` | +| Aliases | `network.peer.address`, `net.sock.peer.addr` | ### net.peer.name @@ -125,7 +125,7 @@ The actual version of the protocol used for network communication. | Exists in OpenTelemetry | Yes | | Example | `1.1` | | Deprecated | Yes, use `network.protocol.version` instead | -| Aliases | `network.protocol.version` | +| Aliases | `network.protocol.version`, `http.flavor` | ### net.sock.family @@ -151,7 +151,7 @@ Local address of the network connection mapping to Unix domain socket name. | Exists in OpenTelemetry | Yes | | Example | `/var/my.sock` | | Deprecated | Yes, use `network.local.address` instead | -| Aliases | `network.local.address` | +| Aliases | `network.local.address`, `net.host.ip` | ### net.sock.host.port @@ -177,7 +177,7 @@ Peer address of the network connection - IP address | Exists in OpenTelemetry | Yes | | Example | `192.168.0.1` | | Deprecated | Yes, use `network.peer.address` instead | -| Aliases | `network.peer.address` | +| Aliases | `network.peer.address`, `net.peer.ip` | ### net.sock.peer.name diff --git a/generated/attributes/network.md b/generated/attributes/network.md index 7ebaa040..d4731293 100644 --- a/generated/attributes/network.md +++ b/generated/attributes/network.md @@ -48,6 +48,7 @@ Peer address of the network connection - IP address or Unix domain socket name. | Has PII | false | | Exists in OpenTelemetry | Yes | | Example | `10.1.2.80` | +| Aliases | `net.peer.ip`, `net.sock.peer.addr` | ### network.peer.port diff --git a/generated/attributes/params.md b/generated/attributes/params.md index 2a8dd5ed..7a18e661 100644 --- a/generated/attributes/params.md +++ b/generated/attributes/params.md @@ -2,10 +2,12 @@ # Params Attributes -- [Stable Attributes](#stable-attributes) +- [Deprecated Attributes](#deprecated-attributes) - [params.\](#paramskey) -## Stable Attributes +## Deprecated Attributes + +These attributes are deprecated and will be removed in a future version. Please use the recommended replacements. ### params.\ @@ -18,5 +20,6 @@ Decoded parameters extracted from a URL path. Usually added by client-side routi | Exists in OpenTelemetry | No | | Has dynamic suffix | Yes | | Example | `params.id='123'` | +| Deprecated | Yes, use `url.path.parameter.\` instead | | Aliases | `url.path.parameter.\` | diff --git a/generated/attributes/sentry.md b/generated/attributes/sentry.md index a1b498e9..18085ea8 100644 --- a/generated/attributes/sentry.md +++ b/generated/attributes/sentry.md @@ -17,7 +17,6 @@ - [sentry.origin](#sentryorigin) - [sentry.platform](#sentryplatform) - [sentry.profile_id](#sentryprofile_id) - - [sentry.release](#sentryrelease) - [sentry.replay_id](#sentryreplay_id) - [sentry.sdk.integrations](#sentrysdkintegrations) - [sentry.sdk.name](#sentrysdkname) @@ -27,6 +26,8 @@ - [sentry.server_sample_rate](#sentryserver_sample_rate) - [sentry.span.source](#sentryspansource) - [sentry.transaction](#sentrytransaction) +- [Deprecated Attributes](#deprecated-attributes) + - [sentry.release](#sentryrelease) ## Stable Attributes @@ -187,18 +188,6 @@ The id of the sentry profile. | Example | `123e4567e89b12d3a456426614174000` | | Aliases | `profile_id` | -### sentry.release - -The sentry release. - -| Property | Value | -| --- | --- | -| Type | `string` | -| Has PII | false | -| Exists in OpenTelemetry | No | -| Example | `7.0.0` | -| Aliases | `service.version`, `release` | - ### sentry.replay_id The id of the sentry replay. @@ -300,3 +289,20 @@ The sentry transaction (segment name). | Example | `GET /` | | Aliases | `transaction` | +## Deprecated Attributes + +These attributes are deprecated and will be removed in a future version. Please use the recommended replacements. + +### sentry.release + +The sentry release. + +| Property | Value | +| --- | --- | +| Type | `string` | +| Has PII | false | +| Exists in OpenTelemetry | No | +| Example | `7.0.0` | +| Deprecated | Yes, use `service.version` instead | +| Aliases | `service.version`, `release` | + diff --git a/generated/attributes/server.md b/generated/attributes/server.md index 77c5287a..40e716bb 100644 --- a/generated/attributes/server.md +++ b/generated/attributes/server.md @@ -18,7 +18,7 @@ Server domain name if available without reverse DNS lookup; otherwise, IP addres | Has PII | false | | Exists in OpenTelemetry | Yes | | Example | `example.com` | -| Aliases | `http.server_name`, `net.host.name` | +| Aliases | `http.server_name`, `net.host.name`, `http.host` | ### server.port diff --git a/generated/attributes/service.md b/generated/attributes/service.md index 96984ea7..dead7abf 100644 --- a/generated/attributes/service.md +++ b/generated/attributes/service.md @@ -29,5 +29,5 @@ The version string of the service API or implementation. The format is not defin | Has PII | false | | Exists in OpenTelemetry | Yes | | Example | `5.0.0` | -| Aliases | `sentry.release` | +| Aliases | `sentry.release`, `release` | diff --git a/generated/attributes/url.md b/generated/attributes/url.md index dd754a09..382c5998 100644 --- a/generated/attributes/url.md +++ b/generated/attributes/url.md @@ -47,7 +47,7 @@ The URL of the resource that was fetched. | Has PII | maybe | | Exists in OpenTelemetry | Yes | | Example | `https://example.com/test?foo=bar#buzz` | -| Aliases | `url`, `http.url` | +| Aliases | `http.url`, `url` | ### url.path @@ -109,7 +109,7 @@ The URI scheme component identifying the used protocol. ### url.template -The low-cardinality template of an absolute path reference. +The low-cardinality template of an [absolute path reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2). | Property | Value | | --- | --- | @@ -117,5 +117,4 @@ The low-cardinality template of an absolute path reference. | Has PII | false | | Exists in OpenTelemetry | Yes | | Example | `/users/:id` | -| Aliases | `http.route` | diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 4a6ef8c6..aaa1958d 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -74,6 +74,8 @@ export type AI_DOCUMENTS_TYPE = Array; * * Attribute defined in OTEL: No * + * Aliases: {@link GEN_AI_RESPONSE_FINISH_REASONS} `gen_ai.response.finish_reasons` + * * @deprecated Use {@link GEN_AI_RESPONSE_FINISH_REASON} (gen_ai.response.finish_reason) instead * @example "COMPLETE" */ @@ -95,6 +97,8 @@ export type AI_FINISH_REASON_TYPE = string; * * Attribute defined in OTEL: No * + * Aliases: {@link GEN_AI_REQUEST_FREQUENCY_PENALTY} `gen_ai.request.frequency_penalty` + * * @deprecated Use {@link GEN_AI_REQUEST_FREQUENCY_PENALTY} (gen_ai.request.frequency_penalty) instead * @example 0.5 */ @@ -116,6 +120,8 @@ export type AI_FREQUENCY_PENALTY_TYPE = number; * * Attribute defined in OTEL: No * + * Aliases: {@link GEN_AI_TOOL_NAME} `gen_ai.tool.name` + * * @deprecated Use {@link GEN_AI_TOOL_NAME} (gen_ai.tool.name) instead * @example "function_name" */ @@ -137,6 +143,8 @@ export type AI_FUNCTION_CALL_TYPE = string; * * Attribute defined in OTEL: No * + * Aliases: {@link GEN_AI_RESPONSE_ID} `gen_ai.response.id` + * * @deprecated Use {@link GEN_AI_RESPONSE_ID} (gen_ai.response.id) instead * @example "gen_123abc" */ @@ -221,6 +229,8 @@ export type AI_METADATA_TYPE = string; * * Attribute defined in OTEL: No * + * Aliases: {@link GEN_AI_SYSTEM} `gen_ai.system` + * * @deprecated Use {@link GEN_AI_SYSTEM} (gen_ai.system) instead * @example "openai" */ @@ -265,6 +275,8 @@ export type AI_MODEL_ID_TYPE = string; * * Attribute defined in OTEL: No * + * Aliases: {@link GEN_AI_PIPELINE_NAME} `gen_ai.pipeline.name` + * * @deprecated Use {@link GEN_AI_PIPELINE_NAME} (gen_ai.pipeline.name) instead * @example "Autofix Pipeline" */ @@ -306,6 +318,8 @@ export type AI_PREAMBLE_TYPE = string; * * Attribute defined in OTEL: No * + * Aliases: {@link GEN_AI_REQUEST_PRESENCE_PENALTY} `gen_ai.request.presence_penalty` + * * @deprecated Use {@link GEN_AI_REQUEST_PRESENCE_PENALTY} (gen_ai.request.presence_penalty) instead * @example 0.5 */ @@ -451,6 +465,8 @@ export type AI_SEARCH_RESULTS_TYPE = Array; * * Attribute defined in OTEL: No * + * Aliases: {@link GEN_AI_REQUEST_SEED} `gen_ai.request.seed` + * * @deprecated Use {@link GEN_AI_REQUEST_SEED} (gen_ai.request.seed) instead * @example "1234567890" */ @@ -472,6 +488,8 @@ export type AI_SEED_TYPE = string; * * Attribute defined in OTEL: No * + * Aliases: {@link GEN_AI_RESPONSE_STREAMING} `gen_ai.response.streaming` + * * @deprecated Use {@link GEN_AI_RESPONSE_STREAMING} (gen_ai.response.streaming) instead * @example true */ @@ -513,6 +531,8 @@ export type AI_TAGS_TYPE = string; * * Attribute defined in OTEL: No * + * Aliases: {@link GEN_AI_REQUEST_TEMPERATURE} `gen_ai.request.temperature` + * * @deprecated Use {@link GEN_AI_REQUEST_TEMPERATURE} (gen_ai.request.temperature) instead * @example 0.1 */ @@ -596,6 +616,8 @@ export type AI_TOOLS_TYPE = Array; * * Attribute defined in OTEL: No * + * Aliases: {@link GEN_AI_REQUEST_TOP_K} `gen_ai.request.top_k` + * * @deprecated Use {@link GEN_AI_REQUEST_TOP_K} (gen_ai.request.top_k) instead * @example 35 */ @@ -617,6 +639,8 @@ export type AI_TOP_K_TYPE = number; * * Attribute defined in OTEL: No * + * Aliases: {@link GEN_AI_REQUEST_TOP_P} `gen_ai.request.top_p` + * * @deprecated Use {@link GEN_AI_REQUEST_TOP_P} (gen_ai.request.top_p) instead * @example 0.7 */ @@ -658,6 +682,8 @@ export type AI_TOTAL_COST_TYPE = number; * * Attribute defined in OTEL: No * + * Aliases: {@link GEN_AI_USAGE_TOTAL_TOKENS} `gen_ai.usage.total_tokens` + * * @deprecated Use {@link GEN_AI_USAGE_TOTAL_TOKENS} (gen_ai.usage.total_tokens) instead * @example 30 */ @@ -1193,7 +1219,7 @@ export type CODE_LINE_NUMBER_TYPE = number; * * Attribute defined in OTEL: Yes * - * Aliases: {@link CODE_LINENO} `code.lineno` + * Aliases: {@link CODE_LINE_NUMBER} `code.line.number` * * @deprecated Use {@link CODE_LINE_NUMBER} (code.line.number) instead * @example 42 @@ -2128,6 +2154,9 @@ export type GEN_AI_PIPELINE_NAME_TYPE = string; * * Attribute defined in OTEL: Yes * + * Aliases: {@link AI_INPUT_MESSAGES} `ai.input_messages`, {@link GEN_AI_REQUEST_MESSAGES} `gen_ai.request.messages` + * + * @deprecated Use {@link GEN_AI_REQUEST_MESSAGES} (gen_ai.request.messages) instead - Deprecated, use gen_ai.request.messages with the new format instead. * @example "[{\"role\": \"user\", \"message\": \"hello\"}]" */ export const GEN_AI_PROMPT = 'gen_ai.prompt'; @@ -2210,6 +2239,8 @@ export type GEN_AI_REQUEST_MAX_TOKENS_TYPE = number; * * Attribute defined in OTEL: No * + * Aliases: {@link AI_INPUT_MESSAGES} `ai.input_messages`, {@link GEN_AI_PROMPT} `gen_ai.prompt` + * * @example "[{\"role\": \"system\", \"content\": \"Generate a random number.\"}, {\"role\": \"user\", \"content\": [{\"text\": \"Generate a random number between 0 and 10.\", \"type\": \"text\"}]}]" */ export const GEN_AI_REQUEST_MESSAGES = 'gen_ai.request.messages'; @@ -2947,7 +2978,7 @@ export type HTTP_DECODED_RESPONSE_CONTENT_LENGTH_TYPE = number; * * Attribute defined in OTEL: Yes * - * Aliases: {@link NETWORK_PROTOCOL_VERSION} `network.protocol.version` + * Aliases: {@link NETWORK_PROTOCOL_VERSION} `network.protocol.version`, {@link NET_PROTOCOL_VERSION} `net.protocol.version` * * @deprecated Use {@link NETWORK_PROTOCOL_VERSION} (network.protocol.version) instead * @example "1.1" @@ -2990,7 +3021,7 @@ export type HTTP_FRAGMENT_TYPE = string; * * Attribute defined in OTEL: Yes * - * Aliases: {@link SERVER_ADDRESS} `server.address`, {@link CLIENT_ADDRESS} `client.address` + * Aliases: {@link SERVER_ADDRESS} `server.address`, {@link CLIENT_ADDRESS} `client.address`, {@link HTTP_SERVER_NAME} `http.server_name`, {@link NET_HOST_NAME} `net.host.name` * * @deprecated Use {@link SERVER_ADDRESS} (server.address) instead - Deprecated, use one of `server.address` or `client.address`, depending on the usage * @example "example.com" @@ -3366,6 +3397,7 @@ export type HTTP_RESPONSE_HEADER_KEY_TYPE = Array; * * Aliases: {@link HTTP_RESPONSE_CONTENT_LENGTH} `http.response_content_length`, {@link HTTP_RESPONSE_BODY_SIZE} `http.response.body.size` * + * @deprecated Use {@link HTTP_RESPONSE_BODY_SIZE} (http.response.body.size) instead * @example "http.response.header.custom-header=['foo', 'bar']" */ export const HTTP_RESPONSE_HEADER_CONTENT_LENGTH = 'http.response.header.content-length'; @@ -3476,7 +3508,7 @@ export type HTTP_RESPONSE_TRANSFER_SIZE_TYPE = number; * * Attribute defined in OTEL: Yes * - * Aliases: {@link URL_TEMPLATE} `url.template` + * Aliases: {@link ROUTE} `route` * * @example "/users/:id" */ @@ -3521,7 +3553,7 @@ export type HTTP_SCHEME_TYPE = string; * * Attribute defined in OTEL: Yes * - * Aliases: {@link SERVER_ADDRESS} `server.address` + * Aliases: {@link SERVER_ADDRESS} `server.address`, {@link NET_HOST_NAME} `net.host.name`, {@link HTTP_HOST} `http.host` * * @deprecated Use {@link SERVER_ADDRESS} (server.address) instead * @example "example.com" @@ -3588,7 +3620,7 @@ export type HTTP_TARGET_TYPE = string; * * Attribute defined in OTEL: Yes * - * Aliases: {@link URL_FULL} `url.full`, {@link HTTP_URL} `http.url` + * Aliases: {@link URL_FULL} `url.full`, {@link URL} `url` * * @deprecated Use {@link URL_FULL} (url.full) instead * @example "https://example.com/test?foo=bar#buzz" @@ -4197,7 +4229,7 @@ export type NEL_TYPE_TYPE = string; * * Attribute defined in OTEL: Yes * - * Aliases: {@link NETWORK_LOCAL_ADDRESS} `network.local.address` + * Aliases: {@link NETWORK_LOCAL_ADDRESS} `network.local.address`, {@link NET_SOCK_HOST_ADDR} `net.sock.host.addr` * * @deprecated Use {@link NETWORK_LOCAL_ADDRESS} (network.local.address) instead * @example "192.168.0.1" @@ -4220,7 +4252,7 @@ export type NET_HOST_IP_TYPE = string; * * Attribute defined in OTEL: Yes * - * Aliases: {@link SERVER_ADDRESS} `server.address` + * Aliases: {@link SERVER_ADDRESS} `server.address`, {@link HTTP_SERVER_NAME} `http.server_name`, {@link HTTP_HOST} `http.host` * * @deprecated Use {@link SERVER_ADDRESS} (server.address) instead * @example "example.com" @@ -4266,7 +4298,7 @@ export type NET_HOST_PORT_TYPE = number; * * Attribute defined in OTEL: Yes * - * Aliases: {@link NETWORK_PEER_ADDRESS} `network.peer.address` + * Aliases: {@link NETWORK_PEER_ADDRESS} `network.peer.address`, {@link NET_SOCK_PEER_ADDR} `net.sock.peer.addr` * * @deprecated Use {@link NETWORK_PEER_ADDRESS} (network.peer.address) instead * @example "192.168.0.1" @@ -4354,7 +4386,7 @@ export type NET_PROTOCOL_NAME_TYPE = string; * * Attribute defined in OTEL: Yes * - * Aliases: {@link NETWORK_PROTOCOL_VERSION} `network.protocol.version` + * Aliases: {@link NETWORK_PROTOCOL_VERSION} `network.protocol.version`, {@link HTTP_FLAVOR} `http.flavor` * * @deprecated Use {@link NETWORK_PROTOCOL_VERSION} (network.protocol.version) instead * @example "1.1" @@ -4398,7 +4430,7 @@ export type NET_SOCK_FAMILY_TYPE = string; * * Attribute defined in OTEL: Yes * - * Aliases: {@link NETWORK_LOCAL_ADDRESS} `network.local.address` + * Aliases: {@link NETWORK_LOCAL_ADDRESS} `network.local.address`, {@link NET_HOST_IP} `net.host.ip` * * @deprecated Use {@link NETWORK_LOCAL_ADDRESS} (network.local.address) instead * @example "/var/my.sock" @@ -4444,7 +4476,7 @@ export type NET_SOCK_HOST_PORT_TYPE = number; * * Attribute defined in OTEL: Yes * - * Aliases: {@link NETWORK_PEER_ADDRESS} `network.peer.address` + * Aliases: {@link NETWORK_PEER_ADDRESS} `network.peer.address`, {@link NET_PEER_IP} `net.peer.ip` * * @deprecated Use {@link NETWORK_PEER_ADDRESS} (network.peer.address) instead * @example "192.168.0.1" @@ -4576,6 +4608,8 @@ export type NETWORK_LOCAL_PORT_TYPE = number; * * Attribute defined in OTEL: Yes * + * Aliases: {@link NET_PEER_IP} `net.peer.ip`, {@link NET_SOCK_PEER_ADDR} `net.sock.peer.addr` + * * @example "10.1.2.80" */ export const NETWORK_PEER_ADDRESS = 'network.peer.address'; @@ -4886,6 +4920,7 @@ export type OTEL_STATUS_DESCRIPTION_TYPE = string; * * Aliases: {@link URL_PATH_PARAMETER_KEY} `url.path.parameter.` * + * @deprecated Use {@link URL_PATH_PARAMETER_KEY} (url.path.parameter.) instead * @example "params.id='123'" */ export const PARAMS_KEY = 'params.'; @@ -5072,7 +5107,7 @@ export type QUERY_KEY_TYPE = string; * * Attribute defined in OTEL: No * - * Aliases: {@link SENTRY_RELEASE} `sentry.release` + * Aliases: {@link SENTRY_RELEASE} `sentry.release`, {@link SERVICE_VERSION} `service.version` * * @deprecated Use {@link SENTRY_RELEASE} (sentry.release) instead * @example "production" @@ -5511,6 +5546,7 @@ export type SENTRY_PROFILE_ID_TYPE = string; * * Aliases: {@link SERVICE_VERSION} `service.version`, {@link RELEASE} `release` * + * @deprecated Use {@link SERVICE_VERSION} (service.version) instead * @example "7.0.0" */ export const SENTRY_RELEASE = 'sentry.release'; @@ -5715,7 +5751,7 @@ export type SENTRY_TRANSACTION_TYPE = string; * * Attribute defined in OTEL: Yes * - * Aliases: {@link HTTP_SERVER_NAME} `http.server_name`, {@link NET_HOST_NAME} `net.host.name` + * Aliases: {@link HTTP_SERVER_NAME} `http.server_name`, {@link NET_HOST_NAME} `net.host.name`, {@link HTTP_HOST} `http.host` * * @example "example.com" */ @@ -5779,7 +5815,7 @@ export type SERVICE_NAME_TYPE = string; * * Attribute defined in OTEL: Yes * - * Aliases: {@link SENTRY_RELEASE} `sentry.release` + * Aliases: {@link SENTRY_RELEASE} `sentry.release`, {@link RELEASE} `release` * * @example "5.0.0" */ @@ -5984,7 +6020,7 @@ export type URL_FRAGMENT_TYPE = string; * * Attribute defined in OTEL: Yes * - * Aliases: {@link URL} `url`, {@link HTTP_URL} `http.url` + * Aliases: {@link HTTP_URL} `http.url`, {@link URL} `url` * * @example "https://example.com/test?foo=bar#buzz" */ @@ -6104,7 +6140,7 @@ export type URL_SCHEME_TYPE = string; // Path: model/attributes/url/url__template.json /** - * The low-cardinality template of an absolute path reference. `url.template` + * The low-cardinality template of an [absolute path reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2). `url.template` * * Attribute Value Type: `string` {@link URL_TEMPLATE_TYPE} * @@ -6112,8 +6148,6 @@ export type URL_SCHEME_TYPE = string; * * Attribute defined in OTEL: Yes * - * Aliases: {@link HTTP_ROUTE} `http.route` - * * @example "/users/:id" */ export const URL_TEMPLATE = 'url.template'; @@ -6462,7 +6496,6 @@ export type Attributes = { [GEN_AI_OPERATION_NAME]?: GEN_AI_OPERATION_NAME_TYPE; [GEN_AI_OPERATION_TYPE]?: GEN_AI_OPERATION_TYPE_TYPE; [GEN_AI_PIPELINE_NAME]?: GEN_AI_PIPELINE_NAME_TYPE; - [GEN_AI_PROMPT]?: GEN_AI_PROMPT_TYPE; [GEN_AI_REQUEST_AVAILABLE_TOOLS]?: GEN_AI_REQUEST_AVAILABLE_TOOLS_TYPE; [GEN_AI_REQUEST_FREQUENCY_PENALTY]?: GEN_AI_REQUEST_FREQUENCY_PENALTY_TYPE; [GEN_AI_REQUEST_MAX_TOKENS]?: GEN_AI_REQUEST_MAX_TOKENS_TYPE; @@ -6515,7 +6548,6 @@ export type Attributes = { [HTTP_REQUEST_SECURE_CONNECTION_START]?: HTTP_REQUEST_SECURE_CONNECTION_START_TYPE; [HTTP_RESPONSE_BODY_SIZE]?: HTTP_RESPONSE_BODY_SIZE_TYPE; [HTTP_RESPONSE_HEADER_KEY]?: HTTP_RESPONSE_HEADER_KEY_TYPE; - [HTTP_RESPONSE_HEADER_CONTENT_LENGTH]?: HTTP_RESPONSE_HEADER_CONTENT_LENGTH_TYPE; [HTTP_RESPONSE_SIZE]?: HTTP_RESPONSE_SIZE_TYPE; [HTTP_RESPONSE_STATUS_CODE]?: HTTP_RESPONSE_STATUS_CODE_TYPE; [HTTP_ROUTE]?: HTTP_ROUTE_TYPE; @@ -6563,7 +6595,6 @@ export type Attributes = { [OTEL_SCOPE_VERSION]?: OTEL_SCOPE_VERSION_TYPE; [OTEL_STATUS_CODE]?: OTEL_STATUS_CODE_TYPE; [OTEL_STATUS_DESCRIPTION]?: OTEL_STATUS_DESCRIPTION_TYPE; - [PARAMS_KEY]?: PARAMS_KEY_TYPE; [PREVIOUS_ROUTE]?: PREVIOUS_ROUTE_TYPE; [PROCESS_EXECUTABLE_NAME]?: PROCESS_EXECUTABLE_NAME_TYPE; [PROCESS_PID]?: PROCESS_PID_TYPE; @@ -6588,7 +6619,6 @@ export type Attributes = { [SENTRY_ORIGIN]?: SENTRY_ORIGIN_TYPE; [SENTRY_PLATFORM]?: SENTRY_PLATFORM_TYPE; [SENTRY_PROFILE_ID]?: SENTRY_PROFILE_ID_TYPE; - [SENTRY_RELEASE]?: SENTRY_RELEASE_TYPE; [SENTRY_REPLAY_ID]?: SENTRY_REPLAY_ID_TYPE; [SENTRY_SDK_INTEGRATIONS]?: SENTRY_SDK_INTEGRATIONS_TYPE; [SENTRY_SDK_NAME]?: SENTRY_SDK_NAME_TYPE; diff --git a/model/attributes/ai/ai__finish_reason.json b/model/attributes/ai/ai__finish_reason.json index e8474108..71c0cb51 100644 --- a/model/attributes/ai/ai__finish_reason.json +++ b/model/attributes/ai/ai__finish_reason.json @@ -10,5 +10,6 @@ "deprecation": { "_status": null, "replacement": "gen_ai.response.finish_reason" - } + }, + "alias": ["gen_ai.response.finish_reasons"] } diff --git a/model/attributes/ai/ai__frequency_penalty.json b/model/attributes/ai/ai__frequency_penalty.json index 59acfbbd..0f10afb4 100644 --- a/model/attributes/ai/ai__frequency_penalty.json +++ b/model/attributes/ai/ai__frequency_penalty.json @@ -10,5 +10,6 @@ "deprecation": { "_status": null, "replacement": "gen_ai.request.frequency_penalty" - } + }, + "alias": ["gen_ai.request.frequency_penalty"] } diff --git a/model/attributes/ai/ai__function_call.json b/model/attributes/ai/ai__function_call.json index 8223920f..6d8eb366 100644 --- a/model/attributes/ai/ai__function_call.json +++ b/model/attributes/ai/ai__function_call.json @@ -10,5 +10,6 @@ "deprecation": { "_status": null, "replacement": "gen_ai.tool.name" - } + }, + "alias": ["gen_ai.tool.name"] } diff --git a/model/attributes/ai/ai__generation_id.json b/model/attributes/ai/ai__generation_id.json index a75fab69..f9b16902 100644 --- a/model/attributes/ai/ai__generation_id.json +++ b/model/attributes/ai/ai__generation_id.json @@ -10,5 +10,6 @@ "deprecation": { "_status": null, "replacement": "gen_ai.response.id" - } + }, + "alias": ["gen_ai.response.id"] } diff --git a/model/attributes/ai/ai__model__provider.json b/model/attributes/ai/ai__model__provider.json index 8718efcc..313377a9 100644 --- a/model/attributes/ai/ai__model__provider.json +++ b/model/attributes/ai/ai__model__provider.json @@ -10,5 +10,6 @@ "deprecation": { "_status": null, "replacement": "gen_ai.system" - } + }, + "alias": ["gen_ai.system"] } diff --git a/model/attributes/ai/ai__pipeline__name.json b/model/attributes/ai/ai__pipeline__name.json index 85ccc63b..9dc7fdd7 100644 --- a/model/attributes/ai/ai__pipeline__name.json +++ b/model/attributes/ai/ai__pipeline__name.json @@ -10,5 +10,6 @@ "deprecation": { "_status": null, "replacement": "gen_ai.pipeline.name" - } + }, + "alias": ["gen_ai.pipeline.name"] } diff --git a/model/attributes/ai/ai__presence_penalty.json b/model/attributes/ai/ai__presence_penalty.json index d923f4a4..25668fe3 100644 --- a/model/attributes/ai/ai__presence_penalty.json +++ b/model/attributes/ai/ai__presence_penalty.json @@ -10,5 +10,6 @@ "deprecation": { "_status": null, "replacement": "gen_ai.request.presence_penalty" - } + }, + "alias": ["gen_ai.request.presence_penalty"] } diff --git a/model/attributes/ai/ai__seed.json b/model/attributes/ai/ai__seed.json index 794e62f4..a56f4d0e 100644 --- a/model/attributes/ai/ai__seed.json +++ b/model/attributes/ai/ai__seed.json @@ -10,5 +10,6 @@ "deprecation": { "_status": null, "replacement": "gen_ai.request.seed" - } + }, + "alias": ["gen_ai.request.seed"] } diff --git a/model/attributes/ai/ai__streaming.json b/model/attributes/ai/ai__streaming.json index d2c26e73..f20b5a8e 100644 --- a/model/attributes/ai/ai__streaming.json +++ b/model/attributes/ai/ai__streaming.json @@ -11,5 +11,6 @@ "deprecation": { "_status": null, "replacement": "gen_ai.response.streaming" - } + }, + "alias": ["gen_ai.response.streaming"] } diff --git a/model/attributes/ai/ai__temperature.json b/model/attributes/ai/ai__temperature.json index 0b40ae41..222f6d89 100644 --- a/model/attributes/ai/ai__temperature.json +++ b/model/attributes/ai/ai__temperature.json @@ -10,5 +10,6 @@ "deprecation": { "_status": null, "replacement": "gen_ai.request.temperature" - } + }, + "alias": ["gen_ai.request.temperature"] } diff --git a/model/attributes/ai/ai__top_k.json b/model/attributes/ai/ai__top_k.json index f8ef6df3..9262a49d 100644 --- a/model/attributes/ai/ai__top_k.json +++ b/model/attributes/ai/ai__top_k.json @@ -10,5 +10,6 @@ "deprecation": { "_status": null, "replacement": "gen_ai.request.top_k" - } + }, + "alias": ["gen_ai.request.top_k"] } diff --git a/model/attributes/ai/ai__top_p.json b/model/attributes/ai/ai__top_p.json index f18d9b2d..d961981c 100644 --- a/model/attributes/ai/ai__top_p.json +++ b/model/attributes/ai/ai__top_p.json @@ -10,5 +10,6 @@ "deprecation": { "_status": null, "replacement": "gen_ai.request.top_p" - } + }, + "alias": ["gen_ai.request.top_p"] } diff --git a/model/attributes/ai/ai__total_tokens__used.json b/model/attributes/ai/ai__total_tokens__used.json index e39fccf3..826233d5 100644 --- a/model/attributes/ai/ai__total_tokens__used.json +++ b/model/attributes/ai/ai__total_tokens__used.json @@ -11,5 +11,6 @@ "deprecation": { "_status": null, "replacement": "gen_ai.usage.total_tokens" - } + }, + "alias": ["gen_ai.usage.total_tokens"] } diff --git a/model/attributes/code/code__lineno.json b/model/attributes/code/code__lineno.json index 8d566162..5010d0b0 100644 --- a/model/attributes/code/code__lineno.json +++ b/model/attributes/code/code__lineno.json @@ -11,5 +11,5 @@ "_status": null, "replacement": "code.line.number" }, - "alias": ["code.lineno"] + "alias": ["code.line.number"] } diff --git a/model/attributes/gen_ai/gen_ai__prompt.json b/model/attributes/gen_ai/gen_ai__prompt.json index 8cec3f6e..44cf7f82 100644 --- a/model/attributes/gen_ai/gen_ai__prompt.json +++ b/model/attributes/gen_ai/gen_ai__prompt.json @@ -6,5 +6,11 @@ "key": "maybe" }, "is_in_otel": true, - "example": "[{\"role\": \"user\", \"message\": \"hello\"}]" + "deprecation": { + "_status": null, + "replacement": "gen_ai.request.messages", + "reason": "Deprecated, use gen_ai.request.messages with the new format instead." + }, + "example": "[{\"role\": \"user\", \"message\": \"hello\"}]", + "alias": ["ai.input_messages", "gen_ai.request.messages"] } diff --git a/model/attributes/gen_ai/gen_ai__request__messages.json b/model/attributes/gen_ai/gen_ai__request__messages.json index ce7ee28b..e41915f1 100644 --- a/model/attributes/gen_ai/gen_ai__request__messages.json +++ b/model/attributes/gen_ai/gen_ai__request__messages.json @@ -7,5 +7,5 @@ }, "is_in_otel": false, "example": "[{\"role\": \"system\", \"content\": \"Generate a random number.\"}, {\"role\": \"user\", \"content\": [{\"text\": \"Generate a random number between 0 and 10.\", \"type\": \"text\"}]}]", - "alias": [] + "alias": ["ai.input_messages", "gen_ai.prompt"] } diff --git a/model/attributes/http/http__flavor.json b/model/attributes/http/http__flavor.json index bef163e9..e3767100 100644 --- a/model/attributes/http/http__flavor.json +++ b/model/attributes/http/http__flavor.json @@ -11,5 +11,5 @@ "_status": null, "replacement": "network.protocol.version" }, - "alias": ["network.protocol.version"] + "alias": ["network.protocol.version", "net.protocol.version"] } diff --git a/model/attributes/http/http__host.json b/model/attributes/http/http__host.json index 983f5b6c..44454dd6 100644 --- a/model/attributes/http/http__host.json +++ b/model/attributes/http/http__host.json @@ -12,5 +12,5 @@ "replacement": "server.address", "reason": "Deprecated, use one of `server.address` or `client.address`, depending on the usage" }, - "alias": ["server.address", "client.address"] + "alias": ["server.address", "client.address", "http.server_name", "net.host.name"] } diff --git a/model/attributes/http/http__response__header__content-length.json b/model/attributes/http/http__response__header__content-length.json index 7cc68308..3ac2face 100644 --- a/model/attributes/http/http__response__header__content-length.json +++ b/model/attributes/http/http__response__header__content-length.json @@ -7,5 +7,9 @@ }, "is_in_otel": true, "example": "http.response.header.custom-header=['foo', 'bar']", + "deprecation": { + "_status": "normalize", + "replacement": "http.response.body.size" + }, "alias": ["http.response_content_length", "http.response.body.size"] } diff --git a/model/attributes/http/http__route.json b/model/attributes/http/http__route.json index a359461b..60d904e3 100644 --- a/model/attributes/http/http__route.json +++ b/model/attributes/http/http__route.json @@ -7,5 +7,5 @@ }, "is_in_otel": true, "example": "/users/:id", - "alias": ["url.template"] + "alias": ["route"] } diff --git a/model/attributes/http/http__server_name.json b/model/attributes/http/http__server_name.json index 303a37d5..6013bec5 100644 --- a/model/attributes/http/http__server_name.json +++ b/model/attributes/http/http__server_name.json @@ -11,5 +11,5 @@ "_status": null, "replacement": "server.address" }, - "alias": ["server.address"] + "alias": ["server.address", "net.host.name", "http.host"] } diff --git a/model/attributes/http/http__url.json b/model/attributes/http/http__url.json index 02635f96..c0bcd911 100644 --- a/model/attributes/http/http__url.json +++ b/model/attributes/http/http__url.json @@ -11,5 +11,5 @@ "_status": null, "replacement": "url.full" }, - "alias": ["url.full", "http.url"] + "alias": ["url.full", "url"] } diff --git a/model/attributes/net/net__host__ip.json b/model/attributes/net/net__host__ip.json index 65f0d84c..ed2f2842 100644 --- a/model/attributes/net/net__host__ip.json +++ b/model/attributes/net/net__host__ip.json @@ -11,5 +11,5 @@ "_status": null, "replacement": "network.local.address" }, - "alias": ["network.local.address"] + "alias": ["network.local.address", "net.sock.host.addr"] } diff --git a/model/attributes/net/net__host__name.json b/model/attributes/net/net__host__name.json index 8c3cc500..5750fdf8 100644 --- a/model/attributes/net/net__host__name.json +++ b/model/attributes/net/net__host__name.json @@ -11,5 +11,5 @@ "_status": null, "replacement": "server.address" }, - "alias": ["server.address"] + "alias": ["server.address", "http.server_name", "http.host"] } diff --git a/model/attributes/net/net__peer__ip.json b/model/attributes/net/net__peer__ip.json index fbc3dd2e..17cc4761 100644 --- a/model/attributes/net/net__peer__ip.json +++ b/model/attributes/net/net__peer__ip.json @@ -11,5 +11,5 @@ "_status": null, "replacement": "network.peer.address" }, - "alias": ["network.peer.address"] + "alias": ["network.peer.address", "net.sock.peer.addr"] } diff --git a/model/attributes/net/net__protocol__version.json b/model/attributes/net/net__protocol__version.json index 61765880..de85a32a 100644 --- a/model/attributes/net/net__protocol__version.json +++ b/model/attributes/net/net__protocol__version.json @@ -11,5 +11,5 @@ "_status": null, "replacement": "network.protocol.version" }, - "alias": ["network.protocol.version"] + "alias": ["network.protocol.version", "http.flavor"] } diff --git a/model/attributes/net/net__sock__host__addr.json b/model/attributes/net/net__sock__host__addr.json index 7eccb615..938b79bf 100644 --- a/model/attributes/net/net__sock__host__addr.json +++ b/model/attributes/net/net__sock__host__addr.json @@ -11,5 +11,5 @@ "_status": null, "replacement": "network.local.address" }, - "alias": ["network.local.address"] + "alias": ["network.local.address", "net.host.ip"] } diff --git a/model/attributes/net/net__sock__peer__addr.json b/model/attributes/net/net__sock__peer__addr.json index 4f0f4292..6b4ad892 100644 --- a/model/attributes/net/net__sock__peer__addr.json +++ b/model/attributes/net/net__sock__peer__addr.json @@ -11,5 +11,5 @@ "_status": null, "replacement": "network.peer.address" }, - "alias": ["network.peer.address"] + "alias": ["network.peer.address", "net.peer.ip"] } diff --git a/model/attributes/network/network__peer__address.json b/model/attributes/network/network__peer__address.json index 5293dc97..fede814d 100644 --- a/model/attributes/network/network__peer__address.json +++ b/model/attributes/network/network__peer__address.json @@ -6,5 +6,6 @@ "key": "false" }, "is_in_otel": true, - "example": "10.1.2.80" + "example": "10.1.2.80", + "alias": ["net.peer.ip", "net.sock.peer.addr"] } diff --git a/model/attributes/params/params__[key].json b/model/attributes/params/params__[key].json index 6bba2668..d6505e06 100644 --- a/model/attributes/params/params__[key].json +++ b/model/attributes/params/params__[key].json @@ -7,6 +7,10 @@ "key": "maybe" }, "is_in_otel": false, + "deprecation": { + "_status": "normalize", + "replacement": "url.path.parameter." + }, "example": "params.id='123'", "alias": ["url.path.parameter."] } diff --git a/model/attributes/release.json b/model/attributes/release.json index 1824e60d..e245818a 100644 --- a/model/attributes/release.json +++ b/model/attributes/release.json @@ -11,5 +11,5 @@ "_status": null, "replacement": "sentry.release" }, - "alias": ["sentry.release"] + "alias": ["sentry.release", "service.version"] } diff --git a/model/attributes/sentry/sentry__release.json b/model/attributes/sentry/sentry__release.json index 8c527afa..4013aa15 100644 --- a/model/attributes/sentry/sentry__release.json +++ b/model/attributes/sentry/sentry__release.json @@ -6,6 +6,10 @@ "key": "false" }, "is_in_otel": false, + "deprecation": { + "_status": "backfill", + "replacement": "service.version" + }, "example": "7.0.0", "alias": ["service.version", "release"] } diff --git a/model/attributes/server/server__address.json b/model/attributes/server/server__address.json index 4cf52df5..24598fa1 100644 --- a/model/attributes/server/server__address.json +++ b/model/attributes/server/server__address.json @@ -7,5 +7,5 @@ }, "is_in_otel": true, "example": "example.com", - "alias": ["http.server_name", "net.host.name"] + "alias": ["http.server_name", "net.host.name", "http.host"] } diff --git a/model/attributes/service/service__version.json b/model/attributes/service/service__version.json index 44c1233b..1c42baaa 100644 --- a/model/attributes/service/service__version.json +++ b/model/attributes/service/service__version.json @@ -7,5 +7,5 @@ }, "is_in_otel": true, "example": "5.0.0", - "alias": ["sentry.release"] + "alias": ["sentry.release", "release"] } diff --git a/model/attributes/url.json b/model/attributes/url.json index dbd0a833..4a698710 100644 --- a/model/attributes/url.json +++ b/model/attributes/url.json @@ -14,3 +14,4 @@ "alias": ["url.full", "http.url"], "sdks": ["javascript-browser", "javascript-node"] } + diff --git a/model/attributes/url/url__full.json b/model/attributes/url/url__full.json index a1a7eb07..7da909a0 100644 --- a/model/attributes/url/url__full.json +++ b/model/attributes/url/url__full.json @@ -7,5 +7,5 @@ }, "is_in_otel": true, "example": "https://example.com/test?foo=bar#buzz", - "alias": ["url", "http.url"] + "alias": ["http.url", "url"] } diff --git a/model/attributes/url/url__template.json b/model/attributes/url/url__template.json index 51664baf..5e737602 100644 --- a/model/attributes/url/url__template.json +++ b/model/attributes/url/url__template.json @@ -1,11 +1,10 @@ { "key": "url.template", - "brief": "The low-cardinality template of an absolute path reference.", + "brief": "The low-cardinality template of an [absolute path reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2).", "type": "string", "pii": { "key": "false" }, "is_in_otel": true, - "example": "/users/:id", - "alias": ["http.route"] + "example": "/users/:id" } diff --git a/shared/deprecated_attributes.json b/shared/deprecated_attributes.json index 51a88b4e..c7086a25 100644 --- a/shared/deprecated_attributes.json +++ b/shared/deprecated_attributes.json @@ -76,7 +76,7 @@ "_status": null, "replacement": "sentry.release" }, - "alias": ["sentry.release"] + "alias": ["sentry.release", "service.version"] }, { "key": "replay_id", @@ -168,7 +168,8 @@ "deprecation": { "_status": null, "replacement": "gen_ai.response.finish_reason" - } + }, + "alias": ["gen_ai.response.finish_reasons"] }, { "key": "ai.frequency_penalty", @@ -182,7 +183,8 @@ "deprecation": { "_status": null, "replacement": "gen_ai.request.frequency_penalty" - } + }, + "alias": ["gen_ai.request.frequency_penalty"] }, { "key": "ai.function_call", @@ -196,7 +198,8 @@ "deprecation": { "_status": null, "replacement": "gen_ai.tool.name" - } + }, + "alias": ["gen_ai.tool.name"] }, { "key": "ai.generation_id", @@ -210,7 +213,8 @@ "deprecation": { "_status": null, "replacement": "gen_ai.response.id" - } + }, + "alias": ["gen_ai.response.id"] }, { "key": "ai.input_messages", @@ -240,7 +244,8 @@ "deprecation": { "_status": null, "replacement": "gen_ai.system" - } + }, + "alias": ["gen_ai.system"] }, { "key": "ai.model_id", @@ -270,7 +275,8 @@ "deprecation": { "_status": null, "replacement": "gen_ai.pipeline.name" - } + }, + "alias": ["gen_ai.pipeline.name"] }, { "key": "ai.presence_penalty", @@ -284,7 +290,8 @@ "deprecation": { "_status": null, "replacement": "gen_ai.request.presence_penalty" - } + }, + "alias": ["gen_ai.request.presence_penalty"] }, { "key": "ai.prompt_tokens.used", @@ -329,7 +336,8 @@ "deprecation": { "_status": null, "replacement": "gen_ai.request.seed" - } + }, + "alias": ["gen_ai.request.seed"] }, { "key": "ai.streaming", @@ -344,7 +352,8 @@ "deprecation": { "_status": null, "replacement": "gen_ai.response.streaming" - } + }, + "alias": ["gen_ai.response.streaming"] }, { "key": "ai.temperature", @@ -358,7 +367,8 @@ "deprecation": { "_status": null, "replacement": "gen_ai.request.temperature" - } + }, + "alias": ["gen_ai.request.temperature"] }, { "key": "ai.tool_calls", @@ -400,7 +410,8 @@ "deprecation": { "_status": null, "replacement": "gen_ai.request.top_k" - } + }, + "alias": ["gen_ai.request.top_k"] }, { "key": "ai.top_p", @@ -414,7 +425,8 @@ "deprecation": { "_status": null, "replacement": "gen_ai.request.top_p" - } + }, + "alias": ["gen_ai.request.top_p"] }, { "key": "ai.total_tokens.used", @@ -429,7 +441,8 @@ "deprecation": { "_status": null, "replacement": "gen_ai.usage.total_tokens" - } + }, + "alias": ["gen_ai.usage.total_tokens"] }, { "key": "code.filepath", @@ -474,7 +487,7 @@ "_status": null, "replacement": "code.line.number" }, - "alias": ["code.lineno"] + "alias": ["code.line.number"] }, { "key": "code.namespace", @@ -567,6 +580,22 @@ }, "alias": ["db.system.name"] }, + { + "key": "gen_ai.prompt", + "brief": "The input messages sent to the model", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": true, + "deprecation": { + "_status": null, + "replacement": "gen_ai.request.messages", + "reason": "Deprecated, use gen_ai.request.messages with the new format instead." + }, + "example": "[{\"role\": \"user\", \"message\": \"hello\"}]", + "alias": ["ai.input_messages", "gen_ai.request.messages"] + }, { "key": "gen_ai.usage.completion_tokens", "brief": "The number of tokens used in the GenAI response (completion).", @@ -625,7 +654,7 @@ "_status": null, "replacement": "network.protocol.version" }, - "alias": ["network.protocol.version"] + "alias": ["network.protocol.version", "net.protocol.version"] }, { "key": "http.host", @@ -641,7 +670,7 @@ "replacement": "server.address", "reason": "Deprecated, use one of `server.address` or `client.address`, depending on the usage" }, - "alias": ["server.address", "client.address"] + "alias": ["server.address", "client.address", "http.server_name", "net.host.name"] }, { "key": "http.method", @@ -658,6 +687,21 @@ }, "alias": ["http.request.method"] }, + { + "key": "http.response.header.content-length", + "brief": "The size of the message body sent to the recipient (in bytes)", + "type": "string", + "pii": { + "key": "false" + }, + "is_in_otel": true, + "example": "http.response.header.custom-header=['foo', 'bar']", + "deprecation": { + "_status": "normalize", + "replacement": "http.response.body.size" + }, + "alias": ["http.response_content_length", "http.response.body.size"] + }, { "key": "http.response_content_length", "brief": "The encoded body size of the response (in bytes).", @@ -716,7 +760,7 @@ "_status": null, "replacement": "server.address" }, - "alias": ["server.address"] + "alias": ["server.address", "net.host.name", "http.host"] }, { "key": "http.status_code", @@ -761,7 +805,7 @@ "_status": null, "replacement": "url.full" }, - "alias": ["url.full", "http.url"] + "alias": ["url.full", "url"] }, { "key": "http.user_agent", @@ -791,7 +835,7 @@ "_status": null, "replacement": "network.local.address" }, - "alias": ["network.local.address"] + "alias": ["network.local.address", "net.sock.host.addr"] }, { "key": "net.host.name", @@ -806,7 +850,7 @@ "_status": null, "replacement": "server.address" }, - "alias": ["server.address"] + "alias": ["server.address", "http.server_name", "http.host"] }, { "key": "net.host.port", @@ -836,7 +880,7 @@ "_status": null, "replacement": "network.peer.address" }, - "alias": ["network.peer.address"] + "alias": ["network.peer.address", "net.sock.peer.addr"] }, { "key": "net.peer.name", @@ -896,7 +940,7 @@ "_status": null, "replacement": "network.protocol.version" }, - "alias": ["network.protocol.version"] + "alias": ["network.protocol.version", "http.flavor"] }, { "key": "net.sock.family", @@ -926,7 +970,7 @@ "_status": null, "replacement": "network.local.address" }, - "alias": ["network.local.address"] + "alias": ["network.local.address", "net.host.ip"] }, { "key": "net.sock.host.port", @@ -956,7 +1000,7 @@ "_status": null, "replacement": "network.peer.address" }, - "alias": ["network.peer.address"] + "alias": ["network.peer.address", "net.peer.ip"] }, { "key": "net.sock.peer.name", @@ -1002,6 +1046,22 @@ }, "alias": ["network.transport"] }, + { + "key": "params.", + "brief": "Decoded parameters extracted from a URL path. Usually added by client-side routing frameworks like vue-router.", + "has_dynamic_suffix": true, + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "deprecation": { + "_status": "normalize", + "replacement": "url.path.parameter." + }, + "example": "params.id='123'", + "alias": ["url.path.parameter."] + }, { "key": "query.", "brief": "An item in a query string. Usually added by client-side routing frameworks like vue-router.", @@ -1017,6 +1077,21 @@ "reason": "Instead of sending items individually in query., they should be sent all together with url.query." }, "example": "query.id='123'" + }, + { + "key": "sentry.release", + "brief": "The sentry release.", + "type": "string", + "pii": { + "key": "false" + }, + "is_in_otel": false, + "deprecation": { + "_status": "backfill", + "replacement": "service.version" + }, + "example": "7.0.0", + "alias": ["service.version", "release"] } ] } diff --git a/test/attributes.test.ts b/test/attributes.test.ts index e0309881..e7813785 100644 --- a/test/attributes.test.ts +++ b/test/attributes.test.ts @@ -125,6 +125,174 @@ describe('attribute json', async () => { expect(missingAliases).toEqual([]); }); + + it('should not be a replacement of itself', async () => { + if (!content.deprecation?.replacement) { + return; + } + const replacement = content.deprecation?.replacement; + expect(content.key !== replacement); + }); + + it('should not alias itself', async () => { + if (!content.alias || content.alias.length === 0) { + return; + } + for (const alias of content.alias) { + expect(content.key !== alias); + } + }); }); } }); + +describe('alias group consistency', async () => { + const filesIterator = await fs.promises.glob(`${traceFolders}/**/*.json`); + const files = await Array.fromAsync(filesIterator); + + // Load all attributes + const attributes = new Map(); + for (const file of files) { + const content: AttributeJson = JSON.parse(await fs.promises.readFile(file, 'utf-8')); + attributes.set(content.key, content); + } + + it('aliases should be symmetric', () => { + // Build alias groups: if X has aliases [Y, Z], then the group is [X, Y, Z] + const aliasGroups = new Map>(); + const processedKeys = new Set(); + + for (const [key, content] of attributes) { + if (processedKeys.has(key)) continue; + + if (!content.alias || content.alias.length === 0) continue; + + // Create the group with the current key and all its aliases + const group = new Set([key, ...content.alias]); + + // Mark all keys in this group as processed + for (const groupKey of group) { + processedKeys.add(groupKey); + } + + // Store the group using a canonical key (sorted first key) + const canonicalKey = Array.from(group).sort()[0] as string; + aliasGroups.set(canonicalKey, group); + } + + const failedGroups: Array<{ group: string[]; missingAliases: Array<{ key: string; missing: string[] }> }> = []; + + // Validate each group + for (const [canonicalKey, group] of aliasGroups) { + const groupArray = Array.from(group).sort(); + const missingAliases: Array<{ key: string; missing: string[] }> = []; + + for (const key of groupArray) { + const attribute = attributes.get(key); + if (!attribute) { + // Key doesn't exist, skip validation for this key + continue; + } + + const expectedAliases = groupArray.filter((k) => k !== key).sort(); + const actualAliases = (attribute.alias || []).sort(); + + const missing = expectedAliases.filter((alias) => !actualAliases.includes(alias)); + + if (missing.length > 0) { + missingAliases.push({ key, missing }); + } + } + + if (missingAliases.length > 0) { + failedGroups.push({ + group: groupArray, + missingAliases, + }); + } + } + + if (failedGroups.length > 0) { + const errorMessages = failedGroups + .map(({ group, missingAliases }) => { + const groupStr = `[${group.join(', ')}]`; + const missingStr = missingAliases + .map(({ key, missing }) => ` ${key} is missing aliases: [${missing.join(', ')}]`) + .join('\n'); + return `Group ${groupStr}:\n${missingStr}`; + }) + .join('\n\n'); + + throw new Error(`Attribute alias relationship should be symmetric:\n\n${errorMessages}`); + } + }); + + it('should have only one non-deprecated attribute per alias group', () => { + // Build alias groups: if X has aliases [Y, Z], then the group is [X, Y, Z] + const aliasGroups = new Map>(); + const processedKeys = new Set(); + + for (const [key, content] of attributes) { + if (processedKeys.has(key)) continue; + + if (!content.alias || content.alias.length === 0) continue; + + // Create the group with the current key and all its aliases + const group = new Set([key, ...content.alias]); + + // Mark all keys in this group as processed + for (const groupKey of group) { + processedKeys.add(groupKey); + } + + // Store the group using a canonical key (sorted first key) + const canonicalKey = Array.from(group).sort()[0] as string; + aliasGroups.set(canonicalKey, group); + } + + const failedGroups: Array<{ group: string[]; nonDeprecatedAttributes: string[] }> = []; + + // Validate each group has only one non-deprecated attribute + for (const [canonicalKey, group] of aliasGroups) { + const groupArray = Array.from(group).sort(); + const nonDeprecatedAttributes: string[] = []; + + for (const key of groupArray) { + const attribute = attributes.get(key); + if (!attribute) { + // Key doesn't exist, skip validation for this key + continue; + } + + // If the attribute doesn't have deprecation, it's canonical + if (!attribute.deprecation) { + nonDeprecatedAttributes.push(key); + } + } + + if (nonDeprecatedAttributes.length !== 1) { + failedGroups.push({ + group: groupArray, + nonDeprecatedAttributes, + }); + } + } + + if (failedGroups.length > 0) { + const errorMessages = failedGroups + .map(({ group, nonDeprecatedAttributes }) => { + const groupStr = `[${group.join(', ')}]`; + const nonDeprecatedStr = + nonDeprecatedAttributes.length === 0 + ? 'no non-deprecated attributes' + : `${nonDeprecatedAttributes.length} non-deprecated attributes: [${nonDeprecatedAttributes.join(', ')}]`; + return `Group ${groupStr}\nhas ${nonDeprecatedStr}`; + }) + .join('\n'); + + throw new Error( + `Each group of attributes that alias to eachother should contain a single non-deprecated attribute.\n\n${errorMessages}`, + ); + } + }); +});