/tracing-axiom

The official Rust tracing layer for Axiom

Primary LanguageRustApache License 2.0Apache-2.0

tracing-axiom

Axiom.co banner  

docs.rs build crates.io License

Axiom unlocks observability at any scale.

  • Ingest with ease, store without limits: Axiom’s next-generation datastore enables ingesting petabytes of data with ultimate efficiency. Ship logs from Kubernetes, AWS, Azure, Google Cloud, DigitalOcean, Nomad, and others.
  • Query everything, all the time: Whether DevOps, SecOps, or EverythingOps, query all your data no matter its age. No provisioning, no moving data from cold/archive to “hot”, and no worrying about slow queries. All your data, all. the. time.
  • Powerful dashboards, for continuous observability: Build dashboards to collect related queries and present information that’s quick and easy to digest for you and your team. Dashboards can be kept private or shared with others, and are the perfect way to bring together data from different sources

For more information check out the official documentation.

Usage

Add the following to your Cargo.toml:

[dependencies]
tracing-axiom = "0.7"

Create a dataset in Axiom and export the name as AXIOM_DATASET. Then create an API token with ingest permission into that dataset in the Axiom settings and export it as AXIOM_TOKEN.

Now you can set up tracing like this:

use tracing_subscriber::{layer::SubscriberExt as _, util::SubscriberInitExt as _, Registry};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let axiom_layer = tracing_axiom::default("readme")?; // Set AXIOM_DATASET and AXIOM_TOKEN in your env!
    Registry::default().with(axiom_layer).init();
    say_hello();
    Ok(())
}

#[tracing::instrument]
pub fn say_hello() {
    tracing::info!("Hello, world!");
}

For further examples, head over to the examples directory.

Note: Due to a limitation of an underlying library, events outside of a span are not recorded.

Features

The following are a list of Cargo features that can be enabled or disabled:

  • rustls-tls (enabled by default): Enables TLS functionality provided by rustls.
  • default-tls: uses reqwest default TLS library.
  • native-tls: Enables TLS functionality provided by native-tls.

FAQ & Troubleshooting

How do I log traces to the console in addition to Axiom?

You can use this library to get a tracing-subscriber::layer and combine it with other layers, for example one that prints traces to the console. You can see how this works in the fmt example.

My test function hangs indefinitely

This can happen when you use #[tokio::test] as that defaults to a single-threaded executor, but the opentelemetry crate requires a multi-thread executor.

License

Licensed under either of

at your option.