Skip to content

Commit 350beff

Browse files
[CLN] Use GRPC for chroma-load OTEL (chroma-core#4427)
2 parents 0daa417 + 8fa5a73 commit 350beff

File tree

1 file changed

+13
-86
lines changed

1 file changed

+13
-86
lines changed

rust/load/src/opentelemetry_config.rs

Lines changed: 13 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -5,114 +5,41 @@
55

66
use opentelemetry::global;
77
use opentelemetry::trace::TracerProvider;
8-
use opentelemetry_otlp::{WithExportConfig, WithHttpConfig};
8+
use opentelemetry_otlp::WithExportConfig;
99
use opentelemetry_sdk::propagation::TraceContextPropagator;
1010
use tracing_bunyan_formatter::BunyanFormattingLayer;
1111
use tracing_subscriber::{layer::SubscriberExt, EnvFilter, Layer};
1212

13-
#[derive(Clone, Debug, Default)]
14-
struct ChromaShouldSample;
15-
16-
const BUSY_NS: opentelemetry::Key = opentelemetry::Key::from_static_str("busy_ns");
17-
const IDLE_NS: opentelemetry::Key = opentelemetry::Key::from_static_str("idle_ns");
18-
19-
fn is_slow(attributes: &[opentelemetry::KeyValue]) -> bool {
20-
let mut nanos = 0i64;
21-
for attr in attributes {
22-
if attr.key == BUSY_NS || attr.key == IDLE_NS {
23-
if let opentelemetry::Value::I64(ns) = attr.value {
24-
nanos += ns;
25-
}
26-
}
27-
}
28-
nanos > 20_000_000
29-
}
30-
31-
impl opentelemetry_sdk::trace::ShouldSample for ChromaShouldSample {
32-
fn should_sample(
33-
&self,
34-
_: Option<&opentelemetry::Context>,
35-
_: opentelemetry::trace::TraceId,
36-
name: &str,
37-
_: &opentelemetry::trace::SpanKind,
38-
attributes: &[opentelemetry::KeyValue],
39-
_: &[opentelemetry::trace::Link],
40-
) -> opentelemetry::trace::SamplingResult {
41-
// NOTE(rescrv): THIS IS A HACK! If you find yourself seriously extending it, it's time
42-
// to investigate honeycomb's sampling capabilities.
43-
44-
// If the name is not get and not insert, or the request is slow, sample it.
45-
// Otherwise, drop.
46-
// This filters filters foyer calls in-process so they won't be overwhelming the tracing.
47-
if (name != "get" && name != "insert") || is_slow(attributes) {
48-
opentelemetry::trace::SamplingResult {
49-
decision: opentelemetry::trace::SamplingDecision::RecordAndSample,
50-
attributes: vec![],
51-
trace_state: opentelemetry::trace::TraceState::default(),
52-
}
53-
} else {
54-
opentelemetry::trace::SamplingResult {
55-
decision: opentelemetry::trace::SamplingDecision::Drop,
56-
attributes: vec![],
57-
trace_state: opentelemetry::trace::TraceState::default(),
58-
}
59-
}
60-
}
61-
}
62-
6313
pub(crate) fn init_otel_tracing(service_name: &String, otel_endpoint: &String) {
64-
println!(
14+
tracing::info!(
6515
"Registering jaeger subscriber for {} at endpoint {}",
66-
service_name, otel_endpoint
16+
service_name,
17+
otel_endpoint
6718
);
6819
let resource = opentelemetry_sdk::Resource::new(vec![opentelemetry::KeyValue::new(
6920
"service.name",
7021
service_name.clone(),
7122
)]);
7223

7324
// Prepare tracer.
74-
let client = reqwest::Client::new();
75-
let span_exporter = opentelemetry_otlp::SpanExporter::builder()
76-
.with_http()
77-
.with_http_client(client)
25+
let tracing_span_exporter = opentelemetry_otlp::SpanExporter::builder()
26+
.with_tonic()
7827
.with_endpoint(otel_endpoint)
7928
.build()
80-
.expect("could not build span exporter");
81-
let trace_config = opentelemetry_sdk::trace::Config::default()
82-
.with_sampler(ChromaShouldSample)
83-
.with_resource(resource.clone());
29+
.expect("could not build span exporter for tracing");
30+
let trace_config = opentelemetry_sdk::trace::Config::default().with_resource(resource.clone());
8431
let tracer_provider = opentelemetry_sdk::trace::TracerProvider::builder()
85-
.with_batch_exporter(span_exporter, opentelemetry_sdk::runtime::Tokio)
32+
.with_batch_exporter(tracing_span_exporter, opentelemetry_sdk::runtime::Tokio)
8633
.with_config(trace_config)
8734
.build();
8835
let tracer = tracer_provider.tracer(service_name.clone());
89-
// TODO(MrCroxx): Should we the tracer provider as global?
90-
// global::set_tracer_provider(tracer_provider);
9136

9237
// Prepare meter.
93-
let mut headers = reqwest::header::HeaderMap::new();
94-
headers.insert(
95-
"x-honeycomb-dataset",
96-
reqwest::header::HeaderValue::from_static("chroma-load"),
97-
);
98-
if let Ok(api_key) = std::env::var("OTEL_EXPORTER_OTLP_HEADERS") {
99-
if let Some((header, value)) = api_key.split_once("=") {
100-
if header == "x-honeycomb-team" {
101-
headers.insert(
102-
reqwest::header::HeaderName::from_static("x-honeycomb-team"),
103-
reqwest::header::HeaderValue::from_bytes(value.trim().as_bytes()).unwrap(),
104-
);
105-
}
106-
}
107-
}
108-
let client = reqwest::ClientBuilder::new()
109-
.default_headers(headers)
110-
.build()
111-
.unwrap();
11238
let metric_exporter = opentelemetry_otlp::MetricExporter::builder()
113-
.with_http()
114-
.with_http_client(client)
115-
.with_endpoint(otel_endpoint)
39+
.with_tonic()
40+
.with_endpoint(
41+
std::env::var("OTEL_EXPORTER_OTLP_METRICS_ENDPOINT").unwrap_or(otel_endpoint.clone()),
42+
)
11643
.build()
11744
.expect("could not build metric exporter");
11845

0 commit comments

Comments
 (0)