Rust
<!-- status: ga language: rust -->
Rust
Send traces from a Rust service to Watchtower over OTLP/HTTP with the standard OpenTelemetry SDK. Nothing Watchtower-specific is installed: the SDK reads the standard OTEL_* variables.
Create a project, then an ingestion key (
wti_...) with theingest:tracesscope. The key is shown once.Point the SDK at the gateway and pass the key in the
x-watchtower-keyheader (Authorization: Bearer wti_...works too):
export OTEL_EXPORTER_OTLP_ENDPOINT=https://ingest.example.com
export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_HEADERS=x-watchtower-key=wti_YOUR_KEY
export OTEL_SERVICE_NAME=my-serviceAdd the SDK and run this once. The endpoint above is the gateway's base URL; the SDK appends
/v1/traces.
cargo add opentelemetry opentelemetry_sdk
cargo add opentelemetry-otlp --features http-proto,reqwest-rustlsuse opentelemetry::global;
use opentelemetry::trace::Tracer;
use opentelemetry_otlp::SpanExporter;
use opentelemetry_sdk::trace::SdkTracerProvider;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// reads OTEL_EXPORTER_OTLP_*
let exporter = SpanExporter::builder().with_http().build()?;
let provider = SdkTracerProvider::builder().with_batch_exporter(exporter).build();
global::set_tracer_provider(provider.clone());
global::tracer("onboarding").in_span("hello-watchtower", |_| {});
provider.shutdown()?;
Ok(())
}Open the project's onboarding screen. It polls
GET /v1/projects/{prj}/onboarding/first-eventand turns green when the first span arrives. Then open the trace in the trace explorer.
Use the reqwest-rustls feature, not an OpenSSL one, so the binary builds the same on Linux and Windows.