Skip to content

Commit 2e5cbe6

Browse files
authored
Merge pull request #1099 from jvanz/update-otel
chore(build): Update OTEL
2 parents 68d2d36 + 9ec1dfb commit 2e5cbe6

7 files changed

+72
-40
lines changed

Cargo.lock

+30-13
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+5-4
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,17 @@ lazy_static = "1.4.0"
2828
mime = "0.3"
2929
mockall_double = "0.3"
3030
num_cpus = "1.16.0"
31-
opentelemetry = { version = "0.27.0", default-features = false, features = [
31+
opentelemetry = { version = "0.28.0", default-features = false, features = [
3232
"metrics",
3333
"trace",
3434
] }
35-
opentelemetry-otlp = { version = "0.27.0", features = [
35+
opentelemetry-otlp = { version = "0.28.0", features = [
3636
"metrics",
3737
"tls",
3838
"tonic",
39+
"grpc-tonic"
3940
] }
40-
opentelemetry_sdk = { version = "0.27.0", features = ["rt-tokio"] }
41+
opentelemetry_sdk = { version = "0.28.0", features = ["rt-tokio"] }
4142
policy-evaluator = { git = "https://github.com/kubewarden/policy-evaluator", tag = "v0.20.0" }
4243
pprof = { version = "0.14", features = ["prost-codec"] }
4344
rayon = "1.10"
@@ -66,7 +67,7 @@ tokio = { version = "^1.43.0", features = ["full"] }
6667
tonic = { version = "0.12.3" }
6768
tower-http = { version = "0.6.1", features = ["trace"] }
6869
tracing = "0.1"
69-
tracing-opentelemetry = "0.28.0"
70+
tracing-opentelemetry = "0.29.0"
7071
tracing-subscriber = { version = "0.3", features = ["ansi", "fmt", "json"] }
7172

7273
[target.'cfg(target_os = "linux")'.dependencies]

src/main.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ use ::tracing::info;
77
use anyhow::anyhow;
88
use anyhow::Result;
99
use clap::ArgMatches;
10-
use opentelemetry::global::shutdown_tracer_provider;
1110
use policy_server::metrics::setup_metrics;
1211
use policy_server::tracing::setup_tracing;
1312
use policy_server::PolicyServer;
@@ -27,7 +26,7 @@ async fn main() -> Result<()> {
2726

2827
let config = policy_server::config::Config::from_args(&matches)?;
2928

30-
setup_tracing(&config.log_level, &config.log_fmt, config.log_no_color)?;
29+
let tracer_provider = setup_tracing(&config.log_level, &config.log_fmt, config.log_no_color)?;
3130

3231
if config.metrics_enabled {
3332
setup_metrics()?;
@@ -58,7 +57,9 @@ async fn main() -> Result<()> {
5857
let api_server = PolicyServer::new_from_config(config).await?;
5958
api_server.run().await?;
6059

61-
shutdown_tracer_provider();
60+
if let Some(trace_provider) = tracer_provider {
61+
trace_provider.shutdown()?;
62+
}
6263

6364
Ok(())
6465
}

src/metrics.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use anyhow::Result;
22
use opentelemetry::{global, KeyValue};
33
use opentelemetry_otlp::{ExportConfig, WithExportConfig, WithTonicConfig};
4-
use opentelemetry_sdk::runtime;
54

65
mod policy_evaluations_total;
76
pub use policy_evaluations_total::add_policy_evaluation;
@@ -20,8 +19,7 @@ pub fn setup_metrics() -> Result<()> {
2019
.build()?;
2120

2221
let periodic_reader =
23-
opentelemetry_sdk::metrics::PeriodicReader::builder(metric_exporter, runtime::Tokio)
24-
.build();
22+
opentelemetry_sdk::metrics::PeriodicReader::builder(metric_exporter).build();
2523
let meter_provider = opentelemetry_sdk::metrics::SdkMeterProvider::builder()
2624
.with_reader(periodic_reader)
2725
.build();

src/tracing.rs

+30-14
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,22 @@ use anyhow::{anyhow, Result};
22
use opentelemetry::trace::TracerProvider;
33
use opentelemetry_otlp::WithTonicConfig;
44

5+
use opentelemetry_sdk::Resource;
56
use tracing_subscriber::prelude::*;
67
use tracing_subscriber::{fmt, EnvFilter};
78

89
use crate::config::{self, build_client_tls_config_from_env};
910

1011
// Setup the tracing system. This MUST be done inside of a tokio Runtime
1112
// because some collectors rely on it and would panic otherwise.
12-
pub fn setup_tracing(log_level: &str, log_fmt: &str, log_no_color: bool) -> Result<()> {
13+
//
14+
// The function returns an optional tracer provider that must be used to
15+
// shut down the tracing system.
16+
pub fn setup_tracing(
17+
log_level: &str,
18+
log_fmt: &str,
19+
log_no_color: bool,
20+
) -> Result<Option<opentelemetry_sdk::trace::SdkTracerProvider>> {
1321
// setup logging
1422
let filter_layer = EnvFilter::new(log_level)
1523
// some of our dependencies generate trace events too, but we don't care about them ->
@@ -23,18 +31,22 @@ pub fn setup_tracing(log_level: &str, log_fmt: &str, log_no_color: bool) -> Resu
2331
.add_directive("wasmtime_cranelift=off".parse().unwrap())
2432
.add_directive("wasmtime_jit=off".parse().unwrap());
2533

26-
match log_fmt {
27-
"json" => tracing_subscriber::registry()
28-
.with(filter_layer)
29-
.with(fmt::layer().json())
30-
.init(),
34+
let tracer = match log_fmt {
35+
"json" => {
36+
tracing_subscriber::registry()
37+
.with(filter_layer)
38+
.with(fmt::layer().json())
39+
.init();
40+
None
41+
}
3142
"text" => {
3243
let fmt_layer = fmt::layer().with_ansi(log_no_color);
3344

3445
tracing_subscriber::registry()
3546
.with(filter_layer)
3647
.with(fmt_layer)
37-
.init()
48+
.init();
49+
None
3850
}
3951
"otlp" => {
4052
// Create a new OpenTelemetry pipeline sending events to a
@@ -47,26 +59,30 @@ pub fn setup_tracing(log_level: &str, log_fmt: &str, log_no_color: bool) -> Resu
4759
.with_tls_config(build_client_tls_config_from_env("OTLP")?)
4860
.build()?;
4961

50-
let tracer_provider = opentelemetry_sdk::trace::TracerProvider::builder()
51-
.with_resource(opentelemetry_sdk::Resource::new(vec![
52-
opentelemetry::KeyValue::new("service.name", config::SERVICE_NAME),
53-
]))
54-
.with_batch_exporter(otlp_exporter, opentelemetry_sdk::runtime::Tokio)
62+
let tracer_provider = opentelemetry_sdk::trace::SdkTracerProvider::builder()
63+
.with_resource(
64+
Resource::builder()
65+
.with_service_name(config::SERVICE_NAME)
66+
.build(),
67+
)
68+
.with_batch_exporter(otlp_exporter)
5569
.build();
5670

5771
let tracer = tracer_provider.tracer(config::SERVICE_NAME);
5872

5973
// Create a tracing layer with the configured tracer
6074
let telemetry = tracing_opentelemetry::layer().with_tracer(tracer);
75+
6176
tracing_subscriber::registry()
6277
.with(filter_layer)
6378
.with(telemetry)
6479
.with(fmt::layer())
65-
.init()
80+
.init();
81+
Some(tracer_provider)
6682
}
6783

6884
_ => return Err(anyhow!("Unknown log message format")),
6985
};
7086

71-
Ok(())
87+
Ok(tracer)
7288
}

tests/data/otel-collector-config.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ receivers:
55
otlp:
66
protocols:
77
grpc:
8+
endpoint: 0.0.0.0:4317
89
tls:
910
ca_file: "certs/server-ca.pem"
1011
cert_file: "certs/server-cert.pem"

tests/integration_test.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -804,8 +804,6 @@ async fn test_detect_certificate_rotation() {
804804
}
805805
}
806806

807-
// This test is flaky. We need to fix it. But for now, we are ignoring it.
808-
#[ignore]
809807
#[tokio::test]
810808
async fn test_otel() {
811809
setup();
@@ -856,7 +854,7 @@ async fn test_otel() {
856854
set_permissions(file_path, permissions.clone()).unwrap();
857855
}
858856

859-
let otelc = GenericImage::new("otel/opentelemetry-collector", "0.98.0")
857+
let otelc = GenericImage::new("otel/opentelemetry-collector", "0.120.0")
860858
.with_wait_for(WaitFor::message_on_stderr("Everything is ready"))
861859
.with_mount(Mount::bind_mount(
862860
otelc_config_path.to_str().unwrap(),

0 commit comments

Comments
 (0)