fix: while validating logql expression, detect and validate expression in label_replace - #18470
Merged
Merged
Conversation
salvacorts
approved these changes
Jul 16, 2025
salvacorts
approved these changes
Jul 16, 2025
sandeepsukhani
enabled auto-merge (squash)
July 16, 2025 09:03
This was referenced Nov 3, 2025
felix0102
pushed a commit
to felix0102/loki
that referenced
this pull request
Aug 2, 2026
…n in label_replace (grafana#18470)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this PR does / why we need it:
There was a panic due to an invalid query, which looked something like this:
sum(label_replace(count_over_time({container="query-frontend"} |= "metrics.go" | logfmt[1m]) or 0, "tenant", "$1", "org_id", "(.*)")) by (tenant)Notice the
or 0in the binary operation, which is invalid and results in setting an error in the initialised BinOpExpr.Now, we validate the parsed logQL query to detect any such errors and return them to the user.
Some expressions have specific validation logic, while for the remaining, we default to calling the
Selectormethod on that expression to see if there is an issue.The thing to note is that we do not have specific validation logic for
label_replace. Which means, when the above expression is being validated, we not only miss running the validation logic for binary operation, but we also end up returning a panic here since BinOpExpr does not implementSelectormethod and relies on embedded SampleExpr, which would be nil when there is invalid binary expression like above.