Skip to content

Commit 2d6deda

Browse files
tilligkentquirk
authored andcommitted
[processor/tailsamplingprocessor] and support for string invert match (open-telemetry#9768)
* [processor/tailsamplingprocessor] and support for string invert * Add open-telemetry#9553 to changelog.
1 parent 6ab68c5 commit 2d6deda

File tree

3 files changed

+63
-5
lines changed

3 files changed

+63
-5
lines changed

CHANGELOG.md

+6-4
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
### 💡 Enhancements 💡
1212

13+
- `tailsamplingprocessor`: Add support for string invert matching to `and` policy (#9553)
14+
1315
### 🧰 Bug fixes 🧰
1416

1517
## v0.52.0
@@ -63,7 +65,7 @@
6365
### 🚩 Deprecations 🚩
6466

6567
- `exporter/azuremonitor`: Deprecate use of LogRecord.Name as the log envelope category name. There is no replacement. (#9258)
66-
- `processor/k8sattributes`: Deprecate use of k8s.cluster.name metadata parameter (obsolete) (#9968)
68+
- `processor/k8sattributes`: Deprecate use of k8s.cluster.name metadata parameter (obsolete) (#9968)
6769

6870
### 🚀 New components 🚀
6971

@@ -75,7 +77,7 @@
7577
### 💡 Enhancements 💡
7678

7779
- `cmd/mdatagen`: Replace enum attributes values with typed constants (#9683)
78-
- `elasticsearchreceiver`: Update metrics scope name from `otelcol/elasticsearch`
80+
- `elasticsearchreceiver`: Update metrics scope name from `otelcol/elasticsearch`
7981
to `otelcol/elasticsearchreceiver` (#9757)
8082
- `k8sclusterreceiver`: Validate that k8s API supports a resource before setting up a watcher for it (#9523)
8183
- `internal/stanza`: Add support for `remove` operator (#9524)
@@ -161,7 +163,7 @@
161163

162164
This release contains an issue in
163165
[Prometheus receiver](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/prometheusreceiver)
164-
causing 30% memory consumption increase when there is a lot of target churn. The issue is currently being
166+
causing 30% memory consumption increase when there is a lot of target churn. The issue is currently being
165167
investigated and will be fixed in one of the new releases. More details:
166168
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/9278.
167169

@@ -176,7 +178,7 @@ https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/9278.
176178
- `dynatraceexporter`: Make `serialization` package `/internal` (#9097)
177179
- `attributesprocessor`: Remove log names from filters (#9131)
178180
- `k8sclusterreceiver`: The `receiver.k8sclusterreceiver.reportCpuMetricsAsDouble` feature gate is now enabled by default (#9367)
179-
- Users may have to update monitoring for a few Kubernetes cpu metrics, for
181+
- Users may have to update monitoring for a few Kubernetes cpu metrics, for
180182
more details see [feature-gate-configurations](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/k8sclusterreceiver#feature-gate-configurations).
181183

182184
### 🚩 Deprecations 🚩

processor/tailsamplingprocessor/internal/sampling/and.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func (c *And) Evaluate(traceID pcommon.TraceID, trace *TraceData) (Decision, err
4545
if err != nil {
4646
return Unspecified, err
4747
}
48-
if decision == NotSampled {
48+
if decision == NotSampled || decision == InvertNotSampled {
4949
return NotSampled, nil
5050
}
5151

processor/tailsamplingprocessor/internal/sampling/and_test.go

+56
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,59 @@ func TestAndEvaluatorSampled(t *testing.T) {
7878
assert.Equal(t, decision, Sampled)
7979

8080
}
81+
82+
func TestAndEvaluatorStringInvertSampled(t *testing.T) {
83+
n1 := NewStringAttributeFilter(zap.NewNop(), "attribute_name", []string{"no_match"}, false, 0, true)
84+
n2, err := NewStatusCodeFilter(zap.NewNop(), []string{"ERROR"})
85+
if err != nil {
86+
t.FailNow()
87+
}
88+
89+
and := NewAnd(zap.NewNop(), []PolicyEvaluator{n1, n2})
90+
91+
traces := ptrace.NewTraces()
92+
rs := traces.ResourceSpans().AppendEmpty()
93+
ils := rs.ScopeSpans().AppendEmpty()
94+
95+
span := ils.Spans().AppendEmpty()
96+
span.Attributes().InsertString("attribute_name", "attribute_value")
97+
span.Status().SetCode(ptrace.StatusCodeError)
98+
span.SetTraceID(pcommon.NewTraceID([16]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}))
99+
span.SetSpanID(pcommon.NewSpanID([8]byte{1, 2, 3, 4, 5, 6, 7, 8}))
100+
101+
trace := &TraceData{
102+
ReceivedBatches: []ptrace.Traces{traces},
103+
}
104+
decision, err := and.Evaluate(traceID, trace)
105+
require.NoError(t, err, "Failed to evaluate and policy: %v", err)
106+
assert.Equal(t, decision, Sampled)
107+
108+
}
109+
110+
func TestAndEvaluatorStringInvertNotSampled(t *testing.T) {
111+
n1 := NewStringAttributeFilter(zap.NewNop(), "attribute_name", []string{"attribute_value"}, false, 0, true)
112+
n2, err := NewStatusCodeFilter(zap.NewNop(), []string{"ERROR"})
113+
if err != nil {
114+
t.FailNow()
115+
}
116+
117+
and := NewAnd(zap.NewNop(), []PolicyEvaluator{n1, n2})
118+
119+
traces := ptrace.NewTraces()
120+
rs := traces.ResourceSpans().AppendEmpty()
121+
ils := rs.ScopeSpans().AppendEmpty()
122+
123+
span := ils.Spans().AppendEmpty()
124+
span.Attributes().InsertString("attribute_name", "attribute_value")
125+
span.Status().SetCode(ptrace.StatusCodeError)
126+
span.SetTraceID(pcommon.NewTraceID([16]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}))
127+
span.SetSpanID(pcommon.NewSpanID([8]byte{1, 2, 3, 4, 5, 6, 7, 8}))
128+
129+
trace := &TraceData{
130+
ReceivedBatches: []ptrace.Traces{traces},
131+
}
132+
decision, err := and.Evaluate(traceID, trace)
133+
require.NoError(t, err, "Failed to evaluate and policy: %v", err)
134+
assert.Equal(t, decision, NotSampled)
135+
136+
}

0 commit comments

Comments
 (0)