Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: Fix tracing grpc example #2710

Merged
merged 5 commits into from
Feb 26, 2025
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/tracing-grpc/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ opentelemetry_sdk = { path = "../../opentelemetry-sdk", features = ["rt-tokio"]
opentelemetry-stdout = { workspace = true, features = ["trace"] }
prost = { workspace = true }
tokio = { workspace = true, features = ["full"] }
tonic = { workspace = true, features = ["server"] }
tonic = { workspace = true, features = ["server", "codegen", "channel", "prost"] }

[build-dependencies]
tonic-build = { workspace = true }
23 changes: 17 additions & 6 deletions examples/tracing-grpc/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ fn init_tracer() -> sdktrace::SdkTracerProvider {
global::set_text_map_propagator(TraceContextPropagator::new());
// Install stdout exporter pipeline to be able to retrieve the collected spans.
let provider = sdktrace::SdkTracerProvider::builder()
.with_batch_exporter(SpanExporter::default())
.with_simple_exporter(SpanExporter::default())
.build();

global::set_tracer_provider(provider.clone());
Expand Down Expand Up @@ -43,10 +43,14 @@ async fn greet() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static
let span = tracer
.span_builder("Greeter/client")
.with_kind(SpanKind::Client)
.with_attributes([KeyValue::new("component", "grpc")])
.with_attributes([
KeyValue::new("rpc.system", "grpc"),
KeyValue::new("server.port", 50052),
KeyValue::new("rpc.method", "say_hello"),
])
.start(&tracer);
let cx = Context::current_with_span(span);
let mut client = GreeterClient::connect("http://[::1]:50051").await?;
let mut client = GreeterClient::connect("http://[::1]:50052").await?;

let mut request = tonic::Request::new(HelloRequest {
name: "Tonic".into(),
Expand All @@ -58,16 +62,23 @@ async fn greet() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static

let response = client.say_hello(request).await;

let span = cx.span();
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

trying to get the span from context once, and re-use. Seeing the benchmarks for Context, I suspect asking for current span from Context repeatedly is unnecessarily burning CPU cycles.

let status = match response {
Ok(_res) => "OK".to_string(),
Ok(_res) => {
span.set_attribute(KeyValue::new("response", "OK"));
"OK".to_string()
}
Err(status) => {
// Access the status code
let status_code = status.code();
span.set_attribute(KeyValue::new(
"response_code_desc",
status_code.description(),
));
status_code.to_string()
}
};
cx.span()
.add_event("Got response!", vec![KeyValue::new("status", status)]);
span.add_event("Got response!", vec![KeyValue::new("status", status)]);

Ok(())
}
Expand Down
10 changes: 8 additions & 2 deletions examples/tracing-grpc/src/server.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use hello_world::greeter_server::{Greeter, GreeterServer};
use hello_world::{HelloReply, HelloRequest};
use opentelemetry::KeyValue;
use opentelemetry::{
global,
propagation::Extractor,
Expand All @@ -13,7 +14,7 @@ fn init_tracer() -> SdkTracerProvider {
global::set_text_map_propagator(TraceContextPropagator::new());
// Install stdout exporter pipeline to be able to retrieve the collected spans.
let provider = SdkTracerProvider::builder()
.with_batch_exporter(SpanExporter::default())
.with_simple_exporter(SpanExporter::default())
.build();

global::set_tracer_provider(provider.clone());
Expand Down Expand Up @@ -65,6 +66,11 @@ impl Greeter for MyGreeter {
let mut span = tracer
.span_builder("Greeter/server")
.with_kind(SpanKind::Server)
.with_attributes([
KeyValue::new("rpc.system", "grpc"),
KeyValue::new("server.port", 50052),
KeyValue::new("rpc.method", "say_hello"),
])
.start_with_context(&tracer, &parent_cx);

let name = request.into_inner().name;
Expand All @@ -83,7 +89,7 @@ impl Greeter for MyGreeter {
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
let provider = init_tracer();

let addr = "[::1]:50051".parse()?;
let addr = "[::1]:50052".parse()?;
let greeter = MyGreeter::default();

Server::builder()
Expand Down
Loading