pub struct TraceInterceptor;Expand description
Full-stack observability interceptor: structured log + OTLP span + Prometheus.
Use this instead of TelemetryLog when ArclyObservabilityPlugin is active.
Apply with #[UseInterceptors(TraceInterceptor)] on a handler or controller.
What it does per request:
- Creates an OpenTelemetry server span as a child of the incoming W3C parent.
- Records HTTP semantic-convention attributes on the span.
- Records
http_requests_totalcounter +http_request_duration_secondshistogram in the Prometheus registry. - Emits a
tracing::info/warn/error!log with all correlation fields.
Trait Implementations§
Source§impl Interceptor for TraceInterceptor
impl Interceptor for TraceInterceptor
fn around( &'static self, ctx: RequestContext, next: NextHandler, ) -> BoxFuture<'static, Response>
Auto Trait Implementations§
impl Freeze for TraceInterceptor
impl RefUnwindSafe for TraceInterceptor
impl Send for TraceInterceptor
impl Sync for TraceInterceptor
impl Unpin for TraceInterceptor
impl UnsafeUnpin for TraceInterceptor
impl UnwindSafe for TraceInterceptor
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request