Elastic APM tracing layer. Uses the native ingest API.
Add the crate to your Cargo.toml file:
tracing-elastic-apm = "desired version"
Create a new tracing Layer:
let layer = tracing_elastic_apm::new_layer(
"ServiceName".to_string(),
// remember to use desired protocol below, e.g. http://
tracing_elastic_apm::Config::new("APM address".to_string())
)?;
Register the layer:
tracing_subscriber::registry()
.with(layer)
.init();
Take a look at Config
for more configuration options.
default-tls
(enabled by default) - use default TLS backend.rustls-tls
- use Rustls TLS backend.
Please see corresponding flags in the reqwest
library for more information:
https://docs.rs/reqwest/0.11.2/reqwest/#optional-features
APM doesn't support the notion of idle time and only tracks actual span durations. Async code naturally interleaves spans at await points, which means span start time + duration might be lower than actual span end time as measured by a wall clock. That in turn means child spans in APM might sometimes start after the parent span start time + duration.