1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
#![deny( warnings, missing_debug_implementations, missing_copy_implementations, missing_docs )] //! This crate provides: //! - A tracing layer, `TelemetryLayer`, that can be used to publish trace data to honeycomb.io //! - Utilities for implementing distributed tracing against the honeycomb.io backend //! //! As a tracing layer, `TelemetryLayer` can be composed with other layers to provide stdout logging, filtering, etc. mod honeycomb; mod visitor; pub use crate::honeycomb::{HoneycombTelemetry, SpanId, TraceId}; pub use crate::visitor::HoneycombVisitor; use rand::{self, Rng}; #[doc(no_inline)] pub use tracing_distributed::{TelemetryLayer, TraceCtxError}; /// Register the current span as the local root of a distributed trace. /// /// Specialized to the honeycomb.io-specific SpanId and TraceId provided by this crate. pub fn register_dist_tracing_root( trace_id: TraceId, remote_parent_span: Option<SpanId>, ) -> Result<(), TraceCtxError> { tracing_distributed::register_dist_tracing_root(trace_id, remote_parent_span) } /// Retrieve the distributed trace context associated with the current span. /// /// Returns the `TraceId`, if any, that the current span is associated with along with /// the `SpanId` belonging to the current span. /// /// Specialized to the honeycomb.io-specific SpanId and TraceId provided by this crate. pub fn current_dist_trace_ctx() -> Result<(TraceId, SpanId), TraceCtxError> { tracing_distributed::current_dist_trace_ctx() } /// Construct a TelemetryLayer that does not publish telemetry to any backend. /// /// Specialized to the honeycomb.io-specific SpanId and TraceId provided by this crate. pub fn new_blackhole_telemetry_layer( ) -> TelemetryLayer<tracing_distributed::BlackholeTelemetry<SpanId, TraceId>, SpanId, TraceId> { let instance_id: u64 = 0; TelemetryLayer::new( "honeycomb_blackhole_tracing_layer", tracing_distributed::BlackholeTelemetry::default(), move |tracing_id| SpanId { instance_id, tracing_id, }, ) } /// Construct a TelemetryLayer that publishes telemetry to honeycomb.io using the provided honeycomb config. /// /// Specialized to the honeycomb.io-specific SpanId and TraceId provided by this crate. pub fn new_honeycomb_telemetry_layer( service_name: &'static str, honeycomb_config: libhoney::Config, ) -> TelemetryLayer<HoneycombTelemetry, SpanId, TraceId> { let instance_id: u64 = rand::thread_rng().gen(); TelemetryLayer::new( service_name, HoneycombTelemetry::new(honeycomb_config, None), move |tracing_id| SpanId { instance_id, tracing_id, }, ) } /// Construct a TelemetryLayer that publishes telemetry to honeycomb.io using the /// provided honeycomb config, and sample rate. This function differs from /// `new_honeycomb_telemetry_layer` and the `sample_rate` on the /// `libhoney::Config` there in an important way. `libhoney` samples `Event` /// data, which is individual spans on each trace. This means that using the /// sampling logic in libhoney may result in missing event data or incomplete /// traces. Calling this function provides trace-level sampling, meaning sampling /// decisions are based on a modulo of the traceID, and events in a single trace /// will not be sampled differently. If the trace is sampled, then all spans /// under it will be sent to honeycomb. If a trace is not sampled, no spans or /// events under it will be sent. When using this trace-level sampling, the /// `sample_rate` parameter on the `libhoney::Config` should be set to 1, which /// is the default. /// /// Specialized to the honeycomb.io-specific SpanId and TraceId provided by this crate. pub fn new_honeycomb_telemetry_layer_with_trace_sampling( service_name: &'static str, honeycomb_config: libhoney::Config, sample_rate: u128, ) -> TelemetryLayer<HoneycombTelemetry, SpanId, TraceId> { let instance_id: u64 = rand::thread_rng().gen(); TelemetryLayer::new( service_name, HoneycombTelemetry::new(honeycomb_config, Some(sample_rate)), move |tracing_id| SpanId { instance_id, tracing_id, }, ) }