Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 17 additions & 10 deletions bin/agent-data-plane/src/cli/run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -645,12 +645,16 @@ async fn add_baseline_traces_pipeline_to_blueprint(
blueprint: &mut TopologyBlueprint, config: &GenericConfiguration, config_system: &ConfigurationSystem,
env_provider: &ADPEnvironmentProvider,
) -> Result<(), GenericError> {
let dd_traces_config = DatadogTraceConfiguration::from_configuration(config)
.error_context("Failed to configure Datadog Traces encoder.")?
.with_environment_provider(env_provider.clone())
.await?;
let trace_obfuscation_config = TraceObfuscationConfiguration::from_apm_configuration(config)?;
let saluki = config_system.config();
let dd_traces_config = DatadogTraceConfiguration::from_configuration(
&saluki.domains.traces,
&saluki.shared.metrics_encoding,
&saluki.shared.endpoints.compression,
)
.error_context("Failed to configure Datadog Traces encoder.")?
.with_environment_provider(env_provider.clone())
.await?;
let trace_obfuscation_config = TraceObfuscationConfiguration::from_configuration(&saluki.domains.traces)?;
let trace_sampler_config = TraceSamplerConfiguration::from_configuration(&saluki.domains.traces)
.error_context("Failed to configure Trace Sampler transform.")?;
let ottl_filter_config = OttlFilterConfiguration::from_configuration(&saluki.domains.traces.ottl_filter)
Expand All @@ -663,14 +667,17 @@ async fn add_baseline_traces_pipeline_to_blueprint(
.with_transform_builder("apm_onboarding", ApmOnboardingConfiguration)
.with_transform_builder("trace_obfuscation", trace_obfuscation_config)
.with_transform_builder("trace_sampler", trace_sampler_config);
let apm_stats_transform_config = ApmStatsTransformConfiguration::from_configuration(config)
let apm_stats_transform_config = ApmStatsTransformConfiguration::from_configuration(&saluki.domains.traces)
.error_context("Failed to configure APM Stats transform.")?
.with_environment_provider(env_provider.clone())
.await?;
let dd_apm_stats_encoder = DatadogApmStatsEncoderConfiguration::from_configuration(config)
.error_context("Failed to configure Datadog APM Stats encoder.")?
.with_environment_provider(env_provider.clone())
.await?;
let dd_apm_stats_encoder = DatadogApmStatsEncoderConfiguration::from_configuration(
&saluki.domains.traces,
&saluki.shared.metrics_encoding,
)
.error_context("Failed to configure Datadog APM Stats encoder.")?
.with_environment_provider(env_provider.clone())
.await?;

blueprint
.add_transform("traces_enrich", dd_traces_enrich_config)?
Expand Down
16 changes: 11 additions & 5 deletions lib/agent-data-plane-config-system/src/saluki_only.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ use agent_data_plane_config::domains::traces::{
default_error_sampling_enabled, default_rare_sampler_cardinality, default_rare_sampler_cooldown,
default_rare_sampler_tps, default_trace_environment, OttlErrorMode, OttlFilter, OttlTransform,
};
use agent_data_plane_config::shared::default_encoder_flush_timeout_secs;
use agent_data_plane_config::SalukiConfiguration;
use bytesize::ByteSize;
use saluki_config::DurationString;
Expand Down Expand Up @@ -108,8 +109,10 @@ pub struct SalukiOnly {
pub memory_limit: Option<ByteSize>,
/// Memory-accounting slop fraction (`memory_slop_factor`).
pub memory_slop_factor: Option<f64>,
/// Encoder flush timeout, in seconds (`flush_timeout_secs`).
pub flush_timeout_secs: Option<u64>,
/// Encoder flush timeout, in seconds (`flush_timeout_secs`). Shared by the metrics, trace, and
/// APM stats encoders.
#[serde(default = "default_encoder_flush_timeout_secs")]
pub flush_timeout_secs: u64,
/// Maximum metrics per payload (`serializer_max_metrics_per_payload`).
pub serializer_max_metrics_per_payload: Option<usize>,

Expand Down Expand Up @@ -411,9 +414,7 @@ impl SalukiOnly {
if let Some(v) = self.metrics_level.clone() {
config.shared.metrics_level = v;
}
if let Some(v) = self.flush_timeout_secs {
config.shared.metrics_encoding.flush_timeout = Duration::from_secs(v);
}
config.shared.metrics_encoding.flush_timeout = Duration::from_secs(self.flush_timeout_secs);
if let Some(v) = self.serializer_max_metrics_per_payload {
config.shared.metrics_encoding.max_metrics_per_payload = v;
}
Expand Down Expand Up @@ -736,6 +737,11 @@ mod tests {
assert_eq!(agg.flush_interval, Duration::from_secs(15));
assert_eq!(agg.passthrough_idle_flush_timeout, Duration::from_secs(1));

assert_eq!(
config.shared.metrics_encoding.flush_timeout,
Duration::from_secs(default_encoder_flush_timeout_secs())
);

let traces = &config.domains.traces;
assert_eq!(traces.default_env, default_trace_environment());
assert_eq!(traces.error_sampling_enabled, default_error_sampling_enabled());
Expand Down
41 changes: 38 additions & 3 deletions lib/agent-data-plane-config/src/shared.rs
Original file line number Diff line number Diff line change
Expand Up @@ -218,9 +218,24 @@ pub struct GlobalTags {
pub expected_tags_duration: Duration,
}

/// Metrics-encoder settings reused across the metrics-emitting pipelines (DogStatsD, checks, and
/// OTLP): histogram settings, payload limits, and the encoder flush timeout.
#[derive(Clone, Debug, Default, PartialEq, Serialize)]
/// Default encoder flush timeout, in seconds, applied when `flush_timeout_secs` is unset.
pub const DEFAULT_ENCODER_FLUSH_TIMEOUT_SECS: u64 = 2;

/// Default encoder flush timeout, applied when `flush_timeout_secs` is unset. Shared by the
/// metrics, trace, and APM stats encoders.
pub const fn default_encoder_flush_timeout() -> Duration {
Duration::from_secs(DEFAULT_ENCODER_FLUSH_TIMEOUT_SECS)
}

/// Default encoder flush timeout, in seconds, as read from the `flush_timeout_secs` source key.
pub const fn default_encoder_flush_timeout_secs() -> u64 {
DEFAULT_ENCODER_FLUSH_TIMEOUT_SECS
}

/// Encoder settings reused across the payload-emitting pipelines (metrics for DogStatsD, checks,
/// and OTLP, plus traces and APM stats): histogram settings, payload limits, and the encoder flush
/// timeout.
#[derive(Clone, Debug, PartialEq, Serialize)]
pub struct MetricsEncoding {
/// How long the encoder waits before flushing a partially filled payload. (not in Datadog Agent
/// config schema)
Expand Down Expand Up @@ -264,6 +279,26 @@ pub struct MetricsEncoding {
pub v3_series_enabled: bool,
}

impl Default for MetricsEncoding {
fn default() -> Self {
Self {
flush_timeout: default_encoder_flush_timeout(),
max_metrics_per_payload: 0,
max_payload_size: 0,
max_series_payload_size: 0,
max_series_points_per_payload: 0,
max_series_uncompressed_payload_size: 0,
max_uncompressed_payload_size: 0,
use_v2_series_api: false,
log_payloads: false,
histogram: HistogramEncoding::default(),
v3_api: V3ApiEncoding::default(),
v3_series_mode: V3SeriesMode::default(),
v3_series_enabled: false,
}
}
}

/// V3 metrics-intake protocol settings for the series and sketches payloads
/// (`serializer_experimental_use_v3_api.*`).
#[derive(Clone, Debug, Default, PartialEq, Serialize)]
Expand Down
243 changes: 0 additions & 243 deletions lib/saluki-components/src/common/datadog/apm.rs

This file was deleted.

1 change: 0 additions & 1 deletion lib/saluki-components/src/common/datadog/mod.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
pub mod apm;
pub mod config;
pub mod endpoints;
pub mod io;
Expand Down
Loading