groups: - id: trace.http.client type: span extends: attributes.http.client span_kind: client brief: 'Semantic Convention for HTTP Client' stability: stable attributes: - ref: http.request.method sampling_relevant: true - ref: http.request.method_original requirement_level: conditionally_required: If and only if it's different than `http.request.method`. - ref: http.request.resend_count requirement_level: recommended: if and only if request was retried. - ref: http.request.header requirement_level: opt_in - ref: http.response.header requirement_level: opt_in - ref: server.address sampling_relevant: true - ref: server.port sampling_relevant: true - ref: url.full sampling_relevant: true requirement_level: required - ref: user_agent.original requirement_level: opt_in - ref: url.scheme - ref: network.peer.address - ref: network.peer.port requirement_level: recommended: If `network.peer.address` is set. - ref: network.transport requirement_level: opt_in note: > Generally `tcp` for `HTTP/1.0`, `HTTP/1.1`, and `HTTP/2`. Generally `udp` for `HTTP/3`. Other obscure implementations are possible. - id: trace.http.client.experimental type: attribute_group brief: 'Experimental attributes for HTTP Client spans' stability: experimental extends: attributes.http.client.experimental attributes: - ref: http.request.size requirement_level: opt_in - ref: http.response.size requirement_level: opt_in - ref: http.request.body.size requirement_level: opt_in - ref: http.response.body.size requirement_level: opt_in - id: trace.http.server type: span extends: attributes.http.server span_kind: server brief: 'Semantic Convention for HTTP Server' stability: stable attributes: - ref: http.request.method sampling_relevant: true - ref: http.request.method_original requirement_level: conditionally_required: If and only if it's different than `http.request.method`. - ref: http.route - ref: http.request.header sampling_relevant: true requirement_level: opt_in - ref: http.response.header requirement_level: opt_in - ref: server.address sampling_relevant: true - ref: server.port sampling_relevant: true - ref: network.local.address requirement_level: opt_in brief: Local socket address. Useful in case of a multi-IP host. - ref: network.local.port requirement_level: opt_in brief: Local socket port. Useful in case of a multi-port host. - ref: client.address sampling_relevant: true note: > The IP address of the original client behind all proxies, if known (e.g. from [Forwarded#for](https://developer.mozilla.org/docs/Web/HTTP/Headers/Forwarded#for), [X-Forwarded-For](https://developer.mozilla.org/docs/Web/HTTP/Headers/X-Forwarded-For), or a similar header). Otherwise, the immediate client peer address. examples: ['83.164.160.102'] - ref: client.port requirement_level: opt_in brief: The port of whichever client was captured in `client.address`. - ref: url.path requirement_level: required sampling_relevant: true - ref: url.query requirement_level: conditionally_required: If and only if one was received/sent. sampling_relevant: true - ref: url.scheme sampling_relevant: true - ref: user_agent.original sampling_relevant: true - ref: network.peer.address - ref: network.peer.port requirement_level: recommended: If `network.peer.address` is set. - ref: network.transport requirement_level: opt_in note: > Generally `tcp` for `HTTP/1.0`, `HTTP/1.1`, and `HTTP/2`. Generally `udp` for `HTTP/3`. Other obscure implementations are possible. - id: trace.http.server.experimental type: attribute_group brief: 'Experimental attributes for HTTP Server spans' stability: experimental attributes: - ref: http.request.size requirement_level: opt_in - ref: http.response.size requirement_level: opt_in - ref: http.request.body.size requirement_level: opt_in - ref: http.response.body.size requirement_level: opt_in