1pub struct SalukiKey {
6 pub yaml_path: &'static str,
7 pub description: &'static str,
8 pub default: &'static str,
9 pub documentation: Option<&'static str>,
12 pub value_type: &'static str,
14 pub schema_default: Option<&'static str>,
15 pub env_vars: &'static [&'static str],
16 pub env_var_override: Option<&'static [&'static str]>,
17 pub additional_yaml_paths: &'static [&'static str],
18 pub used_by: &'static [&'static str],
19 pub test_json: Option<&'static str>,
20 pub pipeline_affinity: &'static str,
21 pub filename: &'static str,
22}
23
24pub static SALUKI_KEYS: &[SalukiKey] = &[
25 SalukiKey {
27 yaml_path: "data_plane.metrics.v3.series.enabled",
28 description: "Enable ADP V3 series",
29 default: "false",
30 documentation: Some(
31 "ADP requires this flag before it generates or forwards authoritative V3 series payloads. \
32 This is separate from `use_v3_api.series.*`, which matches the Core Agent V3 routing configuration.",
33 ),
34 value_type: "ValueType::Bool",
35 schema_default: Some("false"),
36 env_vars: &[],
37 env_var_override: None,
38 additional_yaml_paths: &[],
39 used_by: &["DATADOG_METRICS_CONFIGURATION", "FORWARDER_CONFIGURATION"],
40 test_json: None,
41 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
42 filename: "data_plane.rs",
43 },
44 SalukiKey {
45 yaml_path: "data_plane.stop_timeout",
46 description: "ADP graceful shutdown timeout (s)",
47 default: "derived",
48 documentation: Some(
49 "### `data_plane.stop_timeout`
50
51\
52 ADP uses `data_plane.stop_timeout` as the topology-wide graceful shutdown timeout. \
53 If this key is unset, ADP defaults to `aggregator_stop_timeout + forwarder_stop_timeout`.",
54 ),
55 value_type: "ValueType::Integer",
56 schema_default: None,
57 env_vars: &[],
58 env_var_override: None,
59 additional_yaml_paths: &[],
60 used_by: &["GET_TYPED"],
61 test_json: None,
62 pipeline_affinity: "PipelineAffinity::CrossCutting",
63 filename: "data_plane.rs",
64 },
65 SalukiKey {
67 yaml_path: "dogstatsd_allow_context_heap_allocs",
68 description: "Allow heap allocations for contexts",
69 default: "",
70 documentation: None,
71 value_type: "ValueType::Bool",
72 schema_default: Some("true"),
73 env_vars: &[],
74 env_var_override: None,
75 additional_yaml_paths: &[],
76 used_by: &["DOGSTATSD_CONFIGURATION"],
77 test_json: None,
78 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
79 filename: "dogstatsd.rs",
80 },
81 SalukiKey {
82 yaml_path: "dogstatsd_autoscale_udp_listeners",
83 description: "Bind multiple UDP sockets via SO_REUSEPORT",
84 default: "",
85 documentation: None,
86 value_type: "ValueType::Bool",
87 schema_default: Some("false"),
88 env_vars: &[],
89 env_var_override: None,
90 additional_yaml_paths: &[],
91 used_by: &["DOGSTATSD_CONFIGURATION"],
92 test_json: None,
93 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
94 filename: "dogstatsd.rs",
95 },
96 SalukiKey {
97 yaml_path: "dogstatsd_buffer_count",
98 description: "Baseline receive buffers",
99 default: "128",
100 documentation: None,
101 value_type: "ValueType::Integer",
102 schema_default: Some("128"),
103 env_vars: &[],
104 env_var_override: None,
105 additional_yaml_paths: &[],
106 used_by: &["DOGSTATSD_CONFIGURATION"],
107 test_json: None,
108 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
109 filename: "dogstatsd.rs",
110 },
111 SalukiKey {
112 yaml_path: "dogstatsd_buffer_count_max",
113 description: "Max receive buffers",
114 default: "256",
115 documentation: None,
116 value_type: "ValueType::Integer",
117 schema_default: Some("256"),
118 env_vars: &[],
119 env_var_override: None,
120 additional_yaml_paths: &[],
121 used_by: &["DOGSTATSD_CONFIGURATION"],
122 test_json: None,
123 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
124 filename: "dogstatsd.rs",
125 },
126 SalukiKey {
127 yaml_path: "dogstatsd_cached_contexts_limit",
128 description: "Max cached metric contexts",
129 default: "",
130 documentation: None,
131 value_type: "ValueType::Integer",
132 schema_default: None,
133 env_vars: &[],
134 env_var_override: None,
135 additional_yaml_paths: &[],
136 used_by: &["DOGSTATSD_CONFIGURATION"],
137 test_json: None,
138 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
139 filename: "dogstatsd.rs",
140 },
141 SalukiKey {
142 yaml_path: "dogstatsd_cached_tagsets_limit",
143 description: "Max cached tagsets",
144 default: "",
145 documentation: None,
146 value_type: "ValueType::Integer",
147 schema_default: None,
148 env_vars: &[],
149 env_var_override: None,
150 additional_yaml_paths: &[],
151 used_by: &["DOGSTATSD_CONFIGURATION"],
152 test_json: None,
153 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
154 filename: "dogstatsd.rs",
155 },
156 SalukiKey {
157 yaml_path: "dogstatsd_minimum_sample_rate",
158 description: "Floor for metric sample rates",
159 default: "",
160 documentation: Some(
161 "ADP enforces a minimum sample rate on incoming metrics to prevent memory exhaustion \
162 from extremely low sample rates on histograms and sketches. Sending metrics with a \
163 very high inverse sample rate (for example `@0.0000001`) can cause unbounded memory \
164 growth in a sketch; this setting prevents that. The default is conservative enough \
165 that normal clients are unaffected.",
166 ),
167 value_type: "ValueType::Float",
168 schema_default: None,
169 env_vars: &[],
170 env_var_override: None,
171 additional_yaml_paths: &[],
172 used_by: &["DOGSTATSD_CONFIGURATION"],
173 test_json: None,
174 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
175 filename: "dogstatsd.rs",
176 },
177 SalukiKey {
178 yaml_path: "dogstatsd_permissive_decoding",
179 description: "Relaxes decoder strictness",
180 default: "true",
181 documentation: Some(
182 "By default, ADP parses DogStatsD packets with the same leniency as the core agent, \
183 accepting packets that technically violate the spec. Setting this to `false` enables \
184 strict mode, which rejects non-conformant packets. Strict mode is not available in \
185 the core agent.",
186 ),
187 value_type: "ValueType::Bool",
188 schema_default: Some("true"),
189 env_vars: &[],
190 env_var_override: None,
191 additional_yaml_paths: &[],
192 used_by: &["DOGSTATSD_CONFIGURATION"],
193 test_json: None,
194 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
195 filename: "dogstatsd.rs",
196 },
197 SalukiKey {
198 yaml_path: "dogstatsd_string_interner_size_bytes",
199 description: "Explicit byte budget for context interner",
200 default: "",
201 documentation: None,
202 value_type: "ValueType::Integer",
203 schema_default: None,
204 env_vars: &[],
205 env_var_override: None,
206 additional_yaml_paths: &[],
207 used_by: &["DOGSTATSD_CONFIGURATION"],
208 test_json: None,
209 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
210 filename: "dogstatsd.rs",
211 },
212 SalukiKey {
213 yaml_path: "dogstatsd_tcp_port",
214 description: "TCP listen port for DSD",
215 default: "",
216 documentation: None,
217 value_type: "ValueType::Integer",
218 schema_default: None,
219 env_vars: &[],
220 env_var_override: None,
221 additional_yaml_paths: &[],
222 used_by: &["DOGSTATSD_CONFIGURATION"],
223 test_json: None,
224 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
225 filename: "dogstatsd.rs",
226 },
227 SalukiKey {
229 yaml_path: "otlp_config.traces.enable_otlp_compute_top_level_by_span_kind",
230 description: "Enable OTLP top-level-by-span-kind",
231 default: "",
232 documentation: None,
233 value_type: "ValueType::Bool",
234 schema_default: Some("true"),
235 env_vars: &[],
236 env_var_override: None,
237 additional_yaml_paths: &[],
238 used_by: &["OTLP_DECODER_CONFIGURATION", "OTLP_CONFIGURATION"],
239 test_json: None,
240 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
241 filename: "otlp.rs",
242 },
243 SalukiKey {
244 yaml_path: "otlp_config.traces.ignore_missing_datadog_fields",
245 description: "Ignore missing Datadog fields in OTLP",
246 default: "",
247 documentation: None,
248 value_type: "ValueType::Bool",
249 schema_default: None,
250 env_vars: &[],
251 env_var_override: None,
252 additional_yaml_paths: &[],
253 used_by: &["OTLP_DECODER_CONFIGURATION", "OTLP_CONFIGURATION"],
254 test_json: None,
255 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
256 filename: "otlp.rs",
257 },
258 SalukiKey {
259 yaml_path: "otlp_config.traces.string_interner_size",
260 description: "OTLP trace string interner capacity",
261 default: "",
262 documentation: None,
263 value_type: "ValueType::Integer",
264 schema_default: None,
265 env_vars: &[],
266 env_var_override: None,
267 additional_yaml_paths: &[],
268 used_by: &["OTLP_DECODER_CONFIGURATION", "OTLP_CONFIGURATION"],
269 test_json: None,
270 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
271 filename: "otlp.rs",
272 },
273 SalukiKey {
274 yaml_path: "otlp_config.receiver.protocols.http.transport",
275 description: "OTLP HTTP receiver transport",
276 default: "",
277 documentation: None,
278 value_type: "ValueType::String",
279 schema_default: None,
280 env_vars: &[],
281 env_var_override: None,
282 additional_yaml_paths: &[],
283 used_by: &["OTLP_RELAY_CONFIGURATION", "OTLP_CONFIGURATION"],
284 test_json: None,
285 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
286 filename: "otlp.rs",
287 },
288 SalukiKey {
289 yaml_path: "otlp_allow_context_heap_allocs",
290 description: "Allow heap allocations for OTLP contexts",
291 default: "",
292 documentation: None,
293 value_type: "ValueType::Bool",
294 schema_default: Some("true"),
295 env_vars: &[],
296 env_var_override: None,
297 additional_yaml_paths: &[],
298 used_by: &["OTLP_CONFIGURATION"],
299 test_json: None,
300 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
301 filename: "otlp.rs",
302 },
303 SalukiKey {
304 yaml_path: "otlp_cached_contexts_limit",
305 description: "Max cached OTLP metric contexts",
306 default: "",
307 documentation: None,
308 value_type: "ValueType::Integer",
309 schema_default: None,
310 env_vars: &[],
311 env_var_override: None,
312 additional_yaml_paths: &[],
313 used_by: &["OTLP_CONFIGURATION"],
314 test_json: None,
315 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
316 filename: "otlp.rs",
317 },
318 SalukiKey {
319 yaml_path: "otlp_cached_tagsets_limit",
320 description: "Max cached OTLP tagsets",
321 default: "",
322 documentation: None,
323 value_type: "ValueType::Integer",
324 schema_default: None,
325 env_vars: &[],
326 env_var_override: None,
327 additional_yaml_paths: &[],
328 used_by: &["OTLP_CONFIGURATION"],
329 test_json: None,
330 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
331 filename: "otlp.rs",
332 },
333 SalukiKey {
334 yaml_path: "otlp_string_interner_size",
335 description: "OTLP context interner capacity",
336 default: "",
337 documentation: None,
338 value_type: "ValueType::Integer",
339 schema_default: None,
340 env_vars: &[],
341 env_var_override: None,
342 additional_yaml_paths: &[],
343 used_by: &["OTLP_CONFIGURATION"],
344 test_json: None,
345 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
346 filename: "otlp.rs",
347 },
348 SalukiKey {
350 yaml_path: "aggregate_window_duration_seconds",
351 description: "Aggregation window size",
352 default: "",
353 documentation: None,
354 value_type: "ValueType::Integer",
355 schema_default: None,
356 env_vars: &[],
357 env_var_override: None,
358 additional_yaml_paths: &[],
359 used_by: &["AGGREGATE_CONFIGURATION"],
360 test_json: None,
361 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD, Pipeline::Checks])",
362 filename: "aggregate.rs",
363 },
364 SalukiKey {
365 yaml_path: "aggregate_flush_interval",
366 description: "Aggregator flush period",
367 default: "",
368 documentation: None,
369 value_type: "ValueType::String",
370 schema_default: None,
371 env_vars: &[],
372 env_var_override: None,
373 additional_yaml_paths: &[],
374 used_by: &["AGGREGATE_CONFIGURATION"],
375 test_json: Some(r#"{"secs": 42, "nanos": 0}"#),
376 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD, Pipeline::Checks])",
377 filename: "aggregate.rs",
378 },
379 SalukiKey {
380 yaml_path: "aggregate_context_limit",
381 description: "Max contexts per aggregation window",
382 default: "",
383 documentation: None,
384 value_type: "ValueType::Integer",
385 schema_default: None,
386 env_vars: &[],
387 env_var_override: None,
388 additional_yaml_paths: &[],
389 used_by: &["AGGREGATE_CONFIGURATION"],
390 test_json: None,
391 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD, Pipeline::Checks])",
392 filename: "aggregate.rs",
393 },
394 SalukiKey {
395 yaml_path: "counter_expiry_seconds",
396 description: "Idle counter keep-alive duration",
397 default: "300",
398 documentation: None,
399 value_type: "ValueType::Integer",
400 schema_default: None,
401 env_vars: &[],
402 env_var_override: None,
403 additional_yaml_paths: &["dogstatsd_expiry_seconds"],
404 used_by: &["AGGREGATE_CONFIGURATION"],
405 test_json: None,
406 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD, Pipeline::Checks])",
407 filename: "aggregate.rs",
408 },
409 SalukiKey {
410 yaml_path: "aggregate_passthrough_idle_flush_timeout",
411 description: "Passthrough buffer flush delay",
412 default: "",
413 documentation: None,
414 value_type: "ValueType::String",
415 schema_default: None,
416 env_vars: &[],
417 env_var_override: None,
418 additional_yaml_paths: &[],
419 used_by: &["AGGREGATE_CONFIGURATION"],
420 test_json: Some(r#"{"secs": 42, "nanos": 0}"#),
421 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD, Pipeline::Checks])",
422 filename: "aggregate.rs",
423 },
424 SalukiKey {
426 yaml_path: "apm_config.obfuscation.sql.dbms",
427 description: "SQL obfuscation DBMS dialect",
428 default: "",
429 documentation: None,
430 value_type: "ValueType::String",
431 schema_default: None,
432 env_vars: &[],
433 env_var_override: None,
434 additional_yaml_paths: &[],
435 used_by: &["TRACE_OBFUSCATION_CONFIGURATION"],
436 test_json: None,
437 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
438 filename: "trace_obfuscation.rs",
439 },
440 SalukiKey {
441 yaml_path: "apm_config.obfuscation.sql.dollar_quoted_func",
442 description: "Preserve dollar-quoted SQL functions",
443 default: "",
444 documentation: None,
445 value_type: "ValueType::Bool",
446 schema_default: None,
447 env_vars: &[],
448 env_var_override: None,
449 additional_yaml_paths: &[],
450 used_by: &["TRACE_OBFUSCATION_CONFIGURATION"],
451 test_json: None,
452 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
453 filename: "trace_obfuscation.rs",
454 },
455 SalukiKey {
456 yaml_path: "apm_config.obfuscation.sql.keep_sql_alias",
457 description: "Preserve SQL aliases in obfuscation",
458 default: "",
459 documentation: None,
460 value_type: "ValueType::Bool",
461 schema_default: None,
462 env_vars: &[],
463 env_var_override: None,
464 additional_yaml_paths: &[],
465 used_by: &["TRACE_OBFUSCATION_CONFIGURATION"],
466 test_json: None,
467 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
468 filename: "trace_obfuscation.rs",
469 },
470 SalukiKey {
471 yaml_path: "apm_config.obfuscation.sql.replace_digits",
472 description: "Replace digits in SQL obfuscation",
473 default: "",
474 documentation: None,
475 value_type: "ValueType::Bool",
476 schema_default: None,
477 env_vars: &[],
478 env_var_override: None,
479 additional_yaml_paths: &[],
480 used_by: &["TRACE_OBFUSCATION_CONFIGURATION"],
481 test_json: None,
482 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
483 filename: "trace_obfuscation.rs",
484 },
485 SalukiKey {
486 yaml_path: "apm_config.obfuscation.sql.table_names",
487 description: "Collect table names during obfuscation",
488 default: "",
489 documentation: None,
490 value_type: "ValueType::Bool",
491 schema_default: None,
492 env_vars: &[],
493 env_var_override: None,
494 additional_yaml_paths: &[],
495 used_by: &["TRACE_OBFUSCATION_CONFIGURATION"],
496 test_json: None,
497 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
498 filename: "trace_obfuscation.rs",
499 },
500 SalukiKey {
502 yaml_path: "flush_timeout_secs",
503 description: "Encoder flush timeout (secs)",
504 default: "",
505 documentation: None,
506 value_type: "ValueType::Integer",
507 schema_default: None,
508 env_vars: &[],
509 env_var_override: None,
510 additional_yaml_paths: &[],
511 used_by: &[
512 "DATADOG_APM_STATS_ENCODER_CONFIGURATION",
513 "DATADOG_METRICS_CONFIGURATION",
514 "DATADOG_TRACE_CONFIGURATION",
515 ],
516 test_json: None,
517 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Checks, Pipeline::Traces, Pipeline::DogStatsD])",
518 filename: "encoders.rs",
519 },
520 SalukiKey {
521 yaml_path: "serializer_max_metrics_per_payload",
522 description: "Max metrics per payload",
523 default: "",
524 documentation: None,
525 value_type: "ValueType::Integer",
526 schema_default: None,
527 env_vars: &[],
528 env_var_override: None,
529 additional_yaml_paths: &[],
530 used_by: &["DATADOG_METRICS_CONFIGURATION"],
531 test_json: None,
532 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Checks, Pipeline::DogStatsD])",
533 filename: "encoders.rs",
534 },
535 SalukiKey {
537 yaml_path: "dogstatsd_mapper_string_interner_size",
538 description: "Mapper string interner capacity",
539 default: "",
540 documentation: None,
541 value_type: "ValueType::Integer",
542 schema_default: None,
543 env_vars: &[],
544 env_var_override: None,
545 additional_yaml_paths: &[],
546 used_by: &["DOGSTATSD_MAPPER_CONFIGURATION"],
547 test_json: None,
548 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
549 filename: "dogstatsd_mapper.rs",
550 },
551 SalukiKey {
553 yaml_path: "memory_limit",
554 description: "Process memory limit",
555 default: "",
556 documentation: Some(
557 "### `memory_limit` / `memory_slop_factor`
558
559\
560 ADP uses an explicit process memory limit (`memory_limit`) rather than relying on \
561 Go's garbage collector. The `memory_slop_factor` reserves a fraction of the limit \
562 to account for allocations not tracked by ADP's internal accounting. When memory \
563 usage approaches `memory_limit`, ADP's global limiter begins exerting backpressure \
564 (see `enable_global_limiter`).",
565 ),
566 value_type: "ValueType::String",
567 schema_default: None,
568 env_vars: &[],
569 env_var_override: None,
570 additional_yaml_paths: &[],
571 used_by: &[],
572 test_json: None,
573 pipeline_affinity: "PipelineAffinity::CrossCutting",
574 filename: "accounting.rs",
575 },
576 SalukiKey {
577 yaml_path: "memory_slop_factor",
578 description: "Memory accounting slop fraction",
579 default: "0.25",
580 documentation: Some("See `memory_limit` above."),
581 value_type: "ValueType::Float",
582 schema_default: Some("0.25"),
583 env_vars: &[],
584 env_var_override: None,
585 additional_yaml_paths: &[],
586 used_by: &[],
587 test_json: None,
588 pipeline_affinity: "PipelineAffinity::CrossCutting",
589 filename: "accounting.rs",
590 },
591];