-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Default span propagation for tracing in builders #156
Copy link
Copy link
Closed
Description
Following on from jtescher/opentelemetry-rust#17
It would be useful if the server and client builders provided a default implementing for propagating parent spans via the grpc-trace-bin header. Currently I have something similar to this for a service I'm working on using https://github.com/census-instrumentation/opencensus-go/blob/17d7955af9d42886455ce010dd46878208041a58/plugin/ocgrpc/trace_common.go as a reference for how it's typically done in other languages:
Server::builder()
.interceptor_fn(|svc, req| {
let grpc_trace = &req.headers()["grpc-trace-bin"];
let bp = BinaryPropagator::new();
let span_state = bp.from_bytes(grpc_trace.as_bytes().into().span_id();
let parent = match span_state {
0 => None,
e @ _ => Some(Id::from_u64(e)),
};
let root = match req.uri().path() {
"/package.service/method" => span!(parent: parent, Level::INFO, "package.service.method"),
_ => span!(parent: parent, Level::INFO, "package.service.unknown"),
};
let _enter = root.enter();
svc.call(req)
})
.add_service(service).serve(addr).await?;The ugly match is because the span name needs a static lifetime so if there was also a static string representing the package.service.name identifier in the generated grpc code that would be useful as well.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels