From 6fbb299f78376ee058f88dbe1d6ca36cb303f22b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraci=20Paix=C3=A3o=20Kr=C3=B6hling?= Date: Mon, 11 Sep 2023 11:23:10 -0300 Subject: [PATCH 1/3] [processor/probabilisticsampler] Allow non-bytes attributes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When doing a probabilistic sampling for logs, the probabilistic sampler currently requires the source attribute to be of bytes value. This PR changes that to allow any value type to be used. Fixes #18222 Signed-off-by: Juraci Paixão Kröhling --- .../probabilisticsamplerprocessor/logsprocessor.go | 9 ++++++++- .../logsprocessor_test.go | 12 +++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/processor/probabilisticsamplerprocessor/logsprocessor.go b/processor/probabilisticsamplerprocessor/logsprocessor.go index 4b42e76e4ce8..d5f2ef3a75f8 100644 --- a/processor/probabilisticsamplerprocessor/logsprocessor.go +++ b/processor/probabilisticsamplerprocessor/logsprocessor.go @@ -64,7 +64,7 @@ func (lsp *logSamplerProcessor) processLogs(ctx context.Context, ld plog.Logs) ( if lidBytes == nil && lsp.samplingSource != "" { if value, ok := l.Attributes().Get(lsp.samplingSource); ok { tagPolicyValue = lsp.samplingSource - lidBytes = value.Bytes().AsRaw() + lidBytes = getBytesFromValue(value) } } priority := lsp.scaledSamplingRate @@ -102,3 +102,10 @@ func (lsp *logSamplerProcessor) processLogs(ctx context.Context, ld plog.Logs) ( } return ld, nil } + +func getBytesFromValue(value pcommon.Value) []byte { + if value.Type() == pcommon.ValueTypeBytes { + return value.Bytes().AsRaw() + } + return []byte(value.AsString()) +} diff --git a/processor/probabilisticsamplerprocessor/logsprocessor_test.go b/processor/probabilisticsamplerprocessor/logsprocessor_test.go index 1c5e6f5a6647..bc21d8ecbb45 100644 --- a/processor/probabilisticsamplerprocessor/logsprocessor_test.go +++ b/processor/probabilisticsamplerprocessor/logsprocessor_test.go @@ -116,6 +116,15 @@ func TestLogsSampling(t *testing.T) { }, received: 23, }, + { + name: "sampling_source sampling as string", + cfg: &Config{ + SamplingPercentage: 50, + AttributeSource: recordAttributeSource, + FromAttribute: "bar", + }, + received: 29, // probabilistic... doesn't yield the same results as foo + }, { name: "sampling_priority", cfg: &Config{ @@ -149,10 +158,11 @@ func TestLogsSampling(t *testing.T) { ib := byte(i) traceID := [16]byte{0, 0, 0, 0, 0, 0, 0, 0, ib, ib, ib, ib, ib, ib, ib, ib} record.SetTraceID(traceID) - // set half of records with a foo attribute + // set half of records with a foo (bytes) and a bar (string) attribute if i%2 == 0 { b := record.Attributes().PutEmptyBytes("foo") b.FromRaw(traceID[:]) + record.Attributes().PutStr("bar", string(record.TraceID().String())) } // set a fourth of records with a priority attribute if i%4 == 0 { From 63523a2fcfd35fbdf425e9a559a58ed21d25e427 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraci=20Paix=C3=A3o=20Kr=C3=B6hling?= Date: Mon, 11 Sep 2023 11:25:25 -0300 Subject: [PATCH 2/3] Add changelog MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Juraci Paixão Kröhling --- ...-probabilisticsampler-allow-non-bytes.yaml | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .chloggen/18222-probabilisticsampler-allow-non-bytes.yaml diff --git a/.chloggen/18222-probabilisticsampler-allow-non-bytes.yaml b/.chloggen/18222-probabilisticsampler-allow-non-bytes.yaml new file mode 100644 index 000000000000..ee326a05d48a --- /dev/null +++ b/.chloggen/18222-probabilisticsampler-allow-non-bytes.yaml @@ -0,0 +1,27 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: 'enhancement' + +# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver) +component: processor/probabilisticsampler + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Allow non-bytes values to be used as the source for the sampling decision + +# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. +issues: [18222] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: + +# If your change doesn't affect end users or the exported elements of any package, +# you should instead start your pull request title with [chore] or use the "Skip Changelog" label. +# Optional: The change log or logs in which this entry should be included. +# e.g. '[user]' or '[user, api]' +# Include 'user' if the change is relevant to end users. +# Include 'api' if there is a change to a library API. +# Default: '[user]' +change_logs: [user] From a6b31ed3a1950fc5cef3acc97a25148c4a25b42d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraci=20Paix=C3=A3o=20Kr=C3=B6hling?= Date: Mon, 11 Sep 2023 11:51:19 -0300 Subject: [PATCH 3/3] lint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Juraci Paixão Kröhling --- processor/probabilisticsamplerprocessor/logsprocessor_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/processor/probabilisticsamplerprocessor/logsprocessor_test.go b/processor/probabilisticsamplerprocessor/logsprocessor_test.go index bc21d8ecbb45..76e0311f3f3b 100644 --- a/processor/probabilisticsamplerprocessor/logsprocessor_test.go +++ b/processor/probabilisticsamplerprocessor/logsprocessor_test.go @@ -162,7 +162,7 @@ func TestLogsSampling(t *testing.T) { if i%2 == 0 { b := record.Attributes().PutEmptyBytes("foo") b.FromRaw(traceID[:]) - record.Attributes().PutStr("bar", string(record.TraceID().String())) + record.Attributes().PutStr("bar", record.TraceID().String()) } // set a fourth of records with a priority attribute if i%4 == 0 {