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.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    // ── dogstatsd.rs ─────────────────────────────────────────────────────────
48    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    // ── otlp.rs ──────────────────────────────────────────────────────────────
195    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    // ── aggregate.rs ─────────────────────────────────────────────────────────
316    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    // ── trace_obfuscation.rs ─────────────────────────────────────────────────
392    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    // ── encoders.rs ──────────────────────────────────────────────────────────
468    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    // ── dogstatsd_mapper.rs ──────────────────────────────────────────────────
503    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    // ── accounting.rs ────────────────────────────────────────────────────────
519    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];