Skip to content

Commit 1f59a15

Browse files
authored
Add OTLP LogExporter to the example (#1168)
1 parent 58ad33a commit 1f59a15

File tree

4 files changed

+63
-27
lines changed

4 files changed

+63
-27
lines changed

opentelemetry-otlp/examples/basic-otlp/Cargo.toml

+5-3
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ publish = false
77

88
[dependencies]
99
once_cell = "1.17"
10-
opentelemetry_api = { path = "../../../opentelemetry-api", features = ["metrics"] }
11-
opentelemetry_sdk = { path = "../../../opentelemetry-sdk", features = ["rt-tokio"] }
12-
opentelemetry-otlp = { path = "../../../opentelemetry-otlp", features = ["tonic", "metrics"] }
10+
opentelemetry_api = { path = "../../../opentelemetry-api", features = ["metrics", "logs"] }
11+
opentelemetry_sdk = { path = "../../../opentelemetry-sdk", features = ["rt-tokio", "logs"] }
12+
opentelemetry-otlp = { path = "../../../opentelemetry-otlp", features = ["tonic", "metrics", "logs"] }
1313
opentelemetry-semantic-conventions = { path = "../../../opentelemetry-semantic-conventions" }
1414
tokio = { version = "1.0", features = ["full"] }
15+
opentelemetry-appender-log = { path = "../../../opentelemetry-appender-log"}
16+
log = {version = "0.4.17"}

opentelemetry-otlp/examples/basic-otlp/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ If you don't want to use `docker-compose`, you can manually run the `otel/opente
3232
and inspect the logs to see traces being transferred.
3333

3434
```shell
35-
# Run `opentelemetry-collector`
36-
$ docker run -p4317:4317 otel/opentelemetry-collector:latest
35+
# From the current directory, run `opentelemetry-collector`
36+
$ docker run --rm -it -p 4317:4317 -p 4318:4318 -v $(pwd):/cfg otel/opentelemetry-collector:latest --config=/cfg/otel-collector-config.yaml
3737

3838
# Report spans/metrics
3939
$ cargo run
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,27 @@
1+
# This is a configuration file for the OpenTelemetry Collector intended to be
2+
# used in conjunction with the opentelemetry-otlp example.
3+
#
4+
# For more information about the OpenTelemetry Collector see:
5+
# https://github.com/open-telemetry/opentelemetry-collector
6+
#
17
receivers:
28
otlp:
39
protocols:
4-
http:
510
grpc:
11+
http:
612

713
exporters:
814
logging:
915
loglevel: debug
1016

11-
jaeger:
12-
endpoint: jaeger-all-in-one:14250
13-
tls:
14-
insecure: true
15-
16-
processors:
17-
batch:
18-
19-
extensions:
20-
health_check:
21-
pprof:
22-
endpoint: :1888
23-
zpages:
24-
endpoint: :55679
25-
2617
service:
27-
extensions: [pprof, zpages, health_check]
2818
pipelines:
2919
traces:
3020
receivers: [otlp]
31-
processors: [batch]
32-
exporters: [logging, jaeger]
21+
exporters: [logging]
3322
metrics:
3423
receivers: [otlp]
35-
processors: [batch]
3624
exporters: [logging]
25+
logs:
26+
receivers: [otlp]
27+
exporters: [logging]

opentelemetry-otlp/examples/basic-otlp/src/main.rs

+45-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
1+
use log::{info, Level};
12
use once_cell::sync::Lazy;
23
use opentelemetry_api::global;
3-
use opentelemetry_api::global::shutdown_tracer_provider;
4+
use opentelemetry_api::global::{
5+
logger_provider, shutdown_logger_provider, shutdown_tracer_provider,
6+
};
7+
use opentelemetry_api::logs::LogError;
48
use opentelemetry_api::trace::TraceError;
59
use opentelemetry_api::{
610
metrics,
711
trace::{TraceContextExt, Tracer},
812
Key, KeyValue,
913
};
14+
use opentelemetry_appender_log::OpenTelemetryLogBridge;
1015
use opentelemetry_otlp::{ExportConfig, WithExportConfig};
16+
use opentelemetry_sdk::logs::Config;
1117
use opentelemetry_sdk::{metrics::MeterProvider, runtime, trace as sdktrace, Resource};
1218
use std::error::Error;
1319

@@ -22,7 +28,7 @@ fn init_tracer() -> Result<sdktrace::Tracer, TraceError> {
2228
.with_trace_config(
2329
sdktrace::config().with_resource(Resource::new(vec![KeyValue::new(
2430
opentelemetry_semantic_conventions::resource::SERVICE_NAME,
25-
"trace-demo",
31+
"basic-otlp-tracing-example",
2632
)])),
2733
)
2834
.install_batch(runtime::Tokio)
@@ -40,9 +46,30 @@ fn init_metrics() -> metrics::Result<MeterProvider> {
4046
.tonic()
4147
.with_export_config(export_config),
4248
)
49+
.with_resource(Resource::new(vec![KeyValue::new(
50+
opentelemetry_semantic_conventions::resource::SERVICE_NAME,
51+
"basic-otlp-metrics-example",
52+
)]))
4353
.build()
4454
}
4555

56+
fn init_logs() -> Result<opentelemetry_sdk::logs::Logger, LogError> {
57+
opentelemetry_otlp::new_pipeline()
58+
.logging()
59+
.with_log_config(
60+
Config::default().with_resource(Resource::new(vec![KeyValue::new(
61+
opentelemetry_semantic_conventions::resource::SERVICE_NAME,
62+
"basic-otlp-logging-example",
63+
)])),
64+
)
65+
.with_exporter(
66+
opentelemetry_otlp::new_exporter()
67+
.tonic()
68+
.with_endpoint("http://localhost:4317"),
69+
)
70+
.install_batch(runtime::Tokio)
71+
}
72+
4673
const LEMONS_KEY: Key = Key::from_static_str("lemons");
4774
const ANOTHER_KEY: Key = Key::from_static_str("ex.com/another");
4875

@@ -63,6 +90,17 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
6390
let _ = init_tracer()?;
6491
let meter_provider = init_metrics()?;
6592

93+
// Initialize logs, which sets the global loggerprovider.
94+
let _ = init_logs();
95+
96+
// Retrieve the global LoggerProvider.
97+
let logger_provider = logger_provider();
98+
99+
// Create a new OpenTelemetryLogBridge using the above LoggerProvider.
100+
let otel_log_appender = OpenTelemetryLogBridge::new(&logger_provider);
101+
log::set_boxed_logger(Box::new(otel_log_appender)).unwrap();
102+
log::set_max_level(Level::Info.to_level_filter());
103+
66104
let tracer = global::tracer("ex.com/basic");
67105
let meter = global::meter("ex.com/basic");
68106

@@ -86,6 +124,8 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
86124
);
87125
span.set_attribute(ANOTHER_KEY.string("yes"));
88126

127+
info!(target: "my-target", "hello from {}. My price is {}. I am also inside a Span!", "banana", 2.99);
128+
89129
tracer.in_span("Sub operation...", |cx| {
90130
let span = cx.span();
91131
span.set_attribute(LEMONS_KEY.string("five"));
@@ -96,7 +136,10 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
96136
});
97137
});
98138

139+
info!(target: "my-target", "hello from {}. My price is {}", "apple", 1.99);
140+
99141
shutdown_tracer_provider();
142+
shutdown_logger_provider();
100143
meter_provider.shutdown()?;
101144

102145
Ok(())

0 commit comments

Comments
 (0)