Skip to content

Commit 2a281c6

Browse files
ganeshnjekump
authored andcommitted
chore: improve logging in telemetry crate
1 parent e741848 commit 2a281c6

File tree

14 files changed

+249
-57
lines changed

14 files changed

+249
-57
lines changed

Cargo.lock

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

LICENSE-3rdparty.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
root_name: builder, build_common, tools, datadog-alloc, datadog-crashtracker, ddcommon, ddtelemetry, datadog-ddsketch, cc_utils, datadog-crashtracker-ffi, ddcommon-ffi, datadog-ipc, datadog-ipc-macros, tarpc, tarpc-plugins, tinybytes, spawn_worker, datadog-library-config, datadog-library-config-ffi, datadog-live-debugger, datadog-live-debugger-ffi, datadog-profiling, datadog-profiling-protobuf, datadog-profiling-ffi, data-pipeline-ffi, data-pipeline, datadog-trace-protobuf, datadog-trace-utils, datadog-trace-normalization, dogstatsd-client, datadog-log-ffi, datadog-log, ddsketch-ffi, ddtelemetry-ffi, symbolizer-ffi, datadog-profiling-replayer, datadog-remote-config, datadog-sidecar, datadog-sidecar-macros, datadog-sidecar-ffi, datadog-trace-obfuscation, datadog-tracer-flare, sidecar_mockgen, test_spawn_from_lib
1+
root_name: builder, build_common, tools, datadog-alloc, datadog-crashtracker, ddcommon, ddtelemetry, datadog-ddsketch, cc_utils, datadog-crashtracker-ffi, ddcommon-ffi, datadog-ipc, datadog-ipc-macros, tarpc, tarpc-plugins, tinybytes, spawn_worker, datadog-library-config, datadog-library-config-ffi, datadog-live-debugger, datadog-live-debugger-ffi, datadog-profiling, datadog-profiling-protobuf, datadog-profiling-ffi, data-pipeline-ffi, data-pipeline, datadog-trace-protobuf, datadog-trace-utils, datadog-trace-normalization, dogstatsd-client, datadog-log, datadog-log-ffi, ddsketch-ffi, ddtelemetry-ffi, symbolizer-ffi, datadog-profiling-replayer, datadog-remote-config, datadog-sidecar, datadog-sidecar-macros, datadog-sidecar-ffi, datadog-trace-obfuscation, datadog-tracer-flare, sidecar_mockgen, test_spawn_from_lib
22
third_party_libraries:
33
- package_name: addr2line
44
package_version: 0.24.2
@@ -26639,9 +26639,9 @@ third_party_libraries:
2663926639
- package_name: stringmetrics
2664026640
package_version: 2.2.2
2664126641
repository: https://github.com/pluots/stringmetrics
26642-
license: License specified in file ($CARGO_HOME/registry/src/github.com-25cdd57fae9f0462/stringmetrics-2.2.2/LICENSE)
26642+
license: License specified in file ($CARGO_HOME/registry/src/index.crates.io-1949cf8c6b5b557f/stringmetrics-2.2.2/LICENSE)
2664326643
licenses:
26644-
- license: License specified in file ($CARGO_HOME/registry/src/github.com-25cdd57fae9f0462/stringmetrics-2.2.2/LICENSE)
26644+
- license: License specified in file ($CARGO_HOME/registry/src/index.crates.io-1949cf8c6b5b557f/stringmetrics-2.2.2/LICENSE)
2664526645
text: |
2664626646
Copyright 2022 Trevor Gross
2664726647

data-pipeline-ffi/src/trace_exporter.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use ddcommon_ffi::{
1111
{slice::AsBytes, slice::ByteSlice},
1212
};
1313
use std::{ptr::NonNull, time::Duration};
14-
use tracing::error;
14+
use tracing::{debug, error};
1515

