Struct SpanAttributes

Source
pub struct SpanAttributes {
    pub kind: Option<String>,
    pub span_name: Option<String>,
    pub attributes: HashMap<String, Value>,
    pub links: Vec<Link>,
    pub carrier: Option<HashMap<String, String>>,
    pub trigger: String,
}
Expand description

Data extracted from a Lambda event for span creation.

This struct contains all the information needed to create and configure an OpenTelemetry span, including custom attributes, span kind, links, and context propagation headers.

§Span Kind

The kind field accepts standard OpenTelemetry span kinds:

  • “SERVER” (default): Inbound request handling
  • “CLIENT”: Outbound calls
  • “PRODUCER”: Message/event production
  • “CONSUMER”: Message/event consumption
  • “INTERNAL”: Internal operations

§Span Name

For HTTP spans, the span_name is automatically generated from the HTTP method and route:

  • API Gateway V2: “GET /users/{id}” (with $default mapped to “/”)
  • API Gateway V1: “POST /orders”
  • ALB: “PUT /items/123”

§Attributes

Standard HTTP attributes following OpenTelemetry semantic conventions:

  • http.request.method: The HTTP method
  • url.path: The request path
  • url.query: The query string (if present)
  • url.scheme: The protocol scheme
  • network.protocol.version: The HTTP protocol version
  • http.route: The route pattern or resource path
  • client.address: The client’s IP address
  • user_agent.original: The user agent string
  • server.address: The server’s domain name or host

§Context Propagation

The carrier field supports both W3C Trace Context and AWS X-Ray headers:

  • traceparent: W3C format containing trace ID, span ID, and trace flags
  • tracestate: W3C vendor-specific trace information
  • x-amzn-trace-id: AWS X-Ray trace header format

§Examples

Basic usage with custom attributes:

use lambda_otel_lite::SpanAttributes;
use std::collections::HashMap;
use opentelemetry::Value;

let mut attributes = HashMap::new();
attributes.insert("custom.field".to_string(), Value::String("value".into()));

let span_attrs = SpanAttributes::builder()
    .attributes(attributes)
    .build();

Fields§

§kind: Option<String>

Optional span kind (defaults to SERVER if not provided) Valid values: “SERVER”, “CLIENT”, “PRODUCER”, “CONSUMER”, “INTERNAL”

§span_name: Option<String>

Optional span name. For HTTP spans, this should be “{http.method} {http.route}” Example: “GET /users/:id”

§attributes: HashMap<String, Value>

Custom attributes to add to the span. Follow OpenTelemetry semantic conventions for naming: https://opentelemetry.io/docs/specs/semconv/

§links: Vec<Link>

Optional span links for connecting related traces. Useful for batch processing or joining multiple workflows.

§carrier: Option<HashMap<String, String>>

Optional carrier headers for context propagation. Supports both W3C Trace Context and AWS X-Ray formats:

  • traceparent: W3C format containing trace ID, span ID, and trace flags
  • tracestate: W3C vendor-specific trace information
  • x-amzn-trace-id: AWS X-Ray trace header format
§trigger: String

The type of trigger for this Lambda invocation. Common values: “datasource”, “http”, “pubsub”, “timer”, “other” Custom values can be used for more specific triggers.

Implementations§

Source§

impl SpanAttributes

Source

pub fn builder() -> SpanAttributesBuilder

Create an instance of SpanAttributes using the builder syntax

Trait Implementations§

Source§

impl Default for SpanAttributes

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more