lambda_otel_utils::http_otel_layer

Struct HttpOtelLayer

Source
pub struct HttpOtelLayer<F> { /* private fields */ }
Expand description

A Tower layer that adds OpenTelemetry tracing to AWS Lambda functions handling HTTP events.

This layer creates spans for incoming HTTP requests and ensures proper context propagation. It also manages span lifecycle to ensure all telemetry is properly flushed within the same Lambda invocation.

§Examples

use lambda_runtime::{service_fn, Error, LambdaEvent};
use aws_lambda_events::event::apigw::ApiGatewayProxyRequest;
use lambda_runtime::tower::ServiceBuilder;
use opentelemetry::global;
use opentelemetry_sdk::trace::TracerProvider;
use lambda_otel_utils::http_otel_layer::HttpOtelLayer;

let tracer_provider = TracerProvider::builder().build();
let provider_clone = tracer_provider.clone();

let func = ServiceBuilder::new()
    .layer(HttpOtelLayer::new(move || {
        provider_clone.force_flush();
    }))
    .service(service_fn(handler));

Implementations§

Source§

impl<F> HttpOtelLayer<F>
where F: Fn() + Clone,

Source

pub fn new(flush_fn: F) -> Self

Trait Implementations§

Source§

impl<F: Clone> Clone for HttpOtelLayer<F>

Source§

fn clone(&self) -> HttpOtelLayer<F>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<S, F> Layer<S> for HttpOtelLayer<F>
where F: Fn() + Clone,

Source§

type Service = HttpOtelService<S, F>

The wrapped service
Source§

fn layer(&self, inner: S) -> Self::Service

Wrap the given service with the middleware, returning a new service that has been decorated with the middleware.

Auto Trait Implementations§

§

impl<F> Freeze for HttpOtelLayer<F>
where F: Freeze,

§

impl<F> RefUnwindSafe for HttpOtelLayer<F>
where F: RefUnwindSafe,

§

impl<F> Send for HttpOtelLayer<F>
where F: Send,

§

impl<F> Sync for HttpOtelLayer<F>
where F: Sync,

§

impl<F> Unpin for HttpOtelLayer<F>
where F: Unpin,

§

impl<F> UnwindSafe for HttpOtelLayer<F>
where F: UnwindSafe,

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T