Expand description
§fastrace-jaeger
[!WARNING]
fastrace-jaegeris deprecated in favor offastrace-opentelemetry.Jaeger has supported OTLP natively since v1.35 — the path Jaeger now recommends — and a dedicated Jaeger reporter only duplicates
fastrace-opentelemetry.See Migrating to fastrace-opentelemetry below.
§Dependencies
[dependencies]
fastrace = "0.7"
fastrace-jaeger = "0.7"§Setup Jaeger Agent
docker run --rm -d -p6831:6831/udp -p14268:14268 -p16686:16686 --name jaeger jaegertracing/all-in-one:1.6.0
cargo run --example synchronousWeb UI is available on http://127.0.0.1:16686/
§Report to Jaeger Agent
// deprecated
use std::net::SocketAddr;
use fastrace::collector::Config;
use fastrace::prelude::*;
use fastrace_jaeger::JaegerReporter;
// Initialize reporter
let reporter = JaegerReporter::new("127.0.0.1:6831".parse().unwrap(), "asynchronous").unwrap();
fastrace::set_reporter(reporter, Config::default());
{
// Start tracing
let root = Span::root("root", SpanContext::random());
}
fastrace::flush();§Migrating to fastrace-opentelemetry
fastrace-opentelemetry exports via OTLP, which Jaeger accepts natively (v1.35+). Your instrumentation (Span::root, #[trace], …) stays the same — only the reporter changes.
For example, given that you have a Jaeger stack as below:
docker run --rm -d -p6831:6831/udp -p14268:14268 -p16686:16686 -p4317:4317 --name jaeger jaegertracing/all-in-one:1.76.0You can report to it via OTLP as below:
First, update your dependencies:
[dependencies]
fastrace = { version = "0.7", features = ["enable"] }
fastrace-opentelemetry = { version = "0.18.0" }
opentelemetry = { version = "0.32.0", default-features = false, features = ["trace"] }
opentelemetry-otlp = { version = "0.32.0", default-features = false, features = ["trace", "grpc-tonic"] }
opentelemetry_sdk = { version = "0.32.0", default-features = false, features = ["trace"] }Then, initialize OpenTelemetryReporter with OTLP exporter:
ⓘ
use std::borrow::Cow;
use fastrace::collector::Config;
use fastrace::prelude::*;
use fastrace_opentelemetry::OpenTelemetryReporter;
use opentelemetry::InstrumentationScope;
use opentelemetry::KeyValue;
use opentelemetry_otlp::SpanExporter;
use opentelemetry_otlp::WithExportConfig;
use opentelemetry_sdk::Resource;
// Initialize reporter
let reporter = OpenTelemetryReporter::new(
SpanExporter::builder()
.with_tonic()
.with_endpoint("http://127.0.0.1:4317".to_string())
.with_protocol(opentelemetry_otlp::Protocol::Grpc)
.with_timeout(opentelemetry_otlp::OTEL_EXPORTER_OTLP_TIMEOUT_DEFAULT)
.build()
.expect("initialize otlp exporter"),
Cow::Owned(
Resource::builder()
.with_attributes([KeyValue::new("service.name", "asynchronous")])
.build()
),
InstrumentationScope::builder("example-crate").with_version(env!("CARGO_PKG_VERSION")).build(),
);
fastrace::set_reporter(reporter, Config::default());
{
// Start tracing
let root = Span::root("root", SpanContext::random());
}
fastrace::flush();Structs§
- Jaeger
Reporter - Jaeger reporter for
fastracevia UDP endpoint.