Skip to content

Commit

Permalink
Simplified stdout exporter for logs and traces (open-telemetry#2040)
Browse files Browse the repository at this point in the history
Co-authored-by: Lalit Kumar Bhasin <[email protected]>
Co-authored-by: Utkarsh Umesan Pillai <[email protected]>
  • Loading branch information
3 people authored Aug 26, 2024
1 parent 322c985 commit a2c8c7d
Show file tree
Hide file tree
Showing 16 changed files with 473 additions and 1,118 deletions.
6 changes: 1 addition & 5 deletions examples/logs-basic/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,7 @@ use opentelemetry_semantic_conventions::resource::SERVICE_NAME;

fn main() {
// Setup LoggerProvider with a stdout exporter
let exporter = opentelemetry_stdout::LogExporterBuilder::default()
// uncomment the below lines to pretty print output.
// .with_encoder(|writer, data|
// Ok(serde_json::to_writer_pretty(writer, &data).unwrap()))
.build();
let exporter = opentelemetry_stdout::LogExporter::default();
let logger_provider = LoggerProvider::builder()
.with_resource(Resource::new([KeyValue::new(
SERVICE_NAME,
Expand Down
12 changes: 2 additions & 10 deletions examples/tracing-grpc/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use opentelemetry::{global, propagation::Injector};
use opentelemetry_sdk::{
propagation::TraceContextPropagator, runtime::Tokio, trace::TracerProvider,
};
use opentelemetry_stdout::SpanExporterBuilder;
use opentelemetry_stdout::SpanExporter;

use opentelemetry::{
trace::{SpanKind, TraceContextExt, Tracer},
Expand All @@ -15,15 +15,7 @@ fn init_tracer() {
global::set_text_map_propagator(TraceContextPropagator::new());
// Install stdout exporter pipeline to be able to retrieve the collected spans.
let provider = TracerProvider::builder()
.with_batch_exporter(
SpanExporterBuilder::default()
.with_encoder(|writer, data| {
serde_json::to_writer_pretty(writer, &data).unwrap();
Ok(())
})
.build(),
Tokio,
)
.with_batch_exporter(SpanExporter::default(), Tokio)
.build();

global::set_tracer_provider(provider);
Expand Down
12 changes: 2 additions & 10 deletions examples/tracing-grpc/src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,14 @@ use opentelemetry::{
use opentelemetry_sdk::{
propagation::TraceContextPropagator, runtime::Tokio, trace::TracerProvider,
};
use opentelemetry_stdout::SpanExporterBuilder;
use opentelemetry_stdout::SpanExporter;
use tonic::{transport::Server, Request, Response, Status};

fn init_tracer() {
global::set_text_map_propagator(TraceContextPropagator::new());
// Install stdout exporter pipeline to be able to retrieve the collected spans.
let provider = TracerProvider::builder()
.with_batch_exporter(
SpanExporterBuilder::default()
.with_encoder(|writer, data| {
serde_json::to_writer_pretty(writer, &data).unwrap();
Ok(())
})
.build(),
Tokio,
)
.with_batch_exporter(SpanExporter::default(), Tokio)
.build();

global::set_tracer_provider(provider);
Expand Down
4 changes: 2 additions & 2 deletions opentelemetry-appender-log/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
//! # #[tokio::main] async fn main() {
//! # use opentelemetry_sdk::logs::{BatchLogProcessor, LoggerProvider};
//! # use opentelemetry_sdk::runtime;
//! let exporter = opentelemetry_stdout::LogExporterBuilder::default().build();
//! let exporter = opentelemetry_stdout::LogExporter::default();
//!
//! let logger_provider = LoggerProvider::builder()
//! .with_log_processor(BatchLogProcessor::builder(exporter, runtime::Tokio).build())
Expand All @@ -27,7 +27,7 @@
//! # use opentelemetry_sdk::logs::{BatchLogProcessor, LoggerProvider};
//! # use opentelemetry_sdk::runtime;
//! # use opentelemetry_appender_log::OpenTelemetryLogBridge;
//! # let exporter = opentelemetry_stdout::LogExporterBuilder::default().build();
//! # let exporter = opentelemetry_stdout::LogExporter::default();
//! # let logger_provider = LoggerProvider::builder()
//! # .with_log_processor(BatchLogProcessor::builder(exporter, runtime::Tokio).build())
//! # .build();
Expand Down
4 changes: 4 additions & 0 deletions opentelemetry-stdout/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@

- **Breaking** [1994](https://github.com/open-telemetry/opentelemetry-rust/pull/1994) The logrecord event-name is added as attribute with
key `name` only if the feature flag `populate-logs-event-name` is enabled.
- **Breaking** [2040](https://github.com/open-telemetry/opentelemetry-rust/pull/2040) Simplified stdout exporter:
- Now only supports writing to stdout, removing ability to send telemetry to other streams.
- Output format improved for better human readability.
- Note: This exporter is intended for learning and debugging purposes only. Not recommended for production use or automated parsing.

## v0.5.0

Expand Down
132 changes: 116 additions & 16 deletions opentelemetry-stdout/examples/basic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,21 +64,129 @@ fn init_logs() -> opentelemetry_sdk::logs::LoggerProvider {

#[cfg(feature = "trace")]
fn emit_span() {
let tracer = global::tracer("stdout-test");
let mut span = tracer.start("test_span");
span.set_attribute(KeyValue::new("test_key", "test_value"));
use opentelemetry::trace::{
SpanContext, SpanId, TraceFlags, TraceId, TraceState, TracerProvider,
};

let tracer = global::tracer_provider()
.tracer_builder("stdout-example")
.with_version("v1")
.with_schema_url("schema_url")
.with_attributes([KeyValue::new("scope_key", "scope_value")])
.build();
let mut span = tracer.start("example-span");
span.set_attribute(KeyValue::new("attribute_key1", "attribute_value1"));
span.set_attribute(KeyValue::new("attribute_key2", "attribute_value2"));
span.add_event(
"test_event",
vec![KeyValue::new("test_event_key", "test_event_value")],
"example-event-name",
vec![KeyValue::new("event_attribute1", "event_value1")],
);
span.add_link(
SpanContext::new(
TraceId::from_hex("58406520a006649127e371903a2de979").expect("invalid"),
SpanId::from_hex("b6d7d7f6d7d6d7f6").expect("invalid"),
TraceFlags::default(),
false,
TraceState::NONE,
),
vec![
KeyValue::new("link_attribute1", "link_value1"),
KeyValue::new("link_attribute2", "link_value2"),
],
);

span.add_link(
SpanContext::new(
TraceId::from_hex("23401120a001249127e371903f2de971").expect("invalid"),
SpanId::from_hex("cd37d765d743d7f6").expect("invalid"),
TraceFlags::default(),
false,
TraceState::NONE,
),
vec![
KeyValue::new("link_attribute1", "link_value1"),
KeyValue::new("link_attribute2", "link_value2"),
],
);
span.end();
}

#[cfg(feature = "metrics")]
fn emit_metrics() {
let meter = global::meter("stdout-test");
let c = meter.u64_counter("test_counter").init();
c.add(1, &[KeyValue::new("test_key", "test_value")]);
let meter = global::meter("stdout-example");
let c = meter.u64_counter("example_counter").init();
c.add(
1,
&[
KeyValue::new("name", "apple"),
KeyValue::new("color", "green"),
],
);
c.add(
1,
&[
KeyValue::new("name", "apple"),
KeyValue::new("color", "green"),
],
);
c.add(
2,
&[
KeyValue::new("name", "apple"),
KeyValue::new("color", "red"),
],
);
c.add(
1,
&[
KeyValue::new("name", "banana"),
KeyValue::new("color", "yellow"),
],
);
c.add(
11,
&[
KeyValue::new("name", "banana"),
KeyValue::new("color", "yellow"),
],
);

let h = meter.f64_histogram("example_histogram").init();
h.record(
1.0,
&[
KeyValue::new("name", "apple"),
KeyValue::new("color", "green"),
],
);
h.record(
1.0,
&[
KeyValue::new("name", "apple"),
KeyValue::new("color", "green"),
],
);
h.record(
2.0,
&[
KeyValue::new("name", "apple"),
KeyValue::new("color", "red"),
],
);
h.record(
1.0,
&[
KeyValue::new("name", "banana"),
KeyValue::new("color", "yellow"),
],
);
h.record(
11.0,
&[
KeyValue::new("name", "banana"),
KeyValue::new("color", "yellow"),
],
);
}

#[cfg(feature = "logs")]
Expand All @@ -101,17 +209,9 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
#[cfg(feature = "logs")]
emit_log();

println!(
"======================================================================================"
);

#[cfg(feature = "trace")]
emit_span();

println!(
"======================================================================================"
);

#[cfg(feature = "metrics")]
emit_metrics();

Expand Down
5 changes: 1 addition & 4 deletions opentelemetry-stdout/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
//! # Feature Flags
//! The following feature flags can enable exporters for different telemetry signals:
//!
//! * `trace`: Includes the trace exporters (enabled by default).
//! * `trace`: Includes the trace exporters.
//! * `metrics`: Includes the metrics exporters.
//! * `logs`: Includes the logs exporters.
//!
Expand Down Expand Up @@ -56,9 +56,6 @@
//!
//! // recorded traces, metrics and logs will now be sent to stdout:
//!
//! // {"resourceMetrics":{"resource":{"attributes":[{"key":"service.name","value":{"str..
//! // {"resourceSpans":[{"resource":{"attributes":[{"key":"service.name","value":{"stri..
//! // {"resourceLogs": [{"resource": {"attributes": [{"key": "service.name", "value": {"str..
//! # }
//! ```
#![warn(missing_debug_implementations, missing_docs)]
Expand Down
Loading

0 comments on commit a2c8c7d

Please sign in to comment.