git-subtree-dir: vendor/ruvector git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
4.1 KiB
4.1 KiB
Tiny Dancer Observability Examples
This directory contains examples demonstrating the observability features of Tiny Dancer.
Examples
1. Metrics Example (metrics_example.rs)
Purpose: Demonstrates Prometheus metrics collection
Features:
- Request counting
- Latency tracking
- Circuit breaker monitoring
- Routing decision metrics
- Prometheus format export
Run:
cargo run --example metrics_example
Output: Shows metrics in Prometheus text format
2. Tracing Example (tracing_example.rs)
Purpose: Shows distributed tracing with OpenTelemetry
Features:
- Jaeger integration
- Span creation
- Trace context propagation
- W3C Trace Context format
Prerequisites:
# Start Jaeger
docker run -d -p6831:6831/udp -p16686:16686 jaegertracing/all-in-one:latest
Run:
cargo run --example tracing_example
View Traces: http://localhost:16686
3. Full Observability Example (full_observability.rs)
Purpose: Comprehensive example combining all observability features
Features:
- Prometheus metrics
- Distributed tracing
- Structured logging
- Multiple scenarios (normal load, high load)
- Performance statistics
Run:
cargo run --example full_observability
Output: Complete observability stack demonstration
Quick Start
-
Basic Metrics (no dependencies):
cargo run --example metrics_example -
With Tracing (requires Jaeger):
# Terminal 1: Start Jaeger docker run -p6831:6831/udp -p16686:16686 jaegertracing/all-in-one:latest # Terminal 2: Run example cargo run --example tracing_example # Browser: Open http://localhost:16686 -
Full Stack:
cargo run --example full_observability
Metrics Available
tiny_dancer_routing_requests_total- Request countertiny_dancer_routing_latency_seconds- Latency histogramtiny_dancer_circuit_breaker_state- Circuit breaker gaugetiny_dancer_routing_decisions_total- Decision countertiny_dancer_confidence_scores- Confidence histogramtiny_dancer_uncertainty_estimates- Uncertainty histogramtiny_dancer_candidates_processed_total- Candidates countertiny_dancer_errors_total- Error countertiny_dancer_feature_engineering_duration_seconds- Feature timetiny_dancer_model_inference_duration_seconds- Inference time
Tracing Spans
Automatically created spans:
routing_request- Full routing operationcircuit_breaker_check- Circuit breaker validationfeature_engineering- Feature extractionmodel_inference- Model inference (per candidate)uncertainty_estimation- Uncertainty calculation
Production Setup
Prometheus
# prometheus.yml
scrape_configs:
- job_name: 'tiny-dancer'
scrape_interval: 15s
static_configs:
- targets: ['localhost:9090']
Jaeger
# Production deployment
docker run -d \
--name jaeger \
-e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 14250:14250 \
-p 9411:9411 \
jaegertracing/all-in-one:latest
Grafana Dashboard
- Add Prometheus data source
- Import dashboard from
docs/OBSERVABILITY.md - Create alerts:
- Circuit breaker open
- High error rate
- High latency
Troubleshooting
Metrics not showing
// Ensure router is processing requests
let response = router.route(request)?;
// Export and check metrics
let metrics = router.export_metrics()?;
println!("{}", metrics);
Traces not in Jaeger
- Check Jaeger is running:
docker ps - Verify endpoint in config
- Ensure sampling_ratio > 0
- Call
tracing_system.shutdown()to flush
High memory usage
- Reduce sampling ratio to 0.01 (1%)
- Set log level to INFO
- Use appropriate histogram buckets
Additional Resources
- Full documentation:
../docs/OBSERVABILITY.md - Implementation summary:
../docs/OBSERVABILITY_SUMMARY.md - Prometheus docs: https://prometheus.io/docs/
- OpenTelemetry docs: https://opentelemetry.io/docs/
- Jaeger docs: https://www.jaegertracing.io/docs/