Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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