Fix Alloy logfmt decode errors for JSON logs (#46)

## Summary
- Use `stage.match` to conditionally apply logfmt parsing only to lines that don't start with `{`
- This prevents error spam like `"failed to decode logfmt" component_path=/ component_id=loki.process.pods component=stage type=logfmt err="logfmt syntax error at pos 2 on line 1: unexpected '\"'"` when JSON-formatted logs hit the logfmt parser

## Deployment and Testing
- [ ] Sync alloy-k8s app to feature branch and verify errors stop appearing
- [ ] Verify JSON logs are still parsed correctly
- [ ] Verify logfmt logs (from Loki, Prometheus etc.) are still parsed correctly

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Reviewed-on: https://forge.tail8d86e.ts.net/eblume/blumeops/pulls/46
This commit is contained in:
Erich Blume 2026-01-22 18:00:34 -08:00
commit e6de7ba391

View file

@ -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__"]
}