From 27430919015e1b86df33b14a92d1caafe81cfb2e Mon Sep 17 00:00:00 2001 From: Raphael Taylor-Davies Date: Wed, 4 Jun 2025 13:05:24 +0100 Subject: [PATCH 1/3] fix(aws_ecs_metrics): skip over empty ECS metrics payloads --- src/sources/aws_ecs_metrics/parser.rs | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/sources/aws_ecs_metrics/parser.rs b/src/sources/aws_ecs_metrics/parser.rs index f4a066d0b712e..e37decf894bd6 100644 --- a/src/sources/aws_ecs_metrics/parser.rs +++ b/src/sources/aws_ecs_metrics/parser.rs @@ -507,14 +507,27 @@ fn network_metrics( .collect() } +#[derive(Deserialize)] +#[serde(untagged, deny_unknown_fields)] +enum StatsPayload { + Container(ContainerStats), + Empty {}, + Null, +} + pub(super) fn parse( bytes: &[u8], namespace: Option, ) -> Result, serde_json::Error> { let mut metrics = Vec::new(); - let parsed = serde_json::from_slice::>(bytes)?; + let parsed = serde_json::from_slice::>(bytes)?; + + for (id, payload) in parsed { + let container = match payload { + StatsPayload::Container(container) => container, + _ => continue, + }; - for (id, container) in parsed { let mut tags = MetricTags::default(); tags.replace("container_id".into(), id); if let Some(name) = container.name { @@ -608,7 +621,9 @@ mod test { "io_time_recursive": [], "sectors_recursive": [] } - } + }, + "123456789": {}, + "123456789": null }"#; assert_event_data_eq!( @@ -672,7 +687,9 @@ mod test { "throttled_time": 0 } } - } + }, + "2344": {}, + "test": null }"#; assert_event_data_eq!( From 3762a44d35a29ccfc0c4a5469cf1c7b12fed286f Mon Sep 17 00:00:00 2001 From: Raphael Taylor-Davies Date: Wed, 11 Jun 2025 16:17:31 +0100 Subject: [PATCH 2/3] chore: add changelog entry --- changelog.d/skip_empty_ecs_metrics.fix.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 changelog.d/skip_empty_ecs_metrics.fix.md diff --git a/changelog.d/skip_empty_ecs_metrics.fix.md b/changelog.d/skip_empty_ecs_metrics.fix.md new file mode 100644 index 0000000000000..6c15745697881 --- /dev/null +++ b/changelog.d/skip_empty_ecs_metrics.fix.md @@ -0,0 +1,3 @@ +Skip over empty ECS metrics payloads. + +authors: tustvold From 189d00704a9dade3b8ab65ffd28047b9f85b397d Mon Sep 17 00:00:00 2001 From: Pavlos Rontidis Date: Thu, 12 Jun 2025 14:08:19 -0400 Subject: [PATCH 3/3] Update changelog.d/skip_empty_ecs_metrics.fix.md --- changelog.d/skip_empty_ecs_metrics.fix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog.d/skip_empty_ecs_metrics.fix.md b/changelog.d/skip_empty_ecs_metrics.fix.md index 6c15745697881..9aae13a99a650 100644 --- a/changelog.d/skip_empty_ecs_metrics.fix.md +++ b/changelog.d/skip_empty_ecs_metrics.fix.md @@ -1,3 +1,3 @@ -Skip over empty ECS metrics payloads. +The `aws_ecs_metrics` source now skips over empty ECS metrics payloads. It previously failed to parse such payloads. authors: tustvold