From 13b21b09f264e47db0fb44d5efd55cf9873e294d Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Thu, 22 Jan 2026 17:59:28 -0800 Subject: [PATCH] Fix Alloy logfmt decode errors for JSON logs Use stage.match to conditionally apply logfmt parsing only to lines that don't start with '{'. This prevents error spam when JSON-formatted logs are passed to the logfmt parser. Co-Authored-By: Claude Opus 4.5 --- argocd/manifests/alloy-k8s/configmap.yaml | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/argocd/manifests/alloy-k8s/configmap.yaml b/argocd/manifests/alloy-k8s/configmap.yaml index 92c8ab9..f7230af 100644 --- a/argocd/manifests/alloy-k8s/configmap.yaml +++ b/argocd/manifests/alloy-k8s/configmap.yaml @@ -102,18 +102,22 @@ data: } } - // Try to parse logfmt logs (e.g., Loki, Prometheus, Go services) - // Silently skip lines that aren't valid logfmt - stage.logfmt { - mapping = { - level = "level", - ts = "ts", - caller = "caller", - component = "component", + // Try to parse logfmt logs, but only for non-JSON lines + // This prevents noisy decode errors when JSON logs hit the logfmt parser + stage.match { + selector = "{namespace=~\".+\"} |~ \"^[^{]\"" // Lines not starting with '{' + + stage.logfmt { + mapping = { + level = "level", + ts = "ts", + caller = "caller", + component = "component", + } } } - // Drop the logfmt error label if parsing failed (prevents noisy errors) + // Drop any error labels from parsing attempts (both JSON and logfmt) stage.label_drop { values = ["__error__", "__error_details__"] }