Skip to content

Commit a53b1f9

Browse files
VinozzZMikeGoldsmithcodeboten
authored
maint: prepare for 2.9.6 release (#1588)
## Which problem is this PR solving? Prepare for 2.9.6 release ## Short description of the changes - update CHANGELOG.md - update release notes - regenerate doc --------- Co-authored-by: Mike Goldsmith <goldsmith.mike@gmail.com> Co-authored-by: Alex Boten <223565+codeboten@users.noreply.github.com>
1 parent bc4c9c4 commit a53b1f9

File tree

4 files changed

+95
-1
lines changed

4 files changed

+95
-1
lines changed

CHANGELOG.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,43 @@
11
# Refinery Changelog
22

3+
## 2.9.6 2025-06-20
4+
5+
This release aims to improve user experience by adding new metrics and making default values more sensible.
6+
It also includes several bug fixes and maintenance updates.
7+
8+
### Features
9+
10+
- feat: add incoming_router_otlp_events and incoming_router_batch_events metrics (#1566) | [Yingrong Zhao](https://github.com/vinozzZ)
11+
12+
### Fixes
13+
14+
- fix: wait for all goroutines inside collector to finish during shutdown (#1589) | [Yingrong Zhao](https://github.com/vinozzZ)
15+
- fix: close redis pubsub connection on shutdown (#1578) | [Yingrong Zhao](https://github.com/vinozzZ)
16+
- fix: use value from GetCollectionConfigVal for HealthCheckTimeout in mock config (#1577) | [Yingrong Zhao](https://github.com/vinozzZ)
17+
- fix: TraceKey used in dynamic sampler should not create a new key if no key fields are found (#1575) | [Yingrong Zhao](https://github.com/vinozzZ)
18+
- fix: Docs about the `meta` fields were wrong; fix them. (#1576) | [Kent Quirk](https://github.com/kentquirk)
19+
- fix: use sensible default value for HealthCheckTimeout and MaxExpiredTraces (#1573) | [Yingrong Zhao](https://github.com/vinozzZ)
20+
- fix: don't reset SendBy if trace has already expired (#1570) | [Yingrong Zhao](https://github.com/vinozzZ)
21+
- fix: TestWhichShard don't need to include self in peer list (#1571) | [Yingrong Zhao](https://github.com/vinozzZ)
22+
- fix: Add valuetype to rules datatype (#1562) | [Mike Goldsmith](https://github.com/MikeGoldsmith)
23+
- fix: use configured identifier for host address resolution in file peer (#1548) | [Yingrong Zhao](https://github.com/vinozzZ)
24+
- fix: only execute Gosched in tests (#1549) | [Yingrong Zhao](https://github.com/vinozzZ)
25+
- fix: update refinery to report effective config on update (#1545) | [Tyler Helmuth](https://github.com/TylerHelmuth)
26+
- fix: panic caused by empty traces after redistribution (#1546) | [Yingrong Zhao](https://github.com/vinozzZ)
27+
- fix: maintain original TraceTimeout value on redistribution (#1543) | [Yingrong Zhao](https://github.com/vinozzZ)
28+
- fix: decision spans should not be processed through stress relief (#1544) | [Yingrong Zhao](https://github.com/vinozzZ)
29+
30+
### Maintenance
31+
32+
- docs: update router_otlp description (#1565) | [Jamie Danielson](https://github.com/JamieDanielson)
33+
- maint: Add autogenerated comment to config templates (#1564) | [Mike Goldsmith](https://github.com/MikeGoldsmith)
34+
- maint(deps): bump the minor-patch group across 1 directory with 17 updates (#1572) | [dependabot[bot]](https://github.com/dependabot[bot])
35+
- maint: Bump dependencies (#1579) | [Kent Quirk](https://github.com/KentQuirk)
36+
- maint: use hpsf for strings (#1581) | [Tyler Helmuth](https://github.com/TylerHelmuth)
37+
- maint: Add stronger warning about TraceLocalityMode (#1568) | [Jessica Parsons](https://github.com/verythorough)
38+
- maint: update husky to v0.36.0 (#1559) | [Mike Goldsmith](https://github.com/MikeGoldsmith)
39+
- maint: publish images to sippycup (#1557) | [Tyler Helmuth](https://github.com/TylerHelmuth)
40+
341
## 2.9.5 2025-04-24
442

543
This release brings a experimental feature for OpAMP. This feature is intended for internal use only and is not supported or recommended for production.

RELEASE_NOTES.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,32 @@
22

33
While [CHANGELOG.md](./CHANGELOG.md) contains detailed documentation and links to all the source code changes in a given release, this document is intended to be aimed at a more comprehensible version of the contents of the release from the point of view of users of Refinery.
44

5+
## Version 2.9.6
6+
7+
This release focuses on improving observability and making Refinery easier to operate with better default values and new metrics. It also includes several important bug fixes for edge cases and configuration handling.
8+
9+
### Enhanced Observability
10+
11+
Two new metrics have been added to help monitor OTLP traffic patterns:
12+
- `incoming_router_otlp_events` - tracks the number of events received via OTLP endpoints
13+
- `incoming_router_batch_events` - tracks the number of events received via /batch endpoints
14+
15+
These metrics complement existing router metrics and provide better visibility into how your telemetry data is flowing through Refinery.
16+
17+
### Improved Default Configuration
18+
19+
Several default values have been updated to be more practical for real-world deployments:
20+
- `HealthCheckTimeout` now defaults to a more reasonable value instead of requiring manual configuration
21+
- `MaxExpiredTraces` has a sensible default to prevent collect loop issues out of the box
22+
23+
### Key Bug Fixes
24+
25+
This release addresses several important edge cases:
26+
- **Redis connection cleanup**: Fixed a bug where Refinery would not properly clean up Redis connections, potentially leading to Redis connection errors during shutdown.
27+
- **Dynamic sampler key generation**: Use an empty string for the sampler key when no fields are present, clarifying the behavior when no key fields are found in a trace.
28+
- **Peer management**: Fixed a bug where Refinery would not properly handle peer management when using file-based peer management.
29+
- **Trace timeout during redistribution**: Propagate the trace timeout to the new owner during redistribution, ensuring that traces are handled correctly even when ownership changes.
30+
531
## Version 2.9.5
632

733
This release includes improvements to trace cache documentation, internal metric flushing on shutdown, and enhanced metric visibility such as sampler key cardinality. It also introduces environment variable substitution in config strings and experimental support for OpAMP. The OpAMP feature is intended for *internal use only* and is *not supported or recommended* for production.

refinery_rules.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ Including an error field, or something like `HTTP status code`, is an excellent
9898
Using fields with very high cardinality, like `k8s.pod.id`, is a bad choice.
9999
If the combination of fields essentially makes each trace unique, then the Dynamic Sampler will sample everything.
100100
If the combination of fields is not unique enough, then you will not be guaranteed samples of the most interesting traces.
101+
If a trace does not contain any of the fields specified in the FieldList, it will still be evaluated by the sampler.
102+
However, since it lacks all key fields, it will be grouped under a single empty (blank) key.
103+
This means that all such traces will share the same sample rate, determined by that one shared key.
101104
As an example, consider as a good set of fields: the combination of `HTTP endpoint` (high-frequency and boring), `HTTP method`, and `status code` (normally boring but can become interesting when indicating an error) since it will allowing proper sampling of all endpoints under normal traffic and call out when there is failing traffic to any endpoint.
102105
As of Refinery 2.8.0, the `root.` prefix can be used to limit the field value to that of the root span.
103106
For example, `root.http.response.status_code` will only consider the `http.response.status_code` field from the root span rather than a combination of all the spans in the trace.
@@ -203,6 +206,9 @@ Including an error field, or something like `HTTP status code`, is an excellent
203206
Using fields with very high cardinality, like `k8s.pod.id`, is a bad choice.
204207
If the combination of fields essentially makes each trace unique, then the Dynamic Sampler will sample everything.
205208
If the combination of fields is not unique enough, then you will not be guaranteed samples of the most interesting traces.
209+
If a trace does not contain any of the fields specified in the FieldList, it will still be evaluated by the sampler.
210+
However, since it lacks all key fields, it will be grouped under a single empty (blank) key.
211+
This means that all such traces will share the same sample rate, determined by that one shared key.
206212
As an example, consider as a good set of fields: the combination of `HTTP endpoint` (high-frequency and boring), `HTTP method`, and `status code` (normally boring but can become interesting when indicating an error) since it will allowing proper sampling of all endpoints under normal traffic and call out when there is failing traffic to any endpoint.
207213
As of Refinery 2.8.0, the `root.` prefix can be used to limit the field value to that of the root span.
208214
For example, `root.http.response.status_code` will only consider the `http.response.status_code` field from the root span rather than a combination of all the spans in the trace.
@@ -320,6 +326,9 @@ Including an error field, or something like `HTTP status code`, is an excellent
320326
Using fields with very high cardinality, like `k8s.pod.id`, is a bad choice.
321327
If the combination of fields essentially makes each trace unique, then the Dynamic Sampler will sample everything.
322328
If the combination of fields is not unique enough, then you will not be guaranteed samples of the most interesting traces.
329+
If a trace does not contain any of the fields specified in the FieldList, it will still be evaluated by the sampler.
330+
However, since it lacks all key fields, it will be grouped under a single empty (blank) key.
331+
This means that all such traces will share the same sample rate, determined by that one shared key.
323332
As an example, consider as a good set of fields: the combination of `HTTP endpoint` (high-frequency and boring), `HTTP method`, and `status code` (normally boring but can become interesting when indicating an error) since it will allowing proper sampling of all endpoints under normal traffic and call out when there is failing traffic to any endpoint.
324333
As of Refinery 2.8.0, the `root.` prefix can be used to limit the field value to that of the root span.
325334
For example, `root.http.response.status_code` will only consider the `http.response.status_code` field from the root span rather than a combination of all the spans in the trace.
@@ -408,6 +417,9 @@ Including an error field, or something like `HTTP status code`, is an excellent
408417
Using fields with very high cardinality, like `k8s.pod.id`, is a bad choice.
409418
If the combination of fields essentially makes each trace unique, then the Dynamic Sampler will sample everything.
410419
If the combination of fields is not unique enough, then you will not be guaranteed samples of the most interesting traces.
420+
If a trace does not contain any of the fields specified in the FieldList, it will still be evaluated by the sampler.
421+
However, since it lacks all key fields, it will be grouped under a single empty (blank) key.
422+
This means that all such traces will share the same sample rate, determined by that one shared key.
411423
As an example, consider as a good set of fields: the combination of `HTTP endpoint` (high-frequency and boring), `HTTP method`, and `status code` (normally boring but can become interesting when indicating an error) since it will allowing proper sampling of all endpoints under normal traffic and call out when there is failing traffic to any endpoint.
412424
As of Refinery 2.8.0, the `root.` prefix can be used to limit the field value to that of the root span.
413425
For example, `root.http.response.status_code` will only consider the `http.response.status_code` field from the root span rather than a combination of all the spans in the trace.
@@ -624,6 +636,9 @@ Including an error field, or something like `HTTP status code`, is an excellent
624636
Using fields with very high cardinality, like `k8s.pod.id`, is a bad choice.
625637
If the combination of fields essentially makes each trace unique, then the Dynamic Sampler will sample everything.
626638
If the combination of fields is not unique enough, then you will not be guaranteed samples of the most interesting traces.
639+
If a trace does not contain any of the fields specified in the FieldList, it will still be evaluated by the sampler.
640+
However, since it lacks all key fields, it will be grouped under a single empty (blank) key.
641+
This means that all such traces will share the same sample rate, determined by that one shared key.
627642
As an example, consider as a good set of fields: the combination of `HTTP endpoint` (high-frequency and boring), `HTTP method`, and `status code` (normally boring but can become interesting when indicating an error) since it will allowing proper sampling of all endpoints under normal traffic and call out when there is failing traffic to any endpoint.
628643
As of Refinery 2.8.0, the `root.` prefix can be used to limit the field value to that of the root span.
629644
For example, `root.http.response.status_code` will only consider the `http.response.status_code` field from the root span rather than a combination of all the spans in the trace.

rules.md

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# Honeycomb Refinery Rules Documentation
44

55
This is the documentation for the rules configuration for Honeycomb's Refinery.
6-
It was automatically generated on 2025-05-14 at 16:44:26 UTC.
6+
It was automatically generated on 2025-06-17 at 14:29:18 UTC.
77

88
## The Rules file
99

@@ -119,6 +119,9 @@ Including an error field, or something like `HTTP status code`, is an excellent
119119
Using fields with very high cardinality, like `k8s.pod.id`, is a bad choice.
120120
If the combination of fields essentially makes each trace unique, then the Dynamic Sampler will sample everything.
121121
If the combination of fields is not unique enough, then you will not be guaranteed samples of the most interesting traces.
122+
If a trace does not contain any of the fields specified in the FieldList, it will still be evaluated by the sampler.
123+
However, since it lacks all key fields, it will be grouped under a single empty (blank) key.
124+
This means that all such traces will share the same sample rate, determined by that one shared key.
122125
As an example, consider as a good set of fields: the combination of `HTTP endpoint` (high-frequency and boring), `HTTP method`, and `status code` (normally boring but can become interesting when indicating an error) since it will allowing proper sampling of all endpoints under normal traffic and call out when there is failing traffic to any endpoint.
123126
As of Refinery 2.8.0, the `root.` prefix can be used to limit the field value to that of the root span.
124127
For example, `root.http.response.status_code` will only consider the `http.response.status_code` field from the root span rather than a combination of all the spans in the trace.
@@ -227,6 +230,9 @@ Including an error field, or something like `HTTP status code`, is an excellent
227230
Using fields with very high cardinality, like `k8s.pod.id`, is a bad choice.
228231
If the combination of fields essentially makes each trace unique, then the Dynamic Sampler will sample everything.
229232
If the combination of fields is not unique enough, then you will not be guaranteed samples of the most interesting traces.
233+
If a trace does not contain any of the fields specified in the FieldList, it will still be evaluated by the sampler.
234+
However, since it lacks all key fields, it will be grouped under a single empty (blank) key.
235+
This means that all such traces will share the same sample rate, determined by that one shared key.
230236
As an example, consider as a good set of fields: the combination of `HTTP endpoint` (high-frequency and boring), `HTTP method`, and `status code` (normally boring but can become interesting when indicating an error) since it will allowing proper sampling of all endpoints under normal traffic and call out when there is failing traffic to any endpoint.
231237
As of Refinery 2.8.0, the `root.` prefix can be used to limit the field value to that of the root span.
232238
For example, `root.http.response.status_code` will only consider the `http.response.status_code` field from the root span rather than a combination of all the spans in the trace.
@@ -347,6 +353,9 @@ Including an error field, or something like `HTTP status code`, is an excellent
347353
Using fields with very high cardinality, like `k8s.pod.id`, is a bad choice.
348354
If the combination of fields essentially makes each trace unique, then the Dynamic Sampler will sample everything.
349355
If the combination of fields is not unique enough, then you will not be guaranteed samples of the most interesting traces.
356+
If a trace does not contain any of the fields specified in the FieldList, it will still be evaluated by the sampler.
357+
However, since it lacks all key fields, it will be grouped under a single empty (blank) key.
358+
This means that all such traces will share the same sample rate, determined by that one shared key.
350359
As an example, consider as a good set of fields: the combination of `HTTP endpoint` (high-frequency and boring), `HTTP method`, and `status code` (normally boring but can become interesting when indicating an error) since it will allowing proper sampling of all endpoints under normal traffic and call out when there is failing traffic to any endpoint.
351360
As of Refinery 2.8.0, the `root.` prefix can be used to limit the field value to that of the root span.
352361
For example, `root.http.response.status_code` will only consider the `http.response.status_code` field from the root span rather than a combination of all the spans in the trace.
@@ -438,6 +447,9 @@ Including an error field, or something like `HTTP status code`, is an excellent
438447
Using fields with very high cardinality, like `k8s.pod.id`, is a bad choice.
439448
If the combination of fields essentially makes each trace unique, then the Dynamic Sampler will sample everything.
440449
If the combination of fields is not unique enough, then you will not be guaranteed samples of the most interesting traces.
450+
If a trace does not contain any of the fields specified in the FieldList, it will still be evaluated by the sampler.
451+
However, since it lacks all key fields, it will be grouped under a single empty (blank) key.
452+
This means that all such traces will share the same sample rate, determined by that one shared key.
441453
As an example, consider as a good set of fields: the combination of `HTTP endpoint` (high-frequency and boring), `HTTP method`, and `status code` (normally boring but can become interesting when indicating an error) since it will allowing proper sampling of all endpoints under normal traffic and call out when there is failing traffic to any endpoint.
442454
As of Refinery 2.8.0, the `root.` prefix can be used to limit the field value to that of the root span.
443455
For example, `root.http.response.status_code` will only consider the `http.response.status_code` field from the root span rather than a combination of all the spans in the trace.
@@ -668,6 +680,9 @@ Including an error field, or something like `HTTP status code`, is an excellent
668680
Using fields with very high cardinality, like `k8s.pod.id`, is a bad choice.
669681
If the combination of fields essentially makes each trace unique, then the Dynamic Sampler will sample everything.
670682
If the combination of fields is not unique enough, then you will not be guaranteed samples of the most interesting traces.
683+
If a trace does not contain any of the fields specified in the FieldList, it will still be evaluated by the sampler.
684+
However, since it lacks all key fields, it will be grouped under a single empty (blank) key.
685+
This means that all such traces will share the same sample rate, determined by that one shared key.
671686
As an example, consider as a good set of fields: the combination of `HTTP endpoint` (high-frequency and boring), `HTTP method`, and `status code` (normally boring but can become interesting when indicating an error) since it will allowing proper sampling of all endpoints under normal traffic and call out when there is failing traffic to any endpoint.
672687
As of Refinery 2.8.0, the `root.` prefix can be used to limit the field value to that of the root span.
673688
For example, `root.http.response.status_code` will only consider the `http.response.status_code` field from the root span rather than a combination of all the spans in the trace.

0 commit comments

Comments
 (0)