contribution/compass
grafana/loki

Loki

73 signals · 78 observation events

Open repository ↗

Like Prometheus, but for logs.

28.7K stars4.1K forksGoAGPL-3.0cloudnativegrafanahacktoberfestlogginglokiprometheuskeyword: Grafana Loki
PROJECT NEWS

Release, roadmap, and discussion

All news →
grafana/loki

Loki

Observability & Reliability
Latest stable

v3.7.6

v3.7.6
  • 3.7.6 (2026-08-05)
  • Bug Fixes
  • queryrange: Preserve sketch in MergeLabels [release-3.7.x] (#23770) (d48329d)
Original release notes ↗

Publicly indicated next

  • No public prerelease or open milestone found.

Prereleases and milestones indicate public plans; they are not delivery commitments.

Observation trail

  1. discoveredinitial snapshot
  2. discoveredinitial snapshot
  3. changedupdatedAt, metrics
  4. discoveredinitial snapshot
  5. discoveredinitial snapshot
  6. discoveredinitial snapshot
  7. changedtitle, text, updatedAt
  8. changedtext, updatedAt
  9. changedupdatedAt
  10. discoveredinitial snapshot
  11. changedupdatedAt, labels, state
  12. discoveredinitial snapshot
  13. changedupdatedAt
  14. discoveredinitial snapshot
  15. changedinitial snapshot
  16. changedinitial snapshot
  17. changedinitial snapshot
  18. changedinitial snapshot
  19. changedinitial snapshot
  20. changedinitial snapshot
  21. changedinitial snapshot
  22. changedinitial snapshot
  23. changedinitial snapshot
  24. changedinitial snapshot
  25. changedinitial snapshot
  26. changedinitial snapshot
  27. changedinitial snapshot
  28. changedinitial snapshot
  29. changedinitial snapshot
  30. changedinitial snapshot
23 shown
pull request

test(logql): Expand logqltest label filter coverage and correct the docs

**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

importance 0@pracucciopentype/docsOriginal evidence ↗
pull request

test(logql): Run logqltest scripts through query-frontend and query-scheduler

**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

importance 0@pracucciopenOriginal evidence ↗
pull request

chore(deps): Update module github.com/oschwald/maxminddb-golang/v2 to v2.5.0 (main) - autoclosed

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [github.com/oschwald/maxminddb-golang/v2](https://redirect.github.com/oschwald/maxminddb-golang) | `v2.4.1` → `v2.5.0` | ![age](https://developer.mend.io/api/mc

importance 0@renovate-sh-app[bot]closeddependenciesupdate-minorOriginal evidence ↗
pull request

fix(deps): Update module github.com/oschwald/geoip2-golang/v2 to v2.3.0 (main)

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [github.com/oschwald/geoip2-golang/v2](https://redirect.github.com/oschwald/geoip2-golang) | `v2.2.0` → `v2.3.0` | ![age](https://developer.mend.io/api/mc/badge

importance 0@renovate-sh-app[bot]closeddependenciesupdate-minorOriginal evidence ↗
pull request

chore: Always close decbufs and do it the less verbose way

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

importance 0@DanHopperGrafanaopenOriginal evidence ↗
pull request

docs: Configuration best practices had "Simple Storage Storage" mistake

**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

importance 0@kleinarneclosedtype/docsOriginal evidence ↗
pull request

fix: Add meaningful chunk fetch loss metrics

**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

importance 0@shantanualsiopenOriginal evidence ↗
pull request

chore(loki): Fix flaky test

**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.

importance 0@ivkalitaclosedOriginal evidence ↗
pull request

chore: Fix flaky test TestTCPErrs

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

importance 0@DanHopperGrafanaclosedOriginal evidence ↗
pull request

docs: Update Helm Charts docs 🤖🤖🤖 [release-3.7.x]

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

importance 0@loki-gh-app[bot]closedbackporttype/docsOriginal evidence ↗
pull request

chore(deps): Update module github.com/knadh/koanf/maps to v0.1.3 (main)

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [github.com/knadh/koanf/maps](https://redirect.github.com/knadh/koanf) | `v0.1.2` → `v0.1.3` | ![age](https://developer.mend.io/api/mc/badges/age/go/github.com%

importance 0@renovate-sh-app[bot]opendependenciesupdate-patchOriginal evidence ↗
pull request

fix(deps): Update module github.com/parquet-go/parquet-go to v0.31.0 (main)

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [github.com/parquet-go/parquet-go](https://redirect.github.com/parquet-go/parquet-go) | `v0.30.1` → `v0.31.0` | ![age](https://developer.mend.io/api/mc/badges/a

importance 0@renovate-sh-app[bot]closeddependenciesupdate-minorOriginal evidence ↗
pull request

docs: Add Apache APISIX to third-party clients 🤖🤖🤖

**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

importance 0@Yilialinnclosedtype/docsOriginal evidence ↗
pull request

refactor(logql): One extractor per sample expression

**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)`

importance 0@pracucciclosedOriginal evidence ↗
pull request

refactor(compression): Export Codecs() and de-duplicate test codec lists

**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)

importance 0@jnewbiginopenOriginal evidence ↗
pull request

refactor(logql): One sample per log line

**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 `(

importance 0@pracucciclosedOriginal evidence ↗
pull request

chore: Rename variables to include reader

**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

importance 0@grobinson-grafanaclosedOriginal evidence ↗
pull request

fix(deps): Update github.com/thanos-io/objstore digest to 9ad2de9 (main)

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. --- #

importance 0@renovate-sh-app[bot]closeddependenciesOriginal evidence ↗
pull request

fix(logql): Fix ip() line filter matching inside "or" chains

**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

importance 0@pracucciopenOriginal evidence ↗
pull request

fix(deps): Update module google.golang.org/protobuf to v1.36.12 (main)

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [google.golang.org/protobuf](https://go.googlesource.com/protobuf) | `v1.36.12-0.20260120151049-f2248ac996af` → `v1.36.12` | ![age](https://developer.mend.io/ap

importance 0@renovate-sh-app[bot]closeddependenciesupdate-patchOriginal evidence ↗
pull request

fix(logql): Avoid data race in sharded avg_over_time grouping

**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

importance 0@pracucciopenOriginal evidence ↗
pull request

fix(chunkenc): Stop counting filtered-out lines in post_filter_lines

**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

importance 0@pracucciopenOriginal evidence ↗
pull request

perf: Lazy instantiation of drains for pattern ingesters

**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

importance 0@paul1ropenOriginal evidence ↗