Features and enhancements
- Added a balanced query planner (#5501).
- Added symbol-ref tree support across the read path: a new
symbolrefmodel package, production and aggregation in symdb and the query backend, and resolution in the frontend after the final merge (#5321, #5322, #5334). - Made experimental asynchronous queries resumable (#5442).
- Allowed compaction to read block metadata from object storage, adding the
metadata_sourceandmetadata_fetch_timeoutoptions (#5427). - Improved debuginfod client resilience and observability in the symbolizer, adding the
resolve_timeoutoption (#5449). - Added SDK scope usage tracking to the distributor (#5366).
- Added
replay dumpandreplay pushcommands toprofilecli(#5374). - Improved read-path performance by optimizing the index symbol cache layout and aligning the symdb sample appender (#5534, #5535).
- Improved metastore and compaction performance by scanning block bounds before decoding and avoiding deep label clones when building block indexes (#5407, #5398).
- Reduced allocations in timeseries build and merge (#5311).
Bug fixes
- Stopped a single bad DLQ object from blocking metastore recovery (#5371).
- Disabled raft pipeline replication in the metastore (#5518).
- Fixed a double prefix on metastore index cache and DLQ metrics (#5543).
- Allowed the segment writer shard shuffle table to grow past 4096 entries (#5519).
- Served profile-type Series queries from metadata when the selector is empty (#5483).
- Used
raft_log.CompactionJobStatusUpdateinstead ofmetastorev1.CompactionJobStatusUpdatein compaction (#5465). - Keyed adaptive placement distribution stats by tenant and dataset (#5450).
- Collapsed stripped profiles to a single sample in the distributor (#5409).
- Treated a JFR profile size limit of 0 as unlimited (#5502).
- Excluded the pre-window boundary point from
profilecliquery top totals (#5359). - Pointed v2 dashboard event annotations at the Alloy events stream (#5499).
- Fixed the missing namespace in Helm discovery RBAC objects (#5447).
Security updates
- Updated Go to 1.25.13 (#5520).
- Updated
go.etcd.io/etcd/client/pkg/v3to v3.6.14 (#5526). - Updated
golang.org/x/modto v0.40.0 (#5521). - Bumped
nanoidto 3.3.18 in the UI (#5522). - This release also includes every security fix from 2.2.1.
Documentation updates
- Added Node.js to the source code integration docs (#5490).
- Documented Python memory profiling (#5406).
- Clarified contributing build targets and the
ui/distrequirement (#5457).
Changelog
- 8098d40 Update golang version to 1.25.13 (#5520)
- b82524b build: remove go workspace and reduce Renovate to security-only updates (#5397)
- 06f5e9c chore(deps): bump golang.org/x/mod to v0.40.0 (#5521)
- 788a581 chore(deps): lock file maintenance (#5418)
- 37f4757 chore(deps): lock file maintenance (#5452)
- d1ac3de chore(deps): update parquet-go to v0.30.1 (#5426)
- 16264e2 chore(examples): bump OpenTelemetry in dotnet examples (#5488)
- d52797a chore(examples): bump grpc and x/net in go examples (#5486)
- 098b288 chore(examples): bump puma and sinatra in ruby examples (#5487)
- 7a6aadd chore(examples): bump starlette in the fastapi example (#5489)
- 07f92cb chore(examples): pass GITHUB_TOKEN through to the container (#5533)
- 324b133 chore(examples): patch vulnerable node dependencies (#5485)
- a549d25 chore(examples): update examples (#5493)
- 00a46d6 chore(examples): update examples (#5497)
- 7b2be56 chore(examples): update examples (#5516)
- cd724d8 chore(ui): bump nanoid to 3.3.18 in the lockfile (#5522)
- ae04b4a chore: Add more logging to async queries (#5537)
- 82d8680 chore: bump Helm chart to v2.2.0 (#5400)
- 0ea0d16 chore: bump Helm chart to v2.2.1 (#5474)
- ea5d2c7 ci(examples): deploy the images after publishing them (#5500)
- 661ca37 ci(examples): push rideshare images on a schedule (#5494)
- 6cb1bda ci(update-contributors): update contributors commits via GitHub API so they are signed (#5455)
- b720491 docs(contributing): clarify build targets and ui/dist requirement (#5457)
- 7bd0ca7 docs: Add Node.js to source code integration docs (#5490)
- 8e4d977 docs: add v2.1.2 release notes (#5469)
- dfbe475 docs: add v2.2 release notes (#5399)
- 5ecec75 docs: add v2.2.1 release notes (#5468)
- 25098eb docs: document Python memory profiling (#5406)
- 755d7ce docs: updates the list of contributors in README (#5456)
- fa92a88 examples: enable Python memory profiling (#5421)
- 1d8fe07 feat(compaction): optionally read block metadata from object storage (#5427)
- 5f4849c feat(distributor): track SDK scope usage (#5366)
- f69c4e3 feat(experimental): make async queries resumable (#5442)
- 3bcd0b1 feat(frontend): resolve symbol-ref trees after the final merge (#5334)
- b8a5664 feat(model): add symbolref package for symbol-aware tree references (#5321)
- 87daa75 feat(profilecli): add replay dump/push commands (#5374)
- a5e7f2d feat(read-path): produce and aggregate symbol-ref trees (model, symdb, query backend) (#5322)
- 98fb7e1 feat(symbolizer): improve debuginfod client resilience and observability (#5449)
- 6db589a feat: Implement balanced query planner (#5501)
- f217135 fix(adaptiveplacement): key distribution stats by tenant and dataset (#5450)
- ceb071c fix(ci): bump create-github-app-token to v0.3.1 to mask app tokens (#5529)
- 4059c18 fix(compaction): Use
raft_log.CompactionJobStatusUpdateinstead ofmetastorev1.CompactionJobStatusUpdate(#5465) - edc6158 fix(deps): bump brace-expansion in /ui [security] (#5466)
- 26ef03f fix(deps): bump tar, js-yaml, brace-expansion in /ui [security] (#5413)
- d4b3d29 fix(distributor): collapse stripped profiles to a single sample (#5409)
- 9a31eec fix(examples): build the golang rideshare images on distroless (#5540)
- 5056b40 fix(examples): clear the java rideshare CVEs (#5541)
- b2eeaec fix(examples): create the update commit through the API (#5496)
- 8216f4a fix(examples): repair the examples update cron (#5492)
- 07074ce fix(examples): run the nodejs rideshare on a slim base (#5539)
- b4d7407 fix(helm): missing namespace in discovery RBAC objects (#5447)
- d50aa87 fix(jfr): treat a profile size limit of 0 as unlimited (#5502)
- 826f308 fix(metastore): disable raft pipeline replication (#5518)
- 5a850b1 fix(metastore): don't let a single bad DLQ object block recovery (#5371)
- 3fe6a45 fix(metastore): double prefix on index cache and DLQ metrics (#5543)
- c0a71b4 fix(security/critical/): update module github.com/getkin/kin-openapi to v0.144.0 [security] (#5415)
- 2b10d62 fix(security/high/): update module google.golang.org/grpc to v1.82.1 [security] (#5390)
- 867e01e fix(security/high/api): update module google.golang.org/grpc to v1.82.1 [security] (#5391)
- 6e253ea fix(security/unknown/): update module github.com/klauspost/compress to v1.18.7 [security] (#5428)
- 10608ec fix(security/unknown/): update module go.etcd.io/etcd/client/pkg/v3 to v3.6.14 [security] (#5526)
- 2a7113d fix(security/unknown/): update module golang.org/x/net to v0.56.0 [security] (#5378)
- 8507cbc fix(security/unknown/): update module golang.org/x/text to v0.39.0 [security] (#5379)
- bd1ac11 fix(security/unknown/api): update module golang.org/x/net to v0.56.0 [security] (#5380)
- 0885dd8 fix(security/unknown/api): update module golang.org/x/text to v0.39.0 [security] (#5381)
- c87dbfd fix(segmentwriter): allow shard shuffle table to grow past 4096 entries (#5519)
- 8e535ba fix(ui): adapt to prettier 3.9 and eslint-plugin-react-hooks 7.1 (#5438)
- 62677fe fix(v2): serve profile-type Series queries from metadata when the selector is empty (#5483)
- c16819c monitoring: point v2 dashboard event annotations at the Alloy events stream (#5499)
- 7a51652 optimize index symbol cache layout (#5534)
- 99fa40d optimize(symdb): align sample appender (#5535)
- 63cf886 perf(compaction): Avoid deep label clones when building block indexes (#5398)
- bb7a702 perf(metastore): scan block bounds before decoding (#5407)
- bbf0965 perf(timeseries): reduce allocations in series build and merge (#5311)
- 54d0133 profilecli: exclude pre-window boundary point from query top totals (#5359)
- 1465b70 refactor(compaction): isolate retained labels (#5405)
- 290d6ae refactor(distributor): extract profile stripping into sampling package (#5441)
- d6e0710 test(examples): skip profileless compose projects (#5425)
- 5e01207 test(symbolizer): add symbol-ref tree integration tests and docs (#5335)
As always, feedback is more than welcome, feel free to open issues/discussions.
You can reach out to the team using:
Docker Images
docker pull grafana/pyroscope:2.3.0