Skip to content
This repository was archived by the owner on Sep 10, 2024. It is now read-only.

Commit d1b9a49

Browse files
committed
Update opentelemetry to 0.24.0
1 parent d6a5412 commit d1b9a49

40 files changed

+288
-398
lines changed

Cargo.lock

Lines changed: 80 additions & 102 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ features = ["cookie-private", "cookie-key-expansion", "typed-header"]
7979

8080
# Bytes
8181
[workspace.dependencies.bytes]
82-
version = "1.6.0"
82+
version = "1.6.1"
8383

8484
# UTF-8 paths
8585
[workspace.dependencies.camino]
@@ -241,14 +241,15 @@ version = "0.3.18"
241241

242242
# OpenTelemetry
243243
[workspace.dependencies.opentelemetry]
244-
version = "0.23.0"
244+
version = "0.24.0"
245245
features = ["trace", "metrics"]
246246
[workspace.dependencies.opentelemetry-http]
247-
version = "0.12.0"
247+
version = "0.13.0"
248+
features = ["hyper"]
248249
[workspace.dependencies.opentelemetry-semantic-conventions]
249-
version = "0.15.0"
250+
version = "0.16.0"
250251
[workspace.dependencies.tracing-opentelemetry]
251-
version = "0.24.0"
252+
version = "0.25.0"
252253
default-features = false
253254

254255
# URL manipulation

crates/cli/Cargo.toml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,13 @@ tracing-subscriber = { workspace = true, features = ["env-filter"] }
4747
tracing-opentelemetry.workspace = true
4848
opentelemetry.workspace = true
4949
opentelemetry-http.workspace = true
50-
opentelemetry-jaeger-propagator = "0.2.0"
51-
opentelemetry-otlp = { version = "0.16.0", default-features = false, features = ["trace", "metrics", "http-proto"] }
52-
opentelemetry-prometheus = "0.16.0"
53-
opentelemetry-resource-detectors = "0.2.0"
50+
opentelemetry-jaeger-propagator = "0.3.0"
51+
opentelemetry-otlp = { version = "0.17.0", default-features = false, features = ["trace", "metrics", "http-proto"] }
52+
opentelemetry-prometheus = "0.17.0"
53+
opentelemetry-resource-detectors = "0.3.0"
5454
opentelemetry-semantic-conventions.workspace = true
55-
opentelemetry-stdout = { version = "0.4.0", features = ["trace", "metrics"] }
56-
opentelemetry_sdk = { version = "0.23.0", features = ["trace", "metrics", "rt-tokio"] }
55+
opentelemetry-stdout = { version = "0.5.0", features = ["trace", "metrics"] }
56+
opentelemetry_sdk = { version = "0.24.1", features = ["trace", "metrics", "rt-tokio"] }
5757
prometheus = "0.13.4"
5858
sentry.workspace = true
5959
sentry-tracing.workspace = true

