Install from crates.io
toml
prima-tracing = "0.5"
For ease of use you can use the following feature sets:
live
enables the feature you will most likely want in a production/staging environmentdev
enables the features you will most likely want in a dev environment
json-logger
outputs traces to standard output in JSON format
datadog
extends json-logger
output
with trace and span information allowing
Datadog to connect logs and tracestraces
exports tracing spans and events using the opentelemetry-otlp exporterrt-tokio-current-thread
configures the OpenTelemetry tracer to use Tokio’s current thread runtime
(e.g. actix_web::main
). Without this feature, the Tokio multi-thread runtime is used by default.If you are using the tracing
feature in your project, the recommended way to view exported traces on your machine is to use the Jaeger all-in-one Docker image.
You need to add the following service to your Docker Compose setup (your main container should depend on it):
yaml
jaeger:
image: jaegertracing/all-in-one:1.35
ports:
- 16686:16686
- 55681:55681
environment:
COLLECTOR_OTLP_ENABLED: true
COLLECTOR_OTLP_HTTP_HOST_PORT: 55681
You can then visit the Jaeger web UI on your browser to search the traces.
```rust use primatracing::{builder, configuresubscriber, initsubscriber, Environment}; use tracing::{info, infospan};
fn main() -> std::io::Result<()> { let subscriber = configuresubscriber(builder("simple").withenv(Environment::Dev).build());
let _guard = init_subscriber(subscriber);
let span = info_span!("MySpan");
let _guard = span.enter();
info!("Starting my awesome app");
Ok(())
} ```
It works like the simple example, but activating the json-logger
automatically uses the JSON format as output
```rust use primatracing::{builder, configuresubscriber, initsubscriber, Environment}; use tracing::{info, infospan};
fn main() -> std::io::Result<()> { let subscriber = configuresubscriber(builder("json").withenv(Environment::Dev).build());
let _guard = init_subscriber(subscriber);
let span = info_span!("MySpan");
let _guard = span.enter();
info!("Starting my awesome app");
Ok(())
}
```
You need to have an OpenTelemetry collector (such as Jaeger) running locally.
```rust use primatracing::{builder, configuresubscriber, initsubscriber, Environment}; use tracing::{info, infospan};
fn main() -> std::io::Result<()> { let subscriber = configuresubscriber( builder("myapp") .withenv(Environment::Dev) .withversion("1.0".tostring()) .withtelemetry( "http://localhost:55681/v1/traces".tostring(), "myapp".to_string(), ) .build(), );
let _guard = init_subscriber(subscriber);
let span = info_span!("MySpan");
let _guard = span.enter();
info!("Starting my awesome app");
Ok(())
}
```
```rust use primatracing::json; use tracing::{info, infospan}; use tracinglog::LogTracer; use tracingsubscriber::{layer::SubscriberExt, EnvFilter};
fn main() -> std::io::Result<()> { let subscriber = tracingsubscriber::Registry::default() .with(EnvFilter::fromdefaultenv()) .with(json::storage::layer()) .with(json::formatter::layer("test".toowned(), "dev".to_owned()));
LogTracer::init().expect("Failed to set logger");
tracing::subscriber::set_global_default(subscriber).expect("Setting default subscriber failed");
let span = info_span!("MySpan");
let _guard = span.enter();
info!("Starting my awesome app");
Ok(())
} ```
sh
RUST_LOG=info cargo run --example simple
Run Jaeger locally
sh
docker run --rm -d -p 16686:16686 -p 55681:55681 -e COLLECTOR_OTLP_ENABLED=true -e COLLECTOR_OTLP_HTTP_HOST_PORT=55681 jaegertracing/all-in-one:1.35
Run pong service:
sh
RUST_LOG=info cargo run --features=traces --example pong
Run ping service:
sh
RUST_LOG=info cargo run --features=traces --example ping
Check health of ping service (which calls pong service)
sh
curl http://localhost:8081/check
Open the browser at http://localhost:16686 to inspect the traced request
sh
RUST_LOG=info cargo run --features=datadog,traces --example datadog_json_logger
sh
RUST_LOG=info cargo run --features=json-logger --example custom_formatter
sh
RUST_LOG=info cargo run --features=json-logger --example custom-subscriber
sh
RUST_LOG=info cargo run --features=json-logger --example custom-json-subscriber