pub struct OtelExporter { /* private fields */ }Expand description
OpenTelemetry audit exporter.
Exports audit events as OpenTelemetry log records to an OTLP collector using gRPC protocol.
§Example
use bssh::server::audit::otel::OtelExporter;
use bssh::server::audit::exporter::AuditExporter;
use bssh::server::audit::event::{AuditEvent, EventType};
let exporter = OtelExporter::new("http://localhost:4317")?;
let event = AuditEvent::new(
EventType::AuthSuccess,
"alice".to_string(),
"session-123".to_string(),
);
exporter.export(event).await?;
exporter.close().await?;Implementations§
Source§impl OtelExporter
impl OtelExporter
Sourcepub fn new(endpoint: &str) -> Result<Self>
pub fn new(endpoint: &str) -> Result<Self>
Create a new OpenTelemetry exporter.
§Arguments
endpoint- OTLP endpoint URL (e.g., “http://localhost:4317” for local development, “https://otel-collector.example.com:4317” for production)
§TLS Requirements
For production deployments, it is strongly recommended to use HTTPS endpoints to ensure audit data is transmitted securely. HTTP endpoints should only be used for local testing or when the OTLP collector is on the same trusted network.
§Errors
Returns an error if:
- The endpoint URL is invalid
- The exporter cannot be initialized
Trait Implementations§
Source§impl AuditExporter for OtelExporter
impl AuditExporter for OtelExporter
Source§fn export<'life0, 'async_trait>(
&'life0 self,
event: AuditEvent,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn export<'life0, 'async_trait>(
&'life0 self,
event: AuditEvent,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Export a single audit event. Read more
Source§fn export_batch<'life0, 'life1, 'async_trait>(
&'life0 self,
events: &'life1 [AuditEvent],
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn export_batch<'life0, 'life1, 'async_trait>(
&'life0 self,
events: &'life1 [AuditEvent],
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Export multiple events in a batch. Read more
Auto Trait Implementations§
impl !RefUnwindSafe for OtelExporter
impl !UnwindSafe for OtelExporter
impl Freeze for OtelExporter
impl Send for OtelExporter
impl Sync for OtelExporter
impl Unpin for OtelExporter
impl UnsafeUnpin for OtelExporter
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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§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