Releases: honeycombio/refinery
v3.2.1
What's Changed
This release fixes a bug started in v3.0.0 where trace and span IDs were corrupted for clients sending data over OTLP HTTP/JSON.
🐛 Fixes
🛠 Maintenance
- maint(deps): bump the minor-patch group with 8 updates by @dependabot[bot] in #1814
Full Changelog: v3.2.0...v3.2.1
v3.2.0
What's Changed
💡 Enhancements
- feat: add ReceiveKeyIDs config option for key ID-based authorization by @tdarwin in #1803
- feat: add OTelMetrics.AdditionalAttributes config option by @tdarwin in #1804
- feat: add event metrics for opamp usage tracking by @tdarwin in #1805
🐛 Fixes
🛠 Maintenance
- fix: update ko build tooling and fix flaky integration test by @tdarwin in #1806
- maint(deps): bump go.opentelemetry.io/otel/sdk from 1.42.0 to 1.43.0 by @dependabot[bot] in #1810
- maint(deps): bump the minor-patch group across 1 directory with 12 updates by @dependabot[bot] in #1812
Full Changelog: v3.1.2...v3.2.0
v3.1.2
This release addresses security vulnerabilities CVE-2026-27139, CVE-2026-27142, and CVE-2026-25679.
What's Changed
💡 Enhancements
🛠 Maintenance
- maint(deps): bump the minor-patch group across 1 directory with 21 updates by @dependabot[bot] in #1795
New Contributors
Full Changelog: v3.1.1...v3.1.2
v3.1.1
This is a small patch release that fixes some regressions from 3.1.1. Details are covered in RELEASE_NOTES.
💡 Enhancements
🐛 Fixes
- fix: bump husky to latest main by @TylerHelmuth in #1785
- fix: Create rules-based samplers per environment by @TylerHelmuth in #1787
- fix: apply UseClusterSize cfg by @VinozzZ in #1786
- fix: Find IPv6 addresses properly by @mterhar in #1772
- fix: apply UseClusterSize cfg by @VinozzZ in #1786
- fix: Find IPv6 addresses properly by @mterhar in #1772
🛠 Maintenance
- maint: bump husky to v0.41.0 by @TylerHelmuth in #1790
- rel: prep v3.1.1 by @TylerHelmuth in #1791
Full Changelog: v3.1.0...v3.1.1
v3.1.0
This release introduces concurrent collect loops (workers) for improved parallelism and throughput.
It also includes enhanced multi-deployment support for Redis-based clustering and various stability improvements. Details about the improvements are covered in RELEASE_NOTES.
💡 Enhancements
- feat: add meta.refinery.final_sample_rate attribute by @TylerHelmuth in #1775
- feat: set default value for SpanLimit to 32k by @VinozzZ in #1768
- feat: support multi-deployment using the same redis instance in Pubsub by @VinozzZ in #1761
- feat: set default number of workers to GOMAXPROCS by @robbkidd in #1719
- feat: initial concurrent collect loops by @ianwilkes in #1670
🚀 Performance
- perf: separate trace decision cache per worker by @VinozzZ in #1745
- perf: use []string for missingFields instead of a map by @VinozzZ in #1750
- perf: don't make another copy of Event in Span struct by @VinozzZ in #1747
- perf: do not extract sampling fields for OTLP endpoint by @VinozzZ in #1748
- perf: remove unecessary locks by @VinozzZ in #1743
- perf: reduce lock contention for health check system by @VinozzZ in #1727
- perf: reduce allocation in MemoizeFields for common cases by @VinozzZ in #1726
- perf: replace runtime.ReadMemStats with runtime/metrics by @VinozzZ in #1724
- perf: reduce otel metrics lock contention using sync.map by @VinozzZ in #1723
- perf: reduce MultiMetrics lock contention using sync.map by @VinozzZ in #1712
- perf: use thread-local metrics counter for processSpan by @VinozzZ in #1675
- perf: CollectLoop-local samplers, with shared dynsamplers by @ianwilkes in #1673
🐛 Fixes
- fix: logs for keep/drop sampling outcomes are now emitted at DEBUG instead of INFO level by @robbkidd in #1780
- fix: track trace send reason metrics by @VinozzZ in #1765
- fix: skip duplicated keys during memoization by @VinozzZ in #1764
- fix: validation type for ClusterName by @VinozzZ in #1763
- fix: missing denominators for stress relief calculation by @VinozzZ in #1762
- fix: race condition in pubsub_local by @VinozzZ in #1751
- fix: generate sampling key fields for OTLP by @VinozzZ in #1746
- fix: more Collect Loop -> Worker renaming by @robbkidd in #1741
- fix: collect_cache_entries tracks total cache size, new worker_cache_entries for tracking worker cache sizes by @VinozzZ in #1721
- fix: quick and dirty concurrency safety for samplers by @ianwilkes in #1669
🛠 Maintenance
- maint(deps): bump the minor-patch group across 1 directory with 27 updates by @dependabot in #1783
- maint(doc): add warning for has-root-span usage with rules' scope by @VinozzZ in #1781
- maint: update dynsampler-go to v0.6.4 by @VinozzZ in #1779
- maint: remove unused internal metrics by @VinozzZ in #1767
- maint: use runtime/metrics for reporting memory_inuse by @VinozzZ in #1728
- maint: rename CollectLoop related code to improve readability by @VinozzZ in #1722
- maint: assert RulesBasedSampler shares the same underlying dysamplers by @VinozzZ in #1718
- maint: consolidate Peer mocks into one mock implementation by @VinozzZ in #1717
- docs: update 3.0.0 RELNOTES with parent ID rule breaking change by @robbkidd in #1760
- docs: add SpanLimit guidance to drop large traces rule example by @robbkidd in #1744
- ci: latest/major/minor tags in public image registries will only move on stable releases by @robbkidd in #1774
- ci: update dependencies license compliance check process by @robbkidd in #1755
Full Changelog: v3.0.1...v3.1.0
v3.0.1
⌛ v3.0.1 was released on November 10, 2025, but there was a delay in publishing this GitHub Release record with the build assets attached.
What's Changed
🐛 Fixes
- fix: use sendKey for rule matching if it's configured by @VinozzZ in #1735
- fix: sampleRate incoming as resource attribute by @robbkidd in #1739
🛠 Maintenance
- maint: correct README.md to reflect the latest changes by @VinozzZ in #1690
- maint: upgrade to go 1.25 by @robbkidd in #1715
- maint: remove automaxprocs dependency by @robbkidd in #1725
- fix(ci): publish multi-arch image to multiple registry by @VinozzZ in #1709
- docs: update to document v2.x limited support by @robbkidd in #1729
Full Changelog: v3.0.0...v3.0.1
v3.0.0
What's Changed
Starting with this release, in addition to Docker Hub, images are now available through Amazon ECR Public Gallery and GitHub Container Registry.
This is a performance improvement release, focused on memory and CPU efficiency. The improvements introduce some backwards breaking changes. Details about changes needed during upgrade are covered in RELEASE_NOTES.
📝 With the release of v3.0.0, v2.x enters maintenance for support until April 1, 2026. We recommend migrating to Refinery 3.
💥 Breaking Changes 💥
- perf: streamline data handling by reducing the number of data transforms by @robbkidd in #1653
- fix: set DisableRedistribution default to true by @VinozzZ in #1657
- maint: separate metrics for otlp traffic based on transport protocol and incoming data format/signal by @VinozzZ in #1651
- fix: increment incoming/peer_router_span regardless of queue state by @VinozzZ in #1659
- maint: (BREAKING) remove CacheCapacity functionality by @VinozzZ in #1666
- maint: remove UpstreamBufferSize and PeerBufferSize from stress relief by @VinozzZ in #1672
- feat: allow deprecating an entire config group by @VinozzZ in #1692
- maint: remove deprecated config options by @VinozzZ in #1689
- maint: remove deprecated LegacyMetrics by @VinozzZ in #1691
💡 Enhancements
- perf: use noop span when tracing is disabled by @VinozzZ in #1583
- perf: only calculate span count and annotation type once by @VinozzZ in #1584
- perf: optimize trace key generation with hash-based deduplication by @VinozzZ in #1585
- perf: add lazy-loading MessagePack payload for events by @ianwilkes in #1586
- perf: use concrete type for Counter, Gauge, and Histogram metrics by @VinozzZ in #1590
- perf: move collector queue metrics to be outside of the collect loop by @VinozzZ in #1587
- feat: draft DirectTransmit to replace libhoney for trace data transmission by @ianwilkes in #1595
- perf: memoize fields that don't exist on a payload by @VinozzZ in #1601
- perf: fix encoded type of map keys by @ianwilkes in #1603
- feat: add message size limits to DirectTransmission by @ianwilkes in #1602
- perf: switch to an async pool for DirectTranmission batch sends, test changes by @ianwilkes in #1604
- perf: more scalable DirectTransmission batching by @ianwilkes in #1605
- feat: switch to DirectTransmission in refinery main by @ianwilkes in #1606
- perf: prefetch span attributes during ingest and sampling by @VinozzZ in #1607
- perf: promote all write-only metadata fields as first class fields in Payload struct by @VinozzZ in #1609
- perf: use a buffer pool for http body reads by @ianwilkes in #1610
- perf: remove dynamic string creation for metric names by @VinozzZ in #1615
- perf: reduce lock contention for internal metrics by @VinozzZ in #1617
- perf: memoize sampling fields in router by @VinozzZ in #1620
- perf: avoid dynamic string creation for sampling fields with no data by @VinozzZ in #1629
- perf: use protobuf to msgp translator for otlp/http protobuf request by @VinozzZ in #1632
- perf: avoid an extra copy for otlp protobuf payload during unmarshaling by @VinozzZ in #1633
- perf: remove metricsnamer to avoid dynamic string concatenation by @VinozzZ in #1626
- feat: allow file peers to be hot-reloaded by @kentquirk in #1636
- perf: use protobuf to msgp translator for otlp/http JSON request by @VinozzZ in #1641
- feat: use husky's optimized direct translation for GRPC calls by @ianwilkes in #1643
- perf: optimize sampling key field extraction in payload processing by @VinozzZ in #1645
- feat: implement retry for direct transmit by @VinozzZ in #1635
- perf: optimized JSON batch handling by @ianwilkes in #1644
- feat: config option deprecation by @VinozzZ in #1667
- feat(convert): support updating deprecated field using convert tool by @VinozzZ in #1674
- perf: use single zstd decoder by @VinozzZ in #1677
🐛 Fixes
- fix: fully initialize Payload object during unmarshaling by @VinozzZ in #1611
- fix: address race condition in managing locks for internal OTel metrics by @robbkidd in #1619
- perf: use read lock in Prometheus metrics Down operation by @VinozzZ in #1624
- fix: correct type for processing a span from a peer by @robbkidd in #1627
- fix: implement missing libhoney metrics in DirectTransmit by @VinozzZ in #1631
- fix: sampling key fields extraction for root-prefixed sampling fields by @VinozzZ in #1637
- fix: Ignore computed fields during sampling key extraction by @VinozzZ in #1640
- fix: error handling in postOTLPTrace by @VinozzZ in #1656
- fix: repair bad rule example by @kentquirk in #1660
- fix: set shutdown wait time to be 2x of BatchTimeout by @VinozzZ in #1663
- fix: make sure all transmit metrics have correct libhoney prefix by @VinozzZ in #1661
- fix: race condition between metrics startup and DirectTransmit registering metrics by @VinozzZ in #1665
- fix: dataset name should only be url encoded only once by @VinozzZ in #1681
- fix: wait for redis connection retry before marking Refinery as unheathy by @VinozzZ in #1685
- fix: increase upstream tranmission timeout to 30s by @VinozzZ in #1687
- fix: set default sizes for queues by @robbkidd in #1694
- fix: only try to track usage when enabled by @TylerHelmuth in #1699
🛠 Maintenance
- test: improve existing integration benchmark, add new test and benchmark for Router.batch() by @ianwilkes in #1580
- test: add benchmark test for collect loop by @VinozzZ in #1582
- perf: cleanup superfluous allocations during event unmarshal by @ianwilkes in #1592
- test: enable DryRun in collect loop benchmark test by @VinozzZ in #1594
- maint: remove metro hash and use wyhash instead by @VinozzZ in #1597
- test: add benchmark for transmission by @ianwilkes in #1599
- maint: remove unused LibhoneyMetricsWrapper by @VinozzZ in #1612
- maint: clean up payload code and testing, fix broken benchmark by @ianwilkes in #1613
- test: add BenchmarkRouterBatch/otlp by @ianwilkes in #1614
- ci: extend deadline for a wait in a flaky test by @robbkidd in #1623
- maint: upgrade dynsampler-go to 0.6.3 by @VinozzZ in #1625
- test: add OTLP to app test and benchmark by @ianwilkes in #1634
- ci: fix flaky tests by @robbkidd in #1639
- ci: fix flaky TestDirectTransmissionQueueLengthGauge by @VinozzZ in #1638
- maint: only use one reader per sendBatch in ...
v3.0.0-beta3
v3.0.0-beta3
v3.0.0-beta2
Aside from those two config contraindications, this build will accept 2.x config and rules YAMLs, so rolling back to a previous version should be straight forward. The upcoming official 3.0.0 release might require modifications to config inputs.
v2.9.7
What's Changed
💡 Enhancements
- feat: add support for REFINERY_HONEYCOMB_LOGGER_ADDITIONAL_FIELDS to honeycomb logger by @TylerHelmuth in #1600
🐛 Fixes
- fix: wait for goroutines to finish before shutting down by @VinozzZ in #1593
- fix: make TestStableMaxAlloc less flaky by @VinozzZ in #1596
- fix: send http status code 400 for empty event payload by @VinozzZ in #1618
- fix: use unique port number for integration test by @VinozzZ in #1621
🛠 Maintenance
Full Changelog: v2.9.6...v2.9.7