Skip to content

Commit 57f63c9

Browse files
committed
enhancement(o11y): emit tag_filterlist_updates_total counter from TagFilterlist transform (#1818)
Adds a `tag_filterlist_updates_total` counter to the `TagFilterlist` transform so ADP reports how many times the `metric_tag_filterlist` configuration has been updated via Remote Config. The counter increments only on RC-triggered updates (not at build time), matching the behavior of `datadog.agent.tag_filterlist.updates` in the Core Agent. ADP surfaces this as `datadog.agent.tag_filterlist.updates` via the RAR remapper. - [ ] `cargo test -p agent-data-plane tag_filterlist` — new `telemetry_records_updates` test plus all existing tests pass - [ ] `cargo test -p agent-data-plane` — remapping output test and help text test pass 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: jesse.szwedko <jesse.szwedko@datadoghq.com>
1 parent d799092 commit 57f63c9

4 files changed

Lines changed: 43 additions & 13 deletions

File tree

bin/agent-data-plane/src/components/tag_filterlist/mod.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ impl Transform for TagFilterlist {
278278
self.filters = compile_filters(new_entries.as_deref().unwrap_or(&[]));
279279
self.context_cache = build_context_cache();
280280
self.telemetry.set_size(self.filters.len());
281+
self.telemetry.increment_updates();
281282
debug!(rules_loaded = self.filters.len(), "Updated metric tag filterlist.");
282283
},
283284
}
@@ -830,6 +831,23 @@ mod tests {
830831
assert_eq!(recorder.gauge("tag_filterlist_size"), Some(0.0));
831832
}
832833

834+
#[test]
835+
fn telemetry_records_updates() {
836+
let recorder = TestRecorder::default();
837+
let _local = metrics::set_default_local_recorder(&recorder);
838+
839+
let builder = MetricsBuilder::default();
840+
let telemetry = Telemetry::new(&builder);
841+
842+
assert_eq!(recorder.counter("tag_filterlist_updates_total"), Some(0));
843+
844+
telemetry.increment_updates();
845+
assert_eq!(recorder.counter("tag_filterlist_updates_total"), Some(1));
846+
847+
telemetry.increment_updates();
848+
assert_eq!(recorder.counter("tag_filterlist_updates_total"), Some(2));
849+
}
850+
833851
#[tokio::test]
834852
async fn dynamic_update_partial_replaces_filter() {
835853
let (cfg, sender) = ConfigurationLoader::for_tests(Some(serde_json::json!({})), None, true).await;

bin/agent-data-plane/src/components/tag_filterlist/telemetry.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ pub struct Telemetry {
1111
metrics_modified: Counter,
1212
tags_filtered: Counter,
1313
size: Gauge,
14+
updates: Counter,
1415
}
1516

1617
impl Telemetry {
@@ -22,6 +23,7 @@ impl Telemetry {
2223
metrics_modified: builder.register_debug_counter("tag_filterlist_metrics_modified_total"),
2324
tags_filtered: builder.register_debug_counter("tag_filterlist_tags_filtered_total"),
2425
size: builder.register_gauge("tag_filterlist_size"),
26+
updates: builder.register_counter("tag_filterlist_updates_total"),
2527
}
2628
}
2729

@@ -45,4 +47,8 @@ impl Telemetry {
4547
pub fn set_size(&self, count: usize) {
4648
self.size.set(count as f64);
4749
}
50+
51+
pub fn increment_updates(&self) {
52+
self.updates.increment(1);
53+
}
4854
}

bin/agent-data-plane/src/state/metrics/mod.rs

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -362,16 +362,11 @@ fn get_help_text(metric_name: &str) -> Option<&'static str> {
362362
"aggregator.dogstatsd_contexts" => Some("Count the number of dogstatsd contexts in the aggregator"),
363363
"aggregator.processed" => Some("Amount of metrics/services_checks/events processed by the aggregator"),
364364
"filterlist.size" => Some("Metric filter list size"),
365-
"filterlist.updates" => {
366-
Some("Incremented when a reconfiguration of the metric filterlist happened")
367-
}
365+
"filterlist.updates" => Some("Incremented when a reconfiguration of the metric filterlist happened"),
368366
"dogstatsd.listener_filtered_points" => Some("How many points were filtered out"),
369-
"aggregator.dogstatsd_filtered_metrics" => {
370-
Some("How many metrics were filtered in the time samplers")
371-
}
372-
"tag_filterlist.size" => {
373-
Some("Tag filter list size")
374-
},
367+
"aggregator.dogstatsd_filtered_metrics" => Some("How many metrics were filtered in the time samplers"),
368+
"tag_filterlist.size" => Some("Tag filter list size"),
369+
"tag_filterlist.updates" => Some("Incremented when a reconfiguration of the tag filterlist happened"),
375370
"dogstatsd.processed" => Some("Count of service checks/events/metrics processed by dogstatsd"),
376371
"dogstatsd.packet_pool_get" => Some("Count of get done in the packet pool"),
377372
"dogstatsd.packet_pool_put" => Some("Count of put done in the packet pool"),
@@ -824,6 +819,10 @@ mod tests {
824819
Context::from_static_parts("adp.tag_filterlist_size", &["component_id:dsd_tag_filterlist"]),
825820
9.0,
826821
)),
822+
Event::Metric(Metric::counter(
823+
Context::from_static_parts("adp.tag_filterlist_updates_total", &["component_id:dsd_tag_filterlist"]),
824+
11.0,
825+
)),
827826
];
828827