crates/cli/src/app_state.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ use mas_storage::{BoxClock, BoxRepository, BoxRng, Repository, SystemClock};
3434
use mas_storage_pg::PgRepository;
3535
use mas_templates::Templates;
3636
use opentelemetry::{
37-
metrics::{Histogram, MetricsError, Unit},
37+
metrics::{Histogram, MetricsError},
3838
KeyValue,
3939
};
4040
use rand::SeedableRng;
@@ -78,13 +78,13 @@ impl AppState {
7878
let usage = meter
7979
.i64_observable_up_down_counter("db.connections.usage")
8080
.with_description("The number of connections that are currently in `state` described by the state attribute.")
81-
.with_unit(Unit::new("{connection}"))
81+
.with_unit("{connection}")
8282
.init();
8383

8484
let max = meter
8585
.i64_observable_up_down_counter("db.connections.max")
8686
.with_description("The maximum number of open connections allowed.")
87-
.with_unit(Unit::new("{connection}"))
87+
.with_unit("{connection}")
8888
.init();
8989

9090
// Observe the number of active and idle connections in the pool
@@ -101,7 +101,7 @@ impl AppState {
101101
let histogram = meter
102102
.u64_histogram("db.client.connections.create_time")
103103
.with_description("The time it took to create a new connection.")
104-
.with_unit(Unit::new("ms"))
104+
.with_unit("ms")
105105
.init();
106106
self.conn_acquisition_histogram = Some(histogram);
107107

crates/cli/src/telemetry.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ use mas_config::{
2222
MetricsConfig, MetricsExporterKind, Propagator, TelemetryConfig, TracingConfig,
2323
TracingExporterKind,
2424
};
25-
use mas_http::OtelClient;
2625
use opentelemetry::{
2726
global,
2827
propagation::{TextMapCompositePropagator, TextMapPropagator},
@@ -99,7 +98,7 @@ fn propagator(propagators: &[Propagator]) -> impl TextMapPropagator {
9998

10099
fn http_client() -> impl opentelemetry_http::HttpClient + 'static {
101100
let client = mas_http::make_untraced_client();
102-
OtelClient::new(client)
101+
opentelemetry_http::hyper::HyperClient::new_with_timeout(client, Duration::from_secs(30))
103102
}
104103

105104
fn stdout_tracer_provider() -> TracerProvider {
@@ -109,7 +108,7 @@ fn stdout_tracer_provider() -> TracerProvider {
109108
.build()
110109
}
111110

112-
fn otlp_tracer(endpoint: Option<&Url>) -> anyhow::Result<Tracer> {
111+
fn otlp_tracer_provider(endpoint: Option<&Url>) -> anyhow::Result<TracerProvider> {
113112
use opentelemetry_otlp::WithExportConfig;
114113

115114
let mut exporter = opentelemetry_otlp::new_exporter()
@@ -133,10 +132,7 @@ fn tracer(config: &TracingConfig) -> anyhow::Result<Option<Tracer>> {
133132
let tracer_provider = match config.exporter {
134133
TracingExporterKind::None => return Ok(None),
135134
TracingExporterKind::Stdout => stdout_tracer_provider(),
136-
TracingExporterKind::Otlp => {
137-
// The OTLP exporter already creates a tracer and installs it
138-
return Ok(Some(otlp_tracer(config.endpoint.as_ref())?));
139-
}
135+
TracingExporterKind::Otlp => otlp_tracer_provider(config.endpoint.as_ref())?,
140136
};
141137

142138
let tracer = tracer_provider
@@ -248,7 +244,7 @@ fn init_meter(config: &MetricsConfig) -> anyhow::Result<()> {
248244
}
249245

250246
fn trace_config() -> opentelemetry_sdk::trace::Config {
251-
opentelemetry_sdk::trace::config()
247+
opentelemetry_sdk::trace::Config::default()
252248
.with_resource(resource())
253249
.with_sampler(Sampler::AlwaysOn)
254250
}

crates/handlers/src/activity_tracker/worker.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ impl Worker {
6565
let message_counter = meter
6666
.u64_counter("mas.activity_tracker.messages")
6767
.with_description("The number of messages received by the activity tracker")
68-
.with_unit(opentelemetry::metrics::Unit::new("{messages}"))
68+
.with_unit("{messages}")
6969
.init();
7070

7171
// Record stuff on the counter so that the metrics are initialized
@@ -85,7 +85,7 @@ impl Worker {
8585
let flush_time_histogram = meter
8686
.u64_histogram("mas.activity_tracker.flush_time")
8787
.with_description("The time it took to flush the activity tracker")
88-
.with_unit(opentelemetry::metrics::Unit::new("ms"))
88+
.with_unit("ms")
8989
.init();
9090

9191
Self {

crates/http/Cargo.toml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ hyper.workspace = true
2323
hyper-util.workspace = true
2424
hyper-rustls = { workspace = true, optional = true }
2525
opentelemetry.workspace = true
26-
opentelemetry-http = { workspace = true, optional = true }
2726
opentelemetry-semantic-conventions.workspace = true
2827
rustls = { workspace = true, optional = true }
2928
rustls-platform-verifier = { workspace = true, optional = true }
@@ -37,9 +36,6 @@ tower-http.workspace = true
3736
tracing.workspace = true
3837
tracing-opentelemetry.workspace = true
3938

40-
# opentelemetry-http still requires http 0.2, and we need to convert types
41-
http02 = { package = "http", version = "0.2.12", optional = true }
42-
4339
mas-tower = { workspace = true, optional = true }
4440

4541
[dev-dependencies]
@@ -52,8 +48,6 @@ client = [
5248
"dep:rustls",
5349
"dep:hyper-rustls",
5450
"dep:rustls-platform-verifier",
55-
"dep:http02",
56-
"dep:opentelemetry-http",
5751
"tower/limit",
5852
"tower-http/timeout",
5953
"tower-http/follow-redirect",

crates/http/src/client.rs

Lines changed: 0 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
use bytes::Bytes;
16-
use http_body_util::{BodyExt, Full};
1715
use hyper_rustls::{HttpsConnector, HttpsConnectorBuilder};
1816
pub use hyper_util::client::legacy::Client;
1917
use hyper_util::{
@@ -27,7 +25,6 @@ use mas_tower::{
2725
DurationRecorderLayer, DurationRecorderService, FnWrapper, InFlightCounterLayer,
2826
InFlightCounterService, TraceLayer, TraceService,
2927
};
30-
use opentelemetry_http::HttpClient;
3128
use opentelemetry_semantic_conventions::trace::SERVER_ADDRESS;
3229
use tower::Layer;
3330
use tracing::Span;
@@ -97,76 +94,3 @@ fn make_connector<R>(
9794
.enable_http2()
9895
.wrap_connector(http)
9996
}
100-
101-
/// A client which can be used by opentelemetry-http to send request through
102-
/// hyper 1.x
103-
///
104-
/// This is needed until OTEL upgrades to hyper 1.x
105-
/// <https://github.com/open-telemetry/opentelemetry-rust/pull/1674>
106-
#[derive(Debug)]
107-
pub struct OtelClient {
108-
client: UntracedClient<Full<Bytes>>,
109-
}
110-
111-
impl OtelClient {
112-
/// Create a new [`OtelClient`] from a [`UntracedClient`]
113-
#[must_use]
114-
pub fn new(client: UntracedClient<Full<Bytes>>) -> Self {
115-
Self { client }
116-
}
117-
}
118-
119-
#[async_trait::async_trait]
120-
impl HttpClient for OtelClient {
121-
async fn send(
122-
&self,
123-
request: opentelemetry_http::Request<Vec<u8>>,
124-
) -> Result<opentelemetry_http::Response<Bytes>, opentelemetry_http::HttpError> {
125-
// This is the annoying part: converting the OTEL http0.2 request to a http1
126-
// request
127-
let (parts, body) = request.into_parts();
128-
let body = Full::new(Bytes::from(body));
129-
let mut request = http::Request::new(body);
130-
131-
*request.uri_mut() = parts.uri.to_string().parse().unwrap();
132-
*request.method_mut() = match parts.method {
133-
http02::Method::GET => http::Method::GET,
134-
http02::Method::POST => http::Method::POST,
135-
http02::Method::PUT => http::Method::PUT,
136-
http02::Method::DELETE => http::Method::DELETE,
137-
http02::Method::HEAD => http::Method::HEAD,
138-
http02::Method::OPTIONS => http::Method::OPTIONS,
139-
http02::Method::CONNECT => http::Method::CONNECT,
140-
http02::Method::PATCH => http::Method::PATCH,
141-
http02::Method::TRACE => http::Method::TRACE,
142-
_ => return Err(opentelemetry_http::HttpError::from("Unsupported method")),
143-
};
144-
request
145-
.headers_mut()
146-
.extend(parts.headers.into_iter().map(|(k, v)| {
147-
(
148-
k.map(|k| http::HeaderName::from_bytes(k.as_ref()).unwrap()),
149-
http::HeaderValue::from_bytes(v.as_ref()).unwrap(),
150-
)
151-
}));
152-
153-
// Send the request
154-
let response = self.client.request(request).await?;
155-
156-
// Convert back the response
157-
let (parts, body) = response.into_parts();
158-
let body = body.collect().await?.to_bytes();
159-
let mut response = opentelemetry_http::Response::new(body);
160-
*response.status_mut() = parts.status.as_u16().try_into().unwrap();
161-
response
162-
.headers_mut()
163-
.extend(parts.headers.into_iter().map(|(k, v)| {
164-
(
165-
k.map(|k| http02::HeaderName::from_bytes(k.as_ref()).unwrap()),
166-
http02::HeaderValue::from_bytes(v.as_ref()).unwrap(),
167-
)
168-
}));
169-
170-
Ok(response)
171-
}
172-
}

crates/http/src/layers/client.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,13 @@ use mas_tower::{
2121
TraceLayer, TraceService,
2222
};
2323
use opentelemetry::KeyValue;
24-
use opentelemetry_semantic_conventions::trace::{
25-
CLIENT_ADDRESS, CLIENT_PORT, HTTP_REQUEST_BODY_SIZE, HTTP_REQUEST_METHOD,
26-
HTTP_RESPONSE_BODY_SIZE, HTTP_RESPONSE_STATUS_CODE, NETWORK_PROTOCOL_NAME, NETWORK_TRANSPORT,
27-
NETWORK_TYPE, SERVER_ADDRESS, SERVER_PORT, URL_FULL, USER_AGENT_ORIGINAL,
24+
use opentelemetry_semantic_conventions::{
25+
attribute::{HTTP_REQUEST_BODY_SIZE, HTTP_RESPONSE_BODY_SIZE},
26+
trace::{
27+
CLIENT_ADDRESS, CLIENT_PORT, HTTP_REQUEST_METHOD, HTTP_RESPONSE_STATUS_CODE,
28+
NETWORK_PROTOCOL_NAME, NETWORK_TRANSPORT, NETWORK_TYPE, SERVER_ADDRESS, SERVER_PORT,
29+
URL_FULL, USER_AGENT_ORIGINAL,
30+
},
2831
};
2932
use tower::{
3033
limit::{ConcurrencyLimit, GlobalConcurrencyLimitLayer},

crates/http/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ mod service;
2626
#[cfg(feature = "client")]
2727
pub use self::{
2828
client::{
29-
make_traced_connector, make_untraced_client, Client, OtelClient, TracedClient,
30-
TracedConnector, UntracedClient, UntracedConnector,
29+
make_traced_connector, make_untraced_client, Client, TracedClient, TracedConnector,
30+
UntracedClient, UntracedConnector,
3131
},
3232
layers::client::{ClientLayer, ClientService},
3333
};

crates/storage-pg/.sqlx/query-aabefb019c9195b0588882fef562472d6117ff68f8f37d02b7609c94aefdb5d6.json renamed to crates/storage-pg/.sqlx/query-75a62d170e4c959a14c5698f1da983113e7d1bc565d01e85c158856abb17ddc6.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/storage-pg/.sqlx/query-f0977fee9b3919707e9aa20537d836d741acd5b2426218a2f9f9dab4fb8a2ad0.json renamed to crates/storage-pg/.sqlx/query-89041298e272d15c21e2b7127bd16c5a4f48e2be87dc26e9d0e3a932c9c49dfb.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/storage-pg/.sqlx/query-9742df9a34fe64e294cae4fc4a18e261c03b2367adeaec8fd554ca6f52c2015e.json

Lines changed: 0 additions & 22 deletions
This file was deleted.

crates/storage-pg/.sqlx/query-fa5a57505066d03828015f79fdb1079eaea13cf7698073f2d5f74d4c50f7b094.json renamed to crates/storage-pg/.sqlx/query-bb141d28c0c82244f31d542038c314d05ceb3a7b8f35397c0faef3b36d2d14a7.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/storage-pg/.sqlx/query-c984ae0496d0bd7520ee3d6761ce6a4f61a6a2001b597e4c63ba4588ec5cf530.json

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)