1414//! [observability.usage]
1515//! database = true # Enable database logging (default)
1616//!
17- //! [observability.usage.otlp]
18- //! enabled = true
19- //! endpoint = "http://localhost:4317" # or inherit from tracing.otlp
17+ //! # Fan out to multiple OTLP endpoints:
18+ //! [[observability.usage.otlp]]
19+ //! name = "grafana"
20+ //! endpoint = "https://otlp-gateway.grafana.net/otlp"
21+ //! headers = { Authorization = "Basic xxx" }
22+ //!
23+ //! [[observability.usage.otlp]]
24+ //! name = "datadog"
25+ //! endpoint = "https://otel.datadoghq.com"
26+ //! headers = { "DD-API-KEY" = "xxx" }
2027//! ```
2128
2229use std:: sync:: Arc ;
@@ -48,7 +55,7 @@ pub trait UsageSink: Send + Sync {
4855 async fn write_batch ( & self , entries : & [ UsageLogEntry ] ) -> Result < usize , UsageSinkError > ;
4956
5057 /// Get the sink name for logging/metrics.
51- fn name ( & self ) -> & ' static str ;
58+ fn name ( & self ) -> & str ;
5259}
5360
5461/// Errors from usage sinks.
@@ -138,7 +145,7 @@ impl UsageSink for DatabaseSink {
138145 }
139146 }
140147
141- fn name ( & self ) -> & ' static str {
148+ fn name ( & self ) -> & str {
142149 "database"
143150 }
144151}
@@ -160,6 +167,7 @@ impl UsageSink for DatabaseSink {
160167/// Requires the `otlp` feature.
161168#[ cfg( feature = "otlp" ) ]
162169pub struct OtlpSink {
170+ name : String ,
163171 logger_provider : opentelemetry_sdk:: logs:: SdkLoggerProvider ,
164172 logger : opentelemetry_sdk:: logs:: SdkLogger ,
165173}
@@ -203,7 +211,14 @@ impl OtlpSink {
203211
204212 let logger = provider. logger ( "hadrian.usage" ) ;
205213
214+ let name = config
215+ . name
216+ . clone ( )
217+ . or_else ( || config. endpoint . clone ( ) )
218+ . unwrap_or_else ( || "otlp" . to_string ( ) ) ;
219+
206220 Ok ( Self {
221+ name,
207222 logger_provider : provider,
208223 logger,
209224 } )
@@ -484,8 +499,8 @@ impl UsageSink for OtlpSink {
484499 Ok ( success_count)
485500 }
486501
487- fn name ( & self ) -> & ' static str {
488- "otlp"
502+ fn name ( & self ) -> & str {
503+ & self . name
489504 }
490505}
491506
@@ -554,7 +569,7 @@ impl UsageSink for CompositeSink {
554569 }
555570 }
556571
557- fn name ( & self ) -> & ' static str {
572+ fn name ( & self ) -> & str {
558573 "composite"
559574 }
560575}
0 commit comments