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