829828
for metric in metrics {
@@ -839,6 +838,7 @@ mod tests {
839838
assert!(output.contains("dogstatsd__listener_filtered_points 5"));
840839
assert!(output.contains("aggregator__dogstatsd_filtered_metrics 7"));
841840
assert!(output.contains("tag_filterlist__size 9"));
841+
assert!(output.contains("tag_filterlist__updates 11"));
842842
assert!(!output.contains("datadog__agent__filterlist__size"));
843843
assert!(!output.contains("datadog__agent__filterlist__updates"));
844844
assert!(!output.contains("datadog__agent__dogstatsd__listener_filtered_points"));
@@ -877,10 +877,7 @@ mod tests {
877877
get_help_text("aggregator.processed"),
878878
Some("Amount of metrics/services_checks/events processed by the aggregator")
879879
);
880-
assert_eq!(
881-
get_help_text("filterlist.size"),
882-
Some("Metric filter list size")
883-
);
880+
assert_eq!(get_help_text("filterlist.size"), Some("Metric filter list size"));
884881
assert_eq!(
885882
get_help_text("filterlist.updates"),
886883
Some("Incremented when a reconfiguration of the metric filterlist happened")
@@ -894,5 +891,9 @@ mod tests {
894891
Some("How many metrics were filtered in the time samplers")
895892
);
896893
assert_eq!(get_help_text("tag_filterlist.size"), Some("Tag filter list size"));
894+
assert_eq!(
895+
get_help_text("tag_filterlist.updates"),
896+
Some("Incremented when a reconfiguration of the tag filterlist happened")
897+
);
897898
}
898899
}

bin/agent-data-plane/src/state/metrics/rules/dogstatsd.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ pub fn get_dogstatsd_remappings() -> Vec<RemapperRule> {
2828
&["component_id:dsd_tag_filterlist"],
2929
"tag_filterlist.size",
3030
),
31+
RemapperRule::by_name_and_tags(
32+
"adp.tag_filterlist_updates_total",
33+
&["component_id:dsd_tag_filterlist"],
34+
"tag_filterlist.updates",
35+
),
3136
RemapperRule::by_name_and_tags(
3237
"adp.object_pool_acquired",
3338
&["pool_name:dsd_packet_bufs"],

0 commit comments

Comments
 (0)