Skip to main content

Module observability

Module observability 

Source
Expand description

Metrics, tracing, and monitoring support Copyright © 2025-2026 Wenze Wei. All Rights Reserved.

This file is part of Ri. The Ri project belongs to the Dunimd Team.

Licensed under the Apache License, Version 2.0 (the “License”); You may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

§Observability Module

This module provides comprehensive observability capabilities for Ri, including distributed tracing and metrics collection. It follows modern observability best practices to help monitor, debug, and optimize Ri applications.

§Key Components

  • RiObservabilityModule: Main observability module
  • RiTracer: Distributed tracing implementation
  • RiMetricsRegistry: Metrics collection and aggregation
  • RiObservabilityConfig: Configuration for observability features
  • RiObservabilityData: Exported observability data structure

§Design Principles

  1. Separation of Concerns: Tracing and metrics are separate but integrated components
  2. Configurable: All features can be enabled/disabled and configured at runtime
  3. Non-intrusive: Designed to be easy to integrate without disrupting application logic
  4. Performance-focused: Optimized for low overhead in production environments
  5. Standard-compliant: Follows W3C Trace Context standard for distributed tracing
  6. Prometheus-compatible: Metrics are exported in Prometheus format
  7. Service Module Integration: Implements the ServiceModule trait for seamless integration

§Usage

use ri::prelude::*;
 
fn example() -> RiResult<()> {
    // Create a Ri app builder
    let mut builder = RiAppBuilder::new();
     
    // Configure observability
    let observability_config = RiObservabilityConfig {
        tracing_enabled: true,
        metrics_enabled: true,
        tracing_sampling_rate: 0.5, // 50% sampling rate
        metrics_window_size_secs: 300,
        metrics_bucket_size_secs: 10,
    };
     
    // Add observability module to the app
    let observability_module = RiObservabilityModule::new()
        .with_config(observability_config);
     
    builder.add_module(Box::new(observability_module));
     
    // Build and run the app
    let mut app = builder.build()?;
    app.run()?;
     
    Ok(())
}

Re-exports§

pub use tracing::RiTracer;
pub use tracing::RiTraceId;
pub use tracing::RiSpanId;
pub use tracing::RiSpan;
pub use tracing::RiSpanKind;
pub use tracing::RiSpanStatus;
pub use tracing::RiTracingContext;
pub use tracing::RiSamplingStrategy;
pub use propagation::RiTraceContext;
pub use propagation::RiBaggage;
pub use propagation::RiContextCarrier;
pub use propagation::W3CTracePropagator;

Modules§

grafana
Copyright © 2025-2026 Wenze Wei. All Rights Reserved.
prometheus
Copyright © 2025-2026 Wenze Wei. All Rights Reserved.
propagation
Copyright © 2025-2026 Wenze Wei. All Rights Reserved.
tracing
Copyright © 2025-2026 Wenze Wei. All Rights Reserved.

Structs§

RiCPUMetrics
CPU metrics.
RiDiskMetrics
Disk metrics.
RiMemoryMetrics
Memory metrics.
RiMetric
A single metric with sliding window aggregation
RiMetricConfig
Metric configuration
RiMetricSample
A single metric sample
RiMetricsRegistry
Metrics registry to manage multiple metrics
RiNetworkMetrics
Network metrics.
RiObservabilityConfig
Configuration for the observability module.
RiObservabilityData
Exported observability data structure.
RiObservabilityModule
Main observability module for Ri.
RiSystemMetrics
System metrics snapshot.
RiSystemMetricsCollector
System metrics collector.
RiWindowStats
Window statistics

Enums§

RiMetricType
Metric types supported