Skip to main content

datadog_agent_config_overlay_model/
saluki_keys.rs

1//! ADP-only configuration keys that are not in the Datadog Agent schema.
2//! Shared between registry_gen.rs (for config registry annotations) and doc_gen.rs (for the
3//! ADP-Only documentation section).
4
5pub struct SalukiKey {
6    pub yaml_path: &'static str,
7    pub description: &'static str,
8    pub default: &'static str,
9    /// Multi-line documentation rendered as a prose section below the ADP-Only table.
10    /// If the text starts with `#`, the heading is taken from the text itself.
11    pub documentation: Option<&'static str>,
12    // Fields used only by registry_gen:
13    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    // ── data_plane.rs ────────────────────────────────────────────────────────
26    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    // ── dogstatsd.rs ─────────────────────────────────────────────────────────
66    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    // ── otlp.rs ──────────────────────────────────────────────────────────────
228    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    // ── aggregate.rs ─────────────────────────────────────────────────────────
349    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    // ── trace_obfuscation.rs ─────────────────────────────────────────────────
425    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    // ── encoders.rs ──────────────────────────────────────────────────────────
501    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    // ── dogstatsd_mapper.rs ──────────────────────────────────────────────────
536    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    // ── accounting.rs ────────────────────────────────────────────────────────
552    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];