Skip to main content

Crate embeddenator_obs

Crate embeddenator_obs 

Source
Expand description

§embeddenator-obs

Observability: metrics, logging, tracing, and telemetry for Embeddenator.

Extracted from embeddenator core as part of Phase 2A component decomposition.

§Features

This crate provides comprehensive observability infrastructure:

  • Metrics: Lock-free atomic counters for performance tracking
  • Logging: Structured logging with environment-based filtering
  • Tracing: Span instrumentation for distributed tracing
  • Telemetry: Aggregation and export of observability data
  • Hi-Res Timing: Picosecond-scale timing for performance analysis
  • Test Metrics: Comprehensive testing/benchmarking utilities

§Feature Flags

  • metrics (default): Enable atomic performance counters
  • tracing: Enable span instrumentation and distributed tracing
  • logging: Enable structured logging (implies tracing)
  • telemetry: Enable telemetry aggregation and export
  • prometheus: Enable Prometheus metrics export format
  • opentelemetry: Enable OpenTelemetry distributed tracing
  • streaming: Enable real-time metric streaming with callbacks
  • advanced-stats: Enable advanced statistical analysis (percentiles, std dev)
  • full: Enable all features

§Quick Start

use embeddenator_obs::{init_tracing, TestMetrics};

// Initialize at startup
init_tracing();

// Track performance in tests
let mut metrics = TestMetrics::new("operation");
metrics.start_timing();
// ... perform work ...
metrics.stop_timing();
println!("{}", metrics.summary());

§Metrics Usage

use embeddenator_obs::metrics;
use std::time::Duration;

// Increment counters
metrics().inc_sub_cache_hit();
metrics().inc_sub_cache_miss();

// Record durations
metrics().record_retrieval_query(Duration::from_micros(1500));

// Get snapshot
let snapshot = metrics().snapshot();
println!("Cache hits: {}", snapshot.sub_cache_hits);

§Tracing Usage

use embeddenator_obs::create_span;

let _span = create_span("query_operation", &[("dim", "768")]);
// Work happens here, timing is automatic

§Architecture

See ADR-016 for component decomposition rationale.

Re-exports§

pub use obs::create_span;
pub use obs::init_tracing;
pub use obs::metrics;
pub use obs::metrics;
pub use obs::EventLevel;
pub use obs::HiResMetrics;
pub use obs::HiResTimer;
pub use obs::HiResTimestamp;
pub use obs::MetricEvent;
pub use obs::MetricStream;
pub use obs::Metrics;
pub use obs::MetricsSnapshot;
pub use obs::OperationStats;
pub use obs::OtelExporter;
pub use obs::OtelSpan;
pub use obs::PrometheusExporter;
pub use obs::SpanGuard;
pub use obs::SpanKind;
pub use obs::SpanStatus;
pub use obs::Telemetry;
pub use obs::TelemetryConfig;
pub use obs::TelemetrySnapshot;
pub use obs::TestMetrics;
pub use obs::ThresholdAlert;
pub use obs::TimingStats;
pub use obs::*;

Modules§

obs

Macros§

span_scope