Emitting via OTLP
You can use emit_otlp to emit diagnostic events to remote OpenTelemetry-compatible services.
OpenTelemetry defines a wire protocol for exchanging diagnostic data called OTLP. If you’re using a modern telemetry backend then chances are it supports OTLP either directly or through OpenTelemetry’s Collector.
emit_otlp is an independent implementation of OTLP that maps emit’s events onto the OpenTelemetry data model. emit_otlp doesn’t rely on the OpenTelemetry SDK or any gRPC or protobuf tooling, so can be added to any Rust application without requiring changes to your build process.
[dependencies.emit_otlp]
version = "1.14.0"
extern crate emit;
extern crate emit_otlp;
fn main() {
let rt = emit::setup()
.emit_to(emit_otlp::new()
// Add required resource properties for OTLP
.resource(emit::props! {
#[emit::key("service.name")]
service_name: "my_app",
})
// Configure endpoints for logs/traces/metrics using gRPC + protobuf
.logs(emit_otlp::logs_grpc_proto("http://localhost:4319"))
.traces(emit_otlp::traces_grpc_proto("http://localhost:4319"))
.metrics(emit_otlp::metrics_grpc_proto("http://localhost:4319"))
.spawn())
.init();
// Your app code goes here
rt.blocking_flush(std::time::Duration::from_secs(30));
}
See the crate docs for more details.
Logs
Any event can be treated as a log event. You need to configure a logs endpoint in your emit_otlp setup for this to happen. See the crate docs for details.
Traces
Events in emit’s tracing data model can be treated as a trace span. You need to configure a traces endpoint in your emit_otlp setup for this to happen, otherwise they’ll be treated as logs. See the crate docs for details.
Metrics
Events in emit’s metrics data model can be treated as a metric. You need to configure a metrics endpoint in your emit_otlp setup for this to happen, otherwise they’ll be treated as logs. See the crate docs for details.
Supported protocols
emit_otlp supports sending OTLP using gRPC, HTTP+protobuf, and HTTP+JSON.
TLS
emit_otlp supports TLS using the default Cargo features when your endpoint uses the https scheme. See the crate docs for details.
Compression
emit_otlp will compress payloads using gzip using the default Cargo features. See the crate docs for details.
HTTP headers
emit_otlp supports custom HTTP headers per endpoint. See the crate docs for details.
Environment variables
emit_otlp supports configuration from some of OpenTelemetry’s environment variables. See the crate docs for details.