**What this PR does / why we need it**: The existing `label_filters.logqltest` scenarios covered the happy path of each label filter kind, but stopped short of the operators, value forms and error paths where the behaviour is least obvious. Filling those gaps turned up three statements in the docs that the engine contradicts, so this corrects them and pins e
**What this PR does / why we need it**: Runs every `.logqltest` correctness script through three execution stacks and compares the results: - `direct` — the v1 engine over the chunk store - `query-frontend + query-scheduler (no sharding)` - `query-frontend + query-scheduler (sharding)` All three run end-to-end over real gRPC, so query sharding and the fronte
Addresses some PR feedback: - https://github.com/grafana/loki/pull/23663#discussion_r3765416195 - https://github.com/grafana/loki/pull/23730#discussion_r3765503011 - https://github.com/grafana/loki/pull/23730#discussion_r3765472943 **What this PR does / why we need it**: Just a little clean-up and avoiding leaking resources in some error cases. **Which issue
**What this PR does / why we need it**: fix a minor mistake in the configuration best practices doc (S3 was described as "Simple Storage Storage", should be "Simple Storage Service" **Which issue(s) this PR fixes**: Fixes no issues **Special notes for your reviewer**: **Checklist** - [x] Reviewed the [`CONTRIBUTING.md`](https://github.com/grafana/loki/blob/m
**What this PR does / why we need it**: `Fetcher.FetchChunks` logs an object store error and then returns a nil error. The query gets fewer log lines, HTTP 200, and no signal. We do not measure how often this occurs yet. This PR adds `loki_chunk_fetcher_failures_total{source,reason}`. It counts each lost chunk and the reason for the loss. This PR yet doesn't
**What this PR does / why we need it**: TestTCPErrs was failing from time to time because its outcome depends on what timeout happens first. I remove the dependency on time from the test.
This test was failing occasionally in CI due to racing wall-clock timers. In this PR I propose that we stop mocking out an http server and instead mock out the http transport to return the error that would've been returned by the error case. We could also have tweaked the numbers to make it less likely for timers to trigger in the wrong order - I'd be happy
Backport ee9a1b8f26e19e7224b167190aec93e1b0f69ef9 from #23899 <sup>[job run](https://github.com/grafana/loki/actions/runs/31630100757)</sup> --- **What this PR does / why we need it**: Updates the Loki Helm charts to keep pace with updates in the Grafana-community repo. Regenerates the Helm Reference file. Replaces relative links with full URLs. **Special no
**What this PR does / why we need it**: Adds Apache APISIX `loki-logger` to the third-party clients list. The existing APISIX plugin sends batched request and response logs to Loki through the Loki HTTP push API, and the link points to the official APISIX plugin documentation. **Which issue(s) this PR fixes**: None. **Special notes for your reviewer**: This
**What this PR does / why we need it**: First simplification step after the `variants()` removal (#23823, #23889, #23905). A sample expression has produced exactly one extractor since the consolidated variants extractor landed in #17149, so the plumbing that carried several was already unreachable code. - `SampleExpr.Extractors() ([]SampleExtractor, error)`
**What this PR does / why we need it**: Follow-up to #23721. During review, `@pracucci` pointed out that the new `testCodecs` list in `cmd/chunks-inspect/loki_test.go` duplicates `compression`'s internal, unexported `supportedCodecs` list. This PR adds `compression.Codecs()` (a clone of `supportedCodecs`, so callers can't mutate the package's internal state)
**What this PR does / why we need it**: Last step of the `variants()` removal (#23823, #23889, #23905, #23935). `variants()` was the only thing that ever derived more than one sample from a single log line, so the plumbing that carried several is now dead weight. - `StreamSampleExtractor.Process`/`ProcessString` return `(ExtractedSample, bool)` instead of `(
**What this PR does / why we need it**: Opened in a follow up PR so I can merge the original and start running it. **Which issue(s) this PR fixes**: Fixes #<issue number> **Special notes for your reviewer**: **Checklist** - [x] Reviewed the [`CONTRIBUTING.md`](https://github.com/grafana/loki/blob/main/CONTRIBUTING.md) guide (**required**) - [x] Documentation
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [github.com/thanos-io/objstore](https://redirect.github.com/thanos-io/objstore) | require | digest | `fb6fd3a` → `9ad2de9` | --- > [!WARNING] > Some dependencies could not be looked up. Check the [Dependency Dashboard](../issues/23439) for more information. --- #
**What this PR does / why we need it**: `ip()` line filters combined with `or` (e.g. `|= ip(a) or ip(b)`) silently degraded to a literal substring/regex match on the raw pattern text instead of matching real addresses, because the `or` chain compiler ignored each filter node's `Op` field. Example: `{app="foo"} |= ip("10.0.0.0/8") or ip("192.168.0.0/16")` nev
**What this PR does / why we need it**: Sharded `avg_over_time(...) by (...)` decomposes into `sum_over_time() / count_over_time()`, and the two legs are evaluated concurrently. Both `newVectorAggEvaluator` and `RangeAggregationExpr.extractor` sorted `Grouping.Groups` in place, and the two legs can share the same backing array, so `go test -race` flags a dat
**What this PR does / why we need it**: `post_filter_lines` reports how many lines matched a query's filters — that is how it is documented at `docs/sources/operations/meta-monitoring/_index.md:96`. Two of the three sample paths incremented it *before* asking the extractor, so a filtered metric query reported every line it read and looked as though its filte
**What this PR does / why we need it**: Lazily create per-`detected_level` Drain trees in the pattern ingester instead of always allocating all 8 at stream creation. Most streams only see 1–3 levels; unused trees previously paid idle RSS (root node, LRU, tokenizer) for every owned stream. Unknown/custom levels still fall back to the unknown Drain; observing