1616
#[cfg(all(feature = "catch_panic", panic = "unwind"))]
1717
use std::panic::{catch_unwind, AssertUnwindSafe};
@@ -325,16 +325,16 @@ pub unsafe extern "C" fn ddog_trace_exporter_config_enable_telemetry(
325325
catch_panic!(
326326
if let Option::Some(config) = config {
327327
if let Option::Some(telemetry_cfg) = telemetry_cfg {
328-
config.telemetry_cfg = Some(TelemetryConfig {
328+
let cfg = TelemetryConfig {
329329
heartbeat: telemetry_cfg.interval,
330330
runtime_id: match sanitize_string(telemetry_cfg.runtime_id) {
331331
Ok(s) => Some(s),
332332
Err(e) => return Some(e),
333333
},
334334
debug_enabled: telemetry_cfg.debug_enabled,
335-
})
336-
} else {
337-
config.telemetry_cfg = Some(TelemetryConfig::default());
335+
};
336+
debug!(telemetry_cfg = ?cfg, "Configuring telemetry");
337+
config.telemetry_cfg = Some(cfg);
338338
}
339339
None
340340
} else {
@@ -467,7 +467,7 @@ pub unsafe extern "C" fn ddog_trace_exporter_new(
467467
}
468468

469469
if let Some(cfg) = &config.telemetry_cfg {
470-
builder.enable_telemetry(Some(cfg.clone()));
470+
builder.enable_telemetry(cfg.clone());
471471
}
472472

473473
if let Some(token) = &config.test_session_token {
@@ -795,8 +795,7 @@ mod tests {
795795
let mut cfg = TraceExporterConfig::default();
796796
let error = ddog_trace_exporter_config_enable_telemetry(Some(&mut cfg), None);
797797
assert!(error.is_none());
798-
assert_eq!(cfg.telemetry_cfg.as_ref().unwrap().heartbeat, 0);
799-
assert!(cfg.telemetry_cfg.as_ref().unwrap().runtime_id.is_none());
798+
assert!(cfg.telemetry_cfg.is_none());
800799

801800
let mut cfg = TraceExporterConfig::default();
802801
let error = ddog_trace_exporter_config_enable_telemetry(

data-pipeline/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ harness = false
5252
path = "benches/main.rs"
5353

5454
[dev-dependencies]
55+
datadog-log = { path = "../datadog-log" }
5556
clap = { version = "4.0", features = ["derive"] }
5657
criterion = "0.5.1"
5758
datadog-trace-utils = { path = "../datadog-trace-utils", features = [

data-pipeline/examples/send-traces-with-stats.rs

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33

44
use clap::Parser;
55
use data_pipeline::trace_exporter::{
6-
TraceExporter, TraceExporterInputFormat, TraceExporterOutputFormat,
6+
TelemetryConfig, TraceExporter, TraceExporterInputFormat, TraceExporterOutputFormat,
7+
};
8+
use datadog_log::logger::{
9+
logger_configure_std, logger_set_log_level, LogEventLevel, StdConfig, StdTarget,
710
};
811
use datadog_trace_protobuf::pb;
912
use std::{
@@ -44,7 +47,14 @@ struct Args {
4447
}
4548

4649
fn main() {
50+
logger_configure_std(StdConfig {
51+
target: StdTarget::Out,
52+
})
53+
.expect("Failed to configure logger");
54+
logger_set_log_level(LogEventLevel::Debug).expect("Failed to set log level");
55+
4756
let args = Args::parse();
57+
let telemetry_cfg = TelemetryConfig::default();
4858
let mut builder = TraceExporter::builder();
4959
builder
5060
.set_url(&args.url)
@@ -57,20 +67,28 @@ fn main() {
5767
.set_language_version(env!("CARGO_PKG_RUST_VERSION"))
5868
.set_input_format(TraceExporterInputFormat::V04)
5969
.set_output_format(TraceExporterOutputFormat::V04)
70+
.enable_telemetry(telemetry_cfg)
6071
.enable_stats(Duration::from_secs(10));
61-
let exporter = builder.build().unwrap();
62-
let now = UNIX_EPOCH.elapsed().unwrap().as_nanos() as i64;
72+
let exporter = builder.build().expect("Failed to build TraceExporter");
73+
let now = UNIX_EPOCH
74+
.elapsed()
75+
.expect("Failed to get time since UNIX_EPOCH")
76+
.as_nanos() as i64;
6377

6478
let mut traces = Vec::new();
65-
for trace_id in 1..=100 {
79+
for trace_id in 1..=2 {
6680
let mut trace = Vec::new();
67-
for span_id in 1..=1000 {
81+
for span_id in 1..=2 {
6882
trace.push(get_span(now, trace_id, span_id));
6983
}
7084
traces.push(trace);
7185
}
72-
let data = rmp_serde::to_vec_named(&traces).unwrap();
86+
let data = rmp_serde::to_vec_named(&traces).expect("Failed to serialize traces");
7387

74-
exporter.send(data.as_ref(), 100).unwrap();
75-
exporter.shutdown(None).unwrap();
88+
exporter
89+
.send(data.as_ref(), 2)
90+
.expect("Failed to send traces");
91+
exporter
92+
.shutdown(None)
93+
.expect("Failed to shutdown exporter");
7694
}

data-pipeline/src/trace_exporter/builder.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -193,12 +193,8 @@ impl TraceExporterBuilder {
193193
}
194194

195195
/// Enables sending telemetry metrics.
196-
pub fn enable_telemetry(&mut self, cfg: Option<TelemetryConfig>) -> &mut Self {
197-
if let Some(cfg) = cfg {
198-
self.telemetry = Some(cfg);
199-
} else {
200-
self.telemetry = Some(TelemetryConfig::default());
201-
}
196+
pub fn enable_telemetry(&mut self, cfg: TelemetryConfig) -> &mut Self {
197+
self.telemetry = Some(cfg);
202198
self
203199
}
204200

@@ -381,11 +377,11 @@ mod tests {
381377
.set_input_format(TraceExporterInputFormat::Proxy)
382378
.set_output_format(TraceExporterOutputFormat::V04)
383379
.set_client_computed_stats()
384-
.enable_telemetry(Some(TelemetryConfig {
380+
.enable_telemetry(TelemetryConfig {
385381
heartbeat: 1000,
386382
runtime_id: None,
387383
debug_enabled: false,
388-
}));
384+
});
389385
let exporter = builder.build().unwrap();
390386

391387
assert_eq!(

data-pipeline/src/trace_exporter/mod.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1080,10 +1080,10 @@ mod tests {
10801080
};
10811081

10821082
if enable_telemetry {
1083-
builder.enable_telemetry(Some(TelemetryConfig {
1083+
builder.enable_telemetry(TelemetryConfig {
10841084
heartbeat: 100,
10851085
..Default::default()
1086-
}));
1086+
});
10871087
}
10881088

10891089
builder.build().unwrap()
@@ -1619,10 +1619,10 @@ mod tests {
16191619
.set_language("nodejs")
16201620
.set_language_version("1.0")
16211621
.set_language_interpreter("v8")
1622-
.enable_telemetry(Some(TelemetryConfig {
1622+
.enable_telemetry(TelemetryConfig {
16231623
heartbeat: 100,
16241624
..Default::default()
1625-
}));
1625+
});
16261626
let exporter = builder.build().unwrap();
16271627

16281628
let traces = vec![0x90];
@@ -1743,10 +1743,10 @@ mod tests {
17431743
.set_language("nodejs")
17441744
.set_language_version("1.0")
17451745
.set_language_interpreter("v8")
1746-
.enable_telemetry(Some(TelemetryConfig {
1746+
.enable_telemetry(TelemetryConfig {
17471747
heartbeat: 100,
17481748
..Default::default()
1749-
}))
1749+
})
17501750
.set_input_format(TraceExporterInputFormat::V04)
17511751
.set_output_format(TraceExporterOutputFormat::V05);
17521752

ddtelemetry/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ license.workspace = true
1010
bench = false
1111

1212
[features]
13-
default = []
13+
default = ["tracing"]
1414
tracing = ["tracing/std"]
1515
https = ["ddcommon/https"]
1616

ddtelemetry/src/config.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use ddcommon::{config::parse_env, parse_uri, Endpoint};
55
use http::{uri::PathAndQuery, Uri};
66
use std::{borrow::Cow, time::Duration};
7+
use tracing::debug;
78

89
pub const DEFAULT_DD_SITE: &str = "datadoghq.com";
910
pub const PROD_INTAKE_SUBDOMAIN: &str = "instrumentation-telemetry-intake";
@@ -119,6 +120,10 @@ impl Settings {
119120
const _DD_SHARED_LIB_DEBUG: &'static str = "_DD_SHARED_LIB_DEBUG";
120121

121122
pub fn from_env() -> Self {
123+
debug!(
124+
config.source = "environment",
125+
"Loading telemetry settings from environment variables"
126+
);
122127
let default = Self::default();
123128
Self {
124129
agent_host: parse_env::str_not_empty(Self::DD_AGENT_HOST),

ddtelemetry/src/lib.rs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#![cfg_attr(not(test), deny(clippy::unimplemented))]
1111

1212
use ddcommon::entity_id;
13+
use tracing::debug;
1314

1415
pub mod config;
1516
pub mod data;
@@ -18,11 +19,24 @@ pub mod metrics;
1819
pub mod worker;
1920

2021
pub fn build_host() -> data::Host {
22+
debug!("Building telemetry host information");
23+
let hostname = info::os::real_hostname().unwrap_or_else(|_| String::from("unknown_hostname"));
24+
let container_id = entity_id::get_container_id().map(|f| f.to_string());
25+
let os_version = info::os::os_version().ok();
26+
27+
debug!(
28+
host.hostname = %hostname,
29+
host.container_id = ?container_id,
30+
host.os = info::os::os_name(),
31+
host.os_version = ?os_version,
32+
"Built telemetry host information"
33+
);
34+
2135
data::Host {
22-
hostname: info::os::real_hostname().unwrap_or_else(|_| String::from("unknown_hostname")),
23-
container_id: entity_id::get_container_id().map(|f| f.to_string()),
36+
hostname,
37+
container_id,
2438
os: Some(String::from(info::os::os_name())),
25-
os_version: info::os::os_version().ok(),
39+
os_version,
2640
kernel_name: None,
2741
kernel_release: None,
2842
kernel_version: None,

0 commit comments

Comments
 (0)