Skip to content

Commit 03b94b3

Browse files
lalitbcijothomas
andauthored
Add OTLP HTTP Log Exporter example using tracing appender. (#1294)
* initial commit * fix * remove jaeger exporter * add service_name as CARGO_BIN_NAME * remove jaeger container, as we instead use Debug Exporter * Update opentelemetry-otlp/examples/basic-otlp-http/README.md Co-authored-by: Cijo Thomas <[email protected]> * only keep required ports * read binary name at compile time --------- Co-authored-by: Cijo Thomas <[email protected]>
1 parent 9700219 commit 03b94b3

File tree

9 files changed

+69
-71
lines changed

9 files changed

+69
-71
lines changed

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ publish = false
88
[dependencies]
99
once_cell = "1.17"
1010
opentelemetry = { path = "../../../opentelemetry" }
11-
opentelemetry_sdk = { path = "../../../opentelemetry-sdk", features = ["rt-tokio", "metrics"] }
12-
opentelemetry-otlp = { path = "../..", features = ["http-proto", "reqwest-client"] }
11+
opentelemetry_sdk = { path = "../../../opentelemetry-sdk", features = ["rt-tokio", "metrics", "logs"] }
12+
opentelemetry-otlp = { path = "../..", features = ["http-proto", "reqwest-client", "logs"] }
13+
opentelemetry-appender-tracing = { path = "../../../opentelemetry-appender-tracing", default-features = false}
14+
opentelemetry-semantic-conventions = { path = "../../../opentelemetry-semantic-conventions" }
15+
1316
tokio = { version = "1.0", features = ["full"] }
17+
tracing-subscriber = { version = "0.3.0", default-features = false, features = ["registry", "std"] }
18+
tracing = { version = "0.1.37", default-features = false, features = ["std"] }
19+
tracing-core = "0.1.31"

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
11
* The application send data directly to a Collector (port 4318)
22
* Run the application locally, to run as a docker container you have to change the relative paths from the `Cargo.toml`
3-
* The Collector then sends the data to the appropriate backend, in this case JAEGER
3+
* The Collector then sends the data to the appropriate backend, in this case Debug Exporter. The Debug Exporter exports data to console.
44

55
This demo uses `docker-compose` and by default runs against the `otel/opentelemetry-collector-dev:latest` image,
66
and uses `http` as the transport.
77

88
```shell
99
docker-compose up
10-
or
11-
docker-compose up -d
1210
```
1311

1412
In another terminal run the application `cargo run`
1513

16-
Use the browser to see the trace:
17-
- Jaeger at http://0.0.0.0:16686
14+
The docker-compose terminal will display logs, metrics and traces.
1815

1916
Tear it down:
2017

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
11
version: "2"
22
services:
33

4-
# Jaeger
5-
jaeger-all-in-one:
6-
image: jaegertracing/all-in-one:latest
7-
ports:
8-
- "16686:16686"
9-
- "14268"
10-
- "14250"
11-
124
# Collector
135
otel-collector:
146
image: otel/opentelemetry-collector:latest
@@ -18,20 +10,9 @@ services:
1810
ports:
1911
- "1888:1888" # pprof extension
2012
- "13133:13133" # health_check extension
21-
- "4317:4317" # OTLP gRPC receiver
2213
- "4318:4318" # OTLP HTTP receiver
2314
- "55670:55679" # zpages extension
24-
depends_on:
25-
- jaeger-all-in-one
2615

2716

28-
# metrics-rust:
29-
# build:
30-
# dockerfile: $PWD/Dockerfile
31-
# context: ./basic-otlp-http
32-
# environment:
33-
# - OTLP_TONIC_ENDPOINT=otel-collector:4317
34-
# depends_on:
35-
# - otel-collector
3617

3718

Lines changed: 14 additions & 23 deletions
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:
8-
logging:
9-
loglevel: debug
10-
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
14+
debug:
15+
verbosity: detailed
2516

2617
service:
27-
extensions: [pprof, zpages, health_check]
2818
pipelines:
2919
traces:
3020
receivers: [otlp]
31-
processors: [batch]
32-
exporters: [logging, jaeger]
21+
exporters: [debug]
3322
metrics:
3423
receivers: [otlp]
35-
processors: [batch]
36-
exporters: [logging]
24+
exporters: [debug]
25+
logs:
26+
receivers: [otlp]
27+
exporters: [debug]

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

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,34 @@ use opentelemetry::{
44
trace::{TraceContextExt, TraceError, Tracer},
55
Key, KeyValue,
66
};
7+
use opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge;
78
use opentelemetry_otlp::WithExportConfig;
9+
use opentelemetry_sdk::logs as sdklogs;
810
use opentelemetry_sdk::metrics as sdkmetrics;
11+
use opentelemetry_sdk::resource;
912
use opentelemetry_sdk::trace as sdktrace;
13+
1014
use std::error::Error;
15+
use tracing::info;
16+
use tracing_subscriber::prelude::*;
17+
18+
fn init_logs() -> Result<sdklogs::Logger, opentelemetry::logs::LogError> {
19+
let service_name = env!("CARGO_BIN_NAME");
20+
opentelemetry_otlp::new_pipeline()
21+
.logging()
22+
.with_log_config(
23+
sdklogs::Config::default().with_resource(resource::Resource::new(vec![KeyValue::new(
24+
opentelemetry_semantic_conventions::resource::SERVICE_NAME,
25+
service_name,
26+
)])),
27+
)
28+
.with_exporter(
29+
opentelemetry_otlp::new_exporter()
30+
.http()
31+
.with_endpoint("http://localhost:4318"),
32+
)
33+
.install_batch(opentelemetry_sdk::runtime::Tokio)
34+
}
1135

1236
fn init_tracer() -> Result<sdktrace::Tracer, TraceError> {
1337
opentelemetry_otlp::new_pipeline()
@@ -51,12 +75,15 @@ static COMMON_ATTRIBUTES: Lazy<[KeyValue; 4]> = Lazy::new(|| {
5175
async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
5276
let _ = init_tracer()?;
5377
let meter_provider = init_metrics()?;
78+
let _ = init_logs();
5479

5580
let tracer = global::tracer("ex.com/basic");
5681
let meter = global::meter("ex.com/basic");
5782

58-
let histogram = meter.f64_histogram("ex.com.two").init();
59-
histogram.record(5.5, COMMON_ATTRIBUTES.as_ref());
83+
// configure the global logger to use our opentelemetry logger
84+
let logger_provider = opentelemetry::global::logger_provider();
85+
let layer = OpenTelemetryTracingBridge::new(&logger_provider);
86+
tracing_subscriber::registry().with(layer).init();
6087

6188
tracer.in_span("operation", |cx| {
6289
let span = cx.span();
@@ -72,10 +99,16 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
7299

73100
span.add_event("Sub span event", vec![]);
74101
});
102+
info!(target: "my-target", "hello from {}. My price is {}. I am also inside a Span!", "banana", 2.99);
75103
});
104+
info!(target: "my-target", "hello from {}. My price is {}", "apple", 1.99);
105+
106+
let histogram = meter.f64_histogram("ex.com.two").init();
107+
histogram.record(5.5, COMMON_ATTRIBUTES.as_ref());
76108

77-
meter_provider.shutdown()?;
78109
global::shutdown_tracer_provider();
110+
global::shutdown_logger_provider();
111+
meter_provider.shutdown()?;
79112

80113
Ok(())
81114
}

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
This example shows how to setup OpenTelemetry OTLP exporter for logs, metrics
44
and traces to exports them to the [OpenTelemetry
5-
Collector](https://github.com/open-telemetry/opentelemetry-collector) via OTLP.
5+
Collector](https://github.com/open-telemetry/opentelemetry-collector) via OTLP.
6+
The Collector then sends the data to the appropriate backend, in this case
7+
Debug Exporter. The Debug Exporter exports data to console.
68

79
## Usage
810

@@ -13,14 +15,11 @@ By default runs against the `otel/opentelemetry-collector-dev:latest` image, and
1315

1416
```shell
1517
docker-compose up
16-
or
17-
docker-compose up -d
1818
```
1919

2020
In another terminal run the application `cargo run`
2121

22-
Use the browser to see the trace:
23-
- Jaeger at http://0.0.0.0:16686
22+
The docker-compose terminal will display logs, traces, metrics.
2423

2524
Tear it down:
2625

@@ -35,7 +34,7 @@ and inspect the logs to see traces being transferred.
3534

3635
```shell
3736
# From the current directory, run `opentelemetry-collector`
38-
$ docker run --rm -it -p 4317:4317 -p 4318:4318 -v $(pwd):/cfg otel/opentelemetry-collector:latest --config=/cfg/otel-collector-config.yaml
37+
$ docker run --rm -it -p 4317:4317 -v $(pwd):/cfg otel/opentelemetry-collector:latest --config=/cfg/otel-collector-config.yaml
3938

4039
# Run the app which exports logs, metrics and traces via OTLP to the collector.
4140
$ cargo run
Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
11
version: "2"
22
services:
33

4-
# Jaeger
5-
jaeger-all-in-one:
6-
image: jaegertracing/all-in-one:latest
7-
ports:
8-
- "16686:16686"
9-
- "14268"
10-
- "14250"
11-
124
# Collector
135
otel-collector:
146
image: otel/opentelemetry-collector:latest
@@ -19,10 +11,8 @@ services:
1911
- "1888:1888" # pprof extension
2012
- "13133:13133" # health_check extension
2113
- "4317:4317" # OTLP gRPC receiver
22-
- "4318:4318" # OTLP HTTP receiver
2314
- "55670:55679" # zpages extension
24-
depends_on:
25-
- jaeger-all-in-one
15+
2616

2717

2818

opentelemetry-otlp/examples/basic-otlp/otel-collector-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ service:
2424
exporters: [logging]
2525
logs:
2626
receivers: [otlp]
27-
exporters: [logging]
27+
exporters: [logging]

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,13 @@ fn init_metrics() -> metrics::Result<MeterProvider> {
5252
}
5353

5454
fn init_logs() -> Result<opentelemetry_sdk::logs::Logger, LogError> {
55+
let service_name = env!("CARGO_BIN_NAME");
5556
opentelemetry_otlp::new_pipeline()
5657
.logging()
5758
.with_log_config(
5859
Config::default().with_resource(Resource::new(vec![KeyValue::new(
5960
opentelemetry_semantic_conventions::resource::SERVICE_NAME,
60-
"basic-otlp-logging-example",
61+
service_name,
6162
)])),
6263
)
6364
.with_exporter(

0 commit comments

Comments
 (0)