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: "experimental.metrics_endpoint_routing.metric_allowlist",
28 description: "Per-endpoint metric allow lists",
29 default: "{}",
30 documentation: Some(concat!(
31 "### `experimental.metrics_endpoint_routing.metric_allowlist`\n\n",
32 "ADP can route a selected subset of metrics to the primary intake or to specific additional ",
33 "endpoints. This experimental routing is independent of Multi-Region Failover.\n\n",
34 "> [!WARNING]\n",
35 "> Settings under `experimental` are unstable and may change, move, or be removed. ",
36 "Do not rely on backward compatibility.\n\n",
37 "Key `experimental.metrics_endpoint_routing.metric_allowlist` by the exact configured endpoint string. ",
38 "For the ",
39 "primary, use the effective endpoint configured through `dd_url` or derived from `site`. Configure ",
40 "additional destinations and their API keys through `additional_endpoints`, and use those exact map ",
41 "keys. The allowlist filters both series and sketches by metric name. ",
42 "A metric is forwarded if its name matches this exact list or the endpoint's ",
43 "`metric_prefix_allowlist`. If both lists are empty, no metrics are sent to that endpoint. ",
44 "Endpoints absent from both policy maps retain their ordinary behavior.\n\n",
45 "ADP rejects a policy whose endpoint matches neither the primary endpoint nor a key in ",
46 "`additional_endpoints`, preventing a typo from silently sending an unfiltered stream. Endpoint policies ",
47 "are read when the topology is built, so changing the map requires an ADP restart. An absent or empty ",
48 "pair of policy maps leaves ordinary endpoint routing unchanged.\n\n",
49 "To filter the primary while leaving an additional endpoint on its ordinary full stream:\n\n",
50 "```yaml\n",
51 "api_key: <primary-api-key>\n",
52 "dd_url: https://app.us5.datadoghq.com\n",
53 "additional_endpoints:\n",
54 " https://app.datadoghq.com:\n",
55 " - <secondary-api-key>\n",
56 "# Experimental keys may change, move, or be removed without backward compatibility.\n",
57 "experimental:\n",
58 " metrics_endpoint_routing:\n",
59 " metric_allowlist:\n",
60 " https://app.us5.datadoghq.com:\n",
61 " - allowed.metric\n",
62 "```\n\n",
63 "To leave the primary on its ordinary full stream while filtering only additional endpoints, omit the ",
64 "primary URL from the policy map:\n\n",
65 "```yaml\n",
66 "api_key: <primary-api-key>\n",
67 "dd_url: https://app.us5.datadoghq.com\n",
68 "additional_endpoints:\n",
69 " https://app.datadoghq.com:\n",
70 " - <us1-api-key>\n",
71 " https://app.datadoghq.eu:\n",
72 " - <eu1-api-key>\n",
73 "experimental:\n",
74 " metrics_endpoint_routing:\n",
75 " metric_allowlist:\n",
76 " https://app.datadoghq.com:\n",
77 " - critical.slo\n",
78 " https://app.datadoghq.eu:\n",
79 " - billing.latency\n",
80 "```",
81 )),
82 value_type: "ValueType::StringMapList",
83 schema_default: Some("{}"),
84 env_vars: &[],
85 env_var_override: None,
86 additional_yaml_paths: &[],
87 used_by: &["TYPED_CONFIG_SYSTEM"],
88 test_json: Some(r#"{"https://app.datadoghq.com":["allowed.metric"]}"#),
89 pipeline_affinity: "PipelineAffinity::CrossCutting",
90 filename: "metrics_endpoint_routing.rs",
91 },
92 SalukiKey {
93 yaml_path: "experimental.metrics_endpoint_routing.metric_prefix_allowlist",
94 description: "Per-endpoint literal metric-prefix allow lists",
95 default: "{}",
96 documentation: Some(concat!(
97 "### `experimental.metrics_endpoint_routing.metric_prefix_allowlist`\n\n",
98 "Allows metric-name families at selected primary or additional endpoints. Defaults to `{}`. ",
99 "Endpoint keys follow the same rules as `metric_allowlist`; an unknown endpoint is rejected. ",
100 "These experimental settings may change, move, or be removed without backward compatibility.\n\n",
101 "Prefixes are case-sensitive literal strings, using the same starts-with semantics as the DogStatsD ",
102 "filterlist's prefix mode. There are no wildcards or regular expressions: `billing.` matches ",
103 "`billing.latency` but not `billing_other`. A prefix without the dot, `billing`, matches both. ",
104 "An empty string prefix matches every metric name; an empty list allows no names.\n\n",
105 "A metric matching either an exact name in `metric_allowlist` or a prefix in this map is forwarded. ",
106 "This applies to both series and sketches. Endpoints present in either map are filtered; endpoints ",
107 "absent from both keep ordinary delivery. If both lists for a selected endpoint are empty, all its ",
108 "metrics are dropped. Prefixes also allow future names in the family, ",
109 "so choose them carefully to avoid forwarding more traffic than intended.\n\n",
110 "To combine exact names and prefixes for one endpoint:\n\n",
111 "```yaml\n",
112 "experimental:\n",
113 " metrics_endpoint_routing:\n",
114 " metric_allowlist:\n",
115 " https://primary.example.com:\n",
116 " - critical.slo\n",
117 " metric_prefix_allowlist:\n",
118 " https://primary.example.com:\n",
119 " - billing.\n",
120 "```\n\n",
121 "The example endpoint must also be configured as the primary or an additional endpoint.",
122 )),
123 value_type: "ValueType::StringMapList",
124 schema_default: Some("{}"),
125 env_vars: &[],
126 env_var_override: None,
127 additional_yaml_paths: &[],
128 used_by: &["TYPED_CONFIG_SYSTEM"],
129 test_json: Some(r#"{"https://primary.example.com":["billing."]}"#),
130 pipeline_affinity: "PipelineAffinity::CrossCutting",
131 filename: "metrics_endpoint_routing.rs",
132 },
133 SalukiKey {
135 yaml_path: "data_plane.experimental.apm.enabled",
136 description: "Run the experimental APM proxy in front of the trace-agent",
137 default: "false",
138 documentation: Some(
139 "### `data_plane.experimental.apm.*`
140
141\
142 With `data_plane.experimental.apm.enabled` set, ADP takes over the trace-agent's receiver. It \
143 listens where the trace-agent normally does (`apm_config.receiver_port`, \
144 `apm_config.receiver_socket`, `apm_config.apm_non_local_traffic`, and `bind_host`) and forwards \
145 every request to the trace-agent at `data_plane.experimental.apm.proxy_destination`. The Datadog \
146 Agent moves the trace-agent's receiver to that address.
147
148\
149 `data_plane.experimental.apm.proxy_destination` accepts either an HTTP endpoint \
150 (`http://host:port`, such as the default `http://127.0.0.1:8127`) or a Unix domain socket \
151 (`unix:///path/to/socket`, such as `unix:///var/run/datadog/trace-agent.socket`).
152
153\
154 Prefer an `http://` destination. Over a `unix://` destination, the trace-agent attributes requests \
155 that carry no container headers, and whose container ADP couldn't resolve, to ADP's own container.
156
157\
158 > [!WARNING]
159\
160 > Settings under `experimental` are unstable and may change, move, or be removed. Do not rely on \
161 backward compatibility.",
162 ),
163 value_type: "ValueType::Bool",
164 schema_default: Some("false"),
165 env_vars: &[],
166 env_var_override: None,
167 additional_yaml_paths: &[],
168 used_by: &["TYPED_CONFIG_SYSTEM"],
169 test_json: None,
170 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
171 filename: "data_plane.rs",
172 },
173 SalukiKey {
174 yaml_path: "data_plane.experimental.apm.proxy_destination",
175 description: "HTTP or Unix socket URL of the relocated trace-agent",
176 default: "http://127.0.0.1:8127",
177 documentation: None,
178 value_type: "ValueType::String",
179 schema_default: Some("http://127.0.0.1:8127"),
180 env_vars: &[],
181 env_var_override: None,
182 additional_yaml_paths: &[],
183 used_by: &["TYPED_CONFIG_SYSTEM"],
184 test_json: None,
185 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
186 filename: "data_plane.rs",
187 },
188 SalukiKey {
189 yaml_path: "data_plane.otlp.receiver_grpc_endpoint_temporary",
190 description: "ADP OTLP gRPC listen endpoint",
191 default: "localhost:6317",
192 documentation: Some(
193 "Temporary development key for setting ADP's OTLP listen endpoints independently from the Agent's.",
194 ),
195 value_type: "ValueType::String",
196 schema_default: Some("localhost:6317"),
197 env_vars: &[],
198 env_var_override: None,
199 additional_yaml_paths: &[],
200 used_by: &["TYPED_CONFIG_SYSTEM"],
201 test_json: None,
202 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
203 filename: "data_plane.rs",
204 },
205 SalukiKey {
206 yaml_path: "data_plane.otlp.receiver_http_endpoint_temporary",
207 description: "ADP OTLP HTTP listen endpoint",
208 default: "localhost:6318",
209 documentation: Some(
210 "Temporary development key for setting ADP's OTLP listen endpoints independently from the Agent's.",
211 ),
212 value_type: "ValueType::String",
213 schema_default: Some("localhost:6318"),
214 env_vars: &[],
215 env_var_override: None,
216 additional_yaml_paths: &[],
217 used_by: &["TYPED_CONFIG_SYSTEM"],
218 test_json: None,
219 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
220 filename: "data_plane.rs",
221 },
222 SalukiKey {
224 yaml_path: "dogstatsd_allow_context_heap_allocs",
225 description: "Allow heap allocations for contexts",
226 default: "true",
227 documentation: None,
228 value_type: "ValueType::Bool",
229 schema_default: Some("true"),
230 env_vars: &[],
231 env_var_override: None,
232 additional_yaml_paths: &[],
233 used_by: &["TYPED_CONFIG_SYSTEM"],
234 test_json: None,
235 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
236 filename: "dogstatsd.rs",
237 },
238 SalukiKey {
239 yaml_path: "dogstatsd_autoscale_udp_listeners",
240 description: "Bind multiple UDP sockets via SO_REUSEPORT",
241 default: "false",
242 documentation: None,
243 value_type: "ValueType::Bool",
244 schema_default: Some("false"),
245 env_vars: &[],
246 env_var_override: None,
247 additional_yaml_paths: &[],
248 used_by: &["TYPED_CONFIG_SYSTEM"],
249 test_json: None,
250 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
251 filename: "dogstatsd.rs",
252 },
253 SalukiKey {
254 yaml_path: "dogstatsd_buffer_count",
255 description: "Baseline receive buffers",
256 default: "128",
257 documentation: None,
258 value_type: "ValueType::Integer",
259 schema_default: Some("128"),
260 env_vars: &[],
261 env_var_override: None,
262 additional_yaml_paths: &[],
263 used_by: &["TYPED_CONFIG_SYSTEM"],
264 test_json: None,
265 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
266 filename: "dogstatsd.rs",
267 },
268 SalukiKey {
269 yaml_path: "dogstatsd_buffer_count_max",
270 description: "Maximum receive buffer count",
271 default: "32768",
272 documentation: None,
273 value_type: "ValueType::Integer",
274 schema_default: Some("32768"),
275 env_vars: &[],
276 env_var_override: None,
277 additional_yaml_paths: &[],
278 used_by: &["TYPED_CONFIG_SYSTEM"],
279 test_json: None,
280 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
281 filename: "dogstatsd.rs",
282 },
283 SalukiKey {
284 yaml_path: "dogstatsd_cached_contexts_limit",
285 description: "Max cached metric contexts",
286 default: "500000",
287 documentation: None,
288 value_type: "ValueType::Integer",
289 schema_default: Some("500000"),
290 env_vars: &[],
291 env_var_override: None,
292 additional_yaml_paths: &[],
293 used_by: &["TYPED_CONFIG_SYSTEM"],
294 test_json: None,
295 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
296 filename: "dogstatsd.rs",
297 },
298 SalukiKey {
299 yaml_path: "dogstatsd_cached_tagsets_limit",
300 description: "Max cached tagsets",
301 default: "500000",
302 documentation: None,
303 value_type: "ValueType::Integer",
304 schema_default: Some("500000"),
305 env_vars: &[],
306 env_var_override: None,
307 additional_yaml_paths: &[],
308 used_by: &["TYPED_CONFIG_SYSTEM"],
309 test_json: None,
310 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
311 filename: "dogstatsd.rs",
312 },
313 SalukiKey {
314 yaml_path: "dogstatsd_minimum_sample_rate",
315 description: "Floor for metric sample rates",
316 default: "0.000000003845",
317 documentation: Some(
318 "ADP enforces a minimum sample rate on incoming metrics to prevent memory exhaustion \
319 from extremely low sample rates on histograms and sketches. Sending metrics with a \
320 very high inverse sample rate (for example `@0.0000001`) can cause unbounded memory \
321 growth in a sketch; this setting prevents that. The default is conservative enough \
322 that normal clients are unaffected.",
323 ),
324 value_type: "ValueType::Float",
325 schema_default: Some("0.000000003845"),
326 env_vars: &[],
327 env_var_override: None,
328 additional_yaml_paths: &[],
329 used_by: &["TYPED_CONFIG_SYSTEM"],
330 test_json: None,
331 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
332 filename: "dogstatsd.rs",
333 },
334 SalukiKey {
335 yaml_path: "metric_tag_value_allowlist",
336 description: "Per-metric tag value allow-list",
337 default: "[]",
338 documentation: Some(concat!(
339 "### `metric_tag_value_allowlist`\n\n",
340 "Use `metric_tag_value_allowlist` to bound metric cardinality by retaining selected values for a tag. ",
341 "Configure each list item with a `metric_prefix`, a `tag_name`, and the `values` to retain. The rule ",
342 "applies to every metric whose name starts with the prefix. Values not in the list lose the tag by default. To aggregate them under a sentinel instead, set ",
343 "`on_miss: replace` and configure `replacement`; the replacement defaults to `other`.\n\n",
344 "```yaml\n",
345 "metric_tag_value_allowlist:\n",
346 " - metric_prefix: requests.\n",
347 " tag_name: customer_id\n",
348 " values: [customer-1, customer-2]\n",
349 " on_miss: replace\n",
350 " replacement: other\n",
351 "```\n\n",
352 "This ADP-only key is independent from `metric_tag_filterlist`. Remote Config updates to ",
353 "`metric_tag_filterlist` therefore do not replace locally configured value allow-lists. Value allow-list ",
354 "changes require an ADP restart in this initial implementation. Rules apply to counters and sketch-backed ",
355 "metrics before aggregation, including instrumented and origin tags. Like `metric_tag_filterlist`, value ",
356 "rules apply only to metrics that ADP aggregates. Metrics that carry an explicit client timestamp go ",
357 "through the no-aggregation pipeline (`dogstatsd_no_aggregation_pipeline`) and keep their tags unchanged. ",
358 "ADP matches `metric_prefix` after DogStatsD mapper rewrites and `statsd_metric_namespace` prefixing, so ",
359 "configure the final metric name produced by those steps.\n\n",
360 "Whole-tag filtering runs first. If `metric_tag_filterlist` uses `action: include`, add the value-filtered ",
361 "tag key to its `tags` list or the whole-tag rule removes it before value filtering. Value rules do not ",
362 "operate on bare tags such as `customer_id`, because they have no value. An empty string in a key/value ",
363 "tag such as `customer_id:` is a value and is subject to the allow-list; include `\"\"` in `values` to ",
364 "retain it. An empty `values` list treats every key/value tag as a mismatch.\n\n",
365 "Distinct metric prefixes must not overlap, even when the rules target different tags. Multiple rules may ",
366 "use the same prefix when they target different tags. ADP rejects overlapping rules at startup so each ",
367 "metric matches at most one prefix. ADP also rejects empty metric prefixes and tag names, duplicate prefix ",
368 "and tag pairs, and tag names containing `:`. As with ",
369 "`metric_tag_filterlist`, ADP does not trim configured strings: prefixes, tag names, values, and replacements ",
370 "preserve whitespace and match exactly. Configure a replacement that cannot collide with a real tag value.",
371 )),
372 value_type: "ValueType::String",
373 schema_default: Some("[]"),
374 env_vars: &[],
375 env_var_override: Some(&[]),
376 additional_yaml_paths: &[],
377 used_by: &["TYPED_CONFIG_SYSTEM"],
378 test_json: Some(
379 r#"[{"metric_prefix":"smoke.","tag_name":"customer_id","values":["customer-1"],"on_miss":"replace","replacement":"other"}]"#,
380 ),
381 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
382 filename: "tag_filterlist.rs",
383 },
384 SalukiKey {
385 yaml_path: "dogstatsd_permissive_decoding",
386 description: "Relaxes decoder strictness",
387 default: "true",
388 documentation: Some(
389 "By default, ADP parses DogStatsD packets with the same leniency as the core agent, \
390 accepting packets that technically violate the spec. Setting this to `false` enables \
391 strict mode, which rejects non-conformant packets. Strict mode is not available in \
392 the core agent.",
393 ),
394 value_type: "ValueType::Bool",
395 schema_default: Some("true"),
396 env_vars: &[],
397 env_var_override: None,
398 additional_yaml_paths: &[],
399 used_by: &["TYPED_CONFIG_SYSTEM"],
400 test_json: None,
401 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
402 filename: "dogstatsd.rs",
403 },
404 SalukiKey {
405 yaml_path: "dogstatsd_string_interner_size_bytes",
406 description: "Explicit byte budget for context interner",
407 default: "",
408 documentation: Some(
409 "Accepts a bare integer number of bytes or a human-readable byte-size string such as `12MiB`. \
410 When unset, ADP derives the byte budget from `dogstatsd_string_interner_size`.",
411 ),
412 value_type: "ValueType::String",
413 schema_default: None,
414 env_vars: &[],
415 env_var_override: None,
416 additional_yaml_paths: &[],
417 used_by: &["TYPED_CONFIG_SYSTEM"],
418 test_json: Some(r#""12MiB""#),
419 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
420 filename: "dogstatsd.rs",
421 },
422 SalukiKey {
423 yaml_path: "dogstatsd_tcp_port",
424 description: "DogStatsD TCP listen port; 0 disables TCP",
425 default: "0",
426 documentation: None,
427 value_type: "ValueType::Integer",
428 schema_default: Some("0"),
429 env_vars: &[],
430 env_var_override: None,
431 additional_yaml_paths: &[],
432 used_by: &["TYPED_CONFIG_SYSTEM"],
433 test_json: None,
434 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
435 filename: "dogstatsd.rs",
436 },
437 SalukiKey {
439 yaml_path: "otlp_config.traces.enable_otlp_compute_top_level_by_span_kind",
440 description: "Enable OTLP top-level-by-span-kind",
441 default: "",
442 documentation: None,
443 value_type: "ValueType::Bool",
444 schema_default: Some("true"),
445 env_vars: &[],
446 env_var_override: None,
447 additional_yaml_paths: &[],
448 used_by: &["TYPED_CONFIG_SYSTEM"],
449 test_json: None,
450 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
451 filename: "otlp.rs",
452 },
453 SalukiKey {
454 yaml_path: "otlp_config.traces.ignore_missing_datadog_fields",
455 description: "Ignore missing Datadog fields in OTLP",
456 default: "",
457 documentation: None,
458 value_type: "ValueType::Bool",
459 schema_default: None,
460 env_vars: &[],
461 env_var_override: None,
462 additional_yaml_paths: &[],
463 used_by: &["TYPED_CONFIG_SYSTEM"],
464 test_json: None,
465 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
466 filename: "otlp.rs",
467 },
468 SalukiKey {
469 yaml_path: "otlp_config.traces.string_interner_size",
470 description: "OTLP trace string interner capacity",
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: &["TYPED_CONFIG_SYSTEM"],
479 test_json: None,
480 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
481 filename: "otlp.rs",
482 },
483 SalukiKey {
484 yaml_path: "otlp_config.receiver.protocols.http.transport",
485 description: "OTLP HTTP receiver transport",
486 default: "",
487 documentation: None,
488 value_type: "ValueType::String",
489 schema_default: None,
490 env_vars: &[],
491 env_var_override: None,
492 additional_yaml_paths: &[],
493 used_by: &["TYPED_CONFIG_SYSTEM"],
494 test_json: None,
495 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
496 filename: "otlp.rs",
497 },
498 SalukiKey {
499 yaml_path: "otlp_allow_context_heap_allocs",
500 description: "Allow heap allocations for OTLP contexts",
501 default: "",
502 documentation: None,
503 value_type: "ValueType::Bool",
504 schema_default: Some("true"),
505 env_vars: &[],
506 env_var_override: None,
507 additional_yaml_paths: &[],
508 used_by: &["TYPED_CONFIG_SYSTEM"],
509 test_json: None,
510 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
511 filename: "otlp.rs",
512 },
513 SalukiKey {
514 yaml_path: "otlp_cached_contexts_limit",
515 description: "Max cached OTLP metric contexts",
516 default: "",
517 documentation: None,
518 value_type: "ValueType::Integer",
519 schema_default: None,
520 env_vars: &[],
521 env_var_override: None,
522 additional_yaml_paths: &[],
523 used_by: &["TYPED_CONFIG_SYSTEM"],
524 test_json: None,
525 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
526 filename: "otlp.rs",
527 },
528 SalukiKey {
529 yaml_path: "otlp_cached_tagsets_limit",
530 description: "Max cached OTLP tagsets",
531 default: "",
532 documentation: None,
533 value_type: "ValueType::Integer",
534 schema_default: None,
535 env_vars: &[],
536 env_var_override: None,
537 additional_yaml_paths: &[],
538 used_by: &["TYPED_CONFIG_SYSTEM"],
539 test_json: None,
540 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
541 filename: "otlp.rs",
542 },
543 SalukiKey {
544 yaml_path: "otlp_string_interner_size",
545 description: "OTLP context interner capacity",
546 default: "",
547 documentation: None,
548 value_type: "ValueType::Integer",
549 schema_default: None,
550 env_vars: &[],
551 env_var_override: None,
552 additional_yaml_paths: &[],
553 used_by: &["TYPED_CONFIG_SYSTEM"],
554 test_json: None,
555 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
556 filename: "otlp.rs",
557 },
558 SalukiKey {
560 yaml_path: "aggregate_window_duration_seconds",
561 description: "Aggregation window size",
562 default: "",
563 documentation: None,
564 value_type: "ValueType::Integer",
565 schema_default: None,
566 env_vars: &[],
567 env_var_override: None,
568 additional_yaml_paths: &[],
569 used_by: &["TYPED_CONFIG_SYSTEM"],
570 test_json: None,
571 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD, Pipeline::Checks])",
572 filename: "aggregate.rs",
573 },
574 SalukiKey {
575 yaml_path: "aggregate_flush_interval",
576 description: "Aggregator flush period",
577 default: "",
578 documentation: None,
579 value_type: "ValueType::String",
580 schema_default: None,
581 env_vars: &[],
582 env_var_override: None,
583 additional_yaml_paths: &[],
584 used_by: &["TYPED_CONFIG_SYSTEM"],
585 test_json: Some(r#"{"secs": 42, "nanos": 0}"#),
586 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD, Pipeline::Checks])",
587 filename: "aggregate.rs",
588 },
589 SalukiKey {
590 yaml_path: "aggregate_context_limit",
591 description: "Max contexts per aggregation window",
592 default: "",
593 documentation: None,
594 value_type: "ValueType::Integer",
595 schema_default: None,
596 env_vars: &[],
597 env_var_override: None,
598 additional_yaml_paths: &[],
599 used_by: &["TYPED_CONFIG_SYSTEM"],
600 test_json: None,
601 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD, Pipeline::Checks])",
602 filename: "aggregate.rs",
603 },
604 SalukiKey {
605 yaml_path: "aggregate_passthrough_idle_flush_timeout",
606 description: "Passthrough buffer flush delay",
607 default: "",
608 documentation: None,
609 value_type: "ValueType::String",
610 schema_default: None,
611 env_vars: &[],
612 env_var_override: None,
613 additional_yaml_paths: &[],
614 used_by: &["TYPED_CONFIG_SYSTEM"],
615 test_json: Some(r#"{"secs": 42, "nanos": 0}"#),
616 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD, Pipeline::Checks])",
617 filename: "aggregate.rs",
618 },
619 SalukiKey {
621 yaml_path: "apm_config.obfuscation.sql.dbms",
622 description: "SQL obfuscation DBMS dialect",
623 default: "",
624 documentation: None,
625 value_type: "ValueType::String",
626 schema_default: None,
627 env_vars: &[],
628 env_var_override: None,
629 additional_yaml_paths: &[],
630 used_by: &["TYPED_CONFIG_SYSTEM"],
631 test_json: None,
632 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
633 filename: "trace_obfuscation.rs",
634 },
635 SalukiKey {
636 yaml_path: "apm_config.obfuscation.sql.dollar_quoted_func",
637 description: "Preserve dollar-quoted SQL functions",
638 default: "",
639 documentation: None,
640 value_type: "ValueType::Bool",
641 schema_default: None,
642 env_vars: &[],
643 env_var_override: None,
644 additional_yaml_paths: &[],
645 used_by: &["TYPED_CONFIG_SYSTEM"],
646 test_json: None,
647 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
648 filename: "trace_obfuscation.rs",
649 },
650 SalukiKey {
651 yaml_path: "apm_config.obfuscation.sql.keep_sql_alias",
652 description: "Preserve SQL aliases in obfuscation",
653 default: "",
654 documentation: None,
655 value_type: "ValueType::Bool",
656 schema_default: None,
657 env_vars: &[],
658 env_var_override: None,
659 additional_yaml_paths: &[],
660 used_by: &["TYPED_CONFIG_SYSTEM"],
661 test_json: None,
662 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
663 filename: "trace_obfuscation.rs",
664 },
665 SalukiKey {
666 yaml_path: "apm_config.obfuscation.sql.replace_digits",
667 description: "Replace digits in SQL obfuscation",
668 default: "",
669 documentation: None,
670 value_type: "ValueType::Bool",
671 schema_default: None,
672 env_vars: &[],
673 env_var_override: None,
674 additional_yaml_paths: &[],
675 used_by: &["TYPED_CONFIG_SYSTEM"],
676 test_json: None,
677 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
678 filename: "trace_obfuscation.rs",
679 },
680 SalukiKey {
681 yaml_path: "apm_config.obfuscation.sql.table_names",
682 description: "Collect table names during obfuscation",
683 default: "",
684 documentation: None,
685 value_type: "ValueType::Bool",
686 schema_default: None,
687 env_vars: &[],
688 env_var_override: None,
689 additional_yaml_paths: &[],
690 used_by: &["TYPED_CONFIG_SYSTEM"],
691 test_json: None,
692 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
693 filename: "trace_obfuscation.rs",
694 },
695 SalukiKey {
697 yaml_path: "flush_timeout_secs",
698 description: "Encoder flush timeout (secs)",
699 default: "",
700 documentation: None,
701 value_type: "ValueType::Integer",
702 schema_default: None,
703 env_vars: &[],
704 env_var_override: None,
705 additional_yaml_paths: &[],
706 used_by: &["TYPED_CONFIG_SYSTEM"],
707 test_json: None,
708 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Checks, Pipeline::Traces, Pipeline::DogStatsD])",
709 filename: "encoders.rs",
710 },
711 SalukiKey {
712 yaml_path: "serializer_max_metrics_per_payload",
713 description: "Max metrics per payload",
714 default: "",
715 documentation: None,
716 value_type: "ValueType::Integer",
717 schema_default: None,
718 env_vars: &[],
719 env_var_override: None,
720 additional_yaml_paths: &[],
721 used_by: &["TYPED_CONFIG_SYSTEM"],
722 test_json: None,
723 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Checks, Pipeline::DogStatsD])",
724 filename: "encoders.rs",
725 },
726 SalukiKey {
728 yaml_path: "dogstatsd_mapper_string_interner_size",
729 description: "Mapper string interner byte capacity",
730 default: "64KiB",
731 documentation: Some(
732 "Controls the pre-allocated byte capacity for interning mapped metric names and tags. The default is \
733 `64KiB`. Set this to a nonzero byte count; you can use a bare number of bytes or a human-readable \
734 byte-size string such as `64KiB`. Larger values increase memory usage.",
735 ),
736 value_type: "ValueType::Integer",
737 schema_default: None,
738 env_vars: &[],
739 env_var_override: None,
740 additional_yaml_paths: &[],
741 used_by: &["TYPED_CONFIG_SYSTEM"],
742 test_json: None,
743 pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
744 filename: "dogstatsd_mapper.rs",
745 },
746 SalukiKey {
748 yaml_path: "memory_limit",
749 description: "Process memory limit",
750 default: "",
751 documentation: Some(
752 "### `memory_limit` / `memory_slop_factor`
753
754\
755 ADP uses an explicit process memory limit (`memory_limit`) rather than relying on \
756 Go's garbage collector. The `memory_slop_factor` reserves a fraction of the limit \
757 to account for allocations not tracked by ADP's internal accounting. When memory \
758 usage approaches `memory_limit`, ADP's global limiter begins exerting backpressure \
759 (see `enable_global_limiter`).",
760 ),
761 value_type: "ValueType::String",
762 schema_default: None,
763 env_vars: &[],
764 env_var_override: None,
765 additional_yaml_paths: &[],
766 used_by: &["TYPED_CONFIG_SYSTEM"],
767 test_json: None,
768 pipeline_affinity: "PipelineAffinity::CrossCutting",
769 filename: "accounting.rs",
770 },
771 SalukiKey {
772 yaml_path: "memory_slop_factor",
773 description: "Memory accounting slop fraction",
774 default: "0.25",
775 documentation: Some("See `memory_limit` above."),
776 value_type: "ValueType::Float",
777 schema_default: Some("0.25"),
778 env_vars: &[],
779 env_var_override: None,
780 additional_yaml_paths: &[],
781 used_by: &["TYPED_CONFIG_SYSTEM"],
782 test_json: None,
783 pipeline_affinity: "PipelineAffinity::CrossCutting",
784 filename: "accounting.rs",
785 },
786 SalukiKey {
787 yaml_path: "enable_global_limiter",
788 description: "Global memory limiter toggle",
789 default: "true",
790 documentation: Some(
791 "Controls whether the global memory limiter exerts backpressure as memory usage \
792 approaches `memory_limit`. The default is `true`. When set to `false`, the limiter \
793 becomes a no-op and only the memory bounds of the running components influence \
794 memory usage.",
795 ),
796 value_type: "ValueType::Bool",
797 schema_default: Some("true"),
798 env_vars: &[],
799 env_var_override: None,
800 additional_yaml_paths: &[],
801 used_by: &["TYPED_CONFIG_SYSTEM"],
802 test_json: None,
803 pipeline_affinity: "PipelineAffinity::CrossCutting",
804 filename: "accounting.rs",
805 },
806 SalukiKey {
807 yaml_path: "memory_mode",
808 description: "Memory bounds validation mode",
809 default: "disabled",
810 documentation: Some(
811 "Controls how the calculated memory bounds are reconciled against `memory_limit`. The \
812 default is `disabled`. Accepted values: `disabled` skips bounds validation and applies \
813 no memory limiting; `permissive` logs a warning when the bounds do not fit within the \
814 limit and starts anyway; `strict` refuses to start. Under `permissive` and `strict`, \
815 the global memory limiter is active only when a limit is in effect (configured or \
816 detected from cgroups) and `enable_global_limiter` is `true`.",
817 ),
818 value_type: "ValueType::String",
819 schema_default: Some("disabled"),
820 env_vars: &[],
821 env_var_override: None,
822 additional_yaml_paths: &[],
823 used_by: &["TYPED_CONFIG_SYSTEM"],
824 test_json: None,
825 pipeline_affinity: "PipelineAffinity::CrossCutting",
826 filename: "accounting.rs",
827 },
828];