From 71c22ddf5334886b83c0b934dfe4f08dd66d8eb8 Mon Sep 17 00:00:00 2001 From: Vihas Makwana Date: Thu, 20 Feb 2025 15:46:50 +0530 Subject: [PATCH 1/5] inject log level --- libbeat/otelbeat/providers/fbprovider/fbprovider.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libbeat/otelbeat/providers/fbprovider/fbprovider.go b/libbeat/otelbeat/providers/fbprovider/fbprovider.go index 50ba26bdf900..48f270f9bafc 100644 --- a/libbeat/otelbeat/providers/fbprovider/fbprovider.go +++ b/libbeat/otelbeat/providers/fbprovider/fbprovider.go @@ -72,7 +72,11 @@ func (fmp *provider) Retrieve(_ context.Context, uri string, _ confmap.WatcherFu }, }, } - + // inject log level + level, _ := cfg.String("logs.level", -1) + if level != "" { + cfgMap["service::telemetry::logs::level"] = level + } return confmap.NewRetrieved(cfgMap) } From 9f52f4fc6bdc1e3fce562d5e0b02228be3864f4e Mon Sep 17 00:00:00 2001 From: Vihas Makwana Date: Tue, 4 Mar 2025 12:22:01 +0530 Subject: [PATCH 2/5] review comments --- .../otelbeat/beatconverter/beatconverter.go | 6 ++++ libbeat/otelbeat/beatconverter/logging.go | 35 +++++++++++++++++++ .../providers/fbprovider/fbprovider.go | 6 +--- 3 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 libbeat/otelbeat/beatconverter/logging.go diff --git a/libbeat/otelbeat/beatconverter/beatconverter.go b/libbeat/otelbeat/beatconverter/beatconverter.go index 935b9293dd56..7d6ee08a8c32 100644 --- a/libbeat/otelbeat/beatconverter/beatconverter.go +++ b/libbeat/otelbeat/beatconverter/beatconverter.go @@ -111,6 +111,12 @@ func (c converter) Convert(_ context.Context, conf *confmap.Conf) error { beatReceiverConfigKey + "::output::otelconsumer": nil, } + // inject log level + level, _ := config.MustNewConfigFrom(receiverCfg.ToStringMap()).String("logging.level", -1) + if level != "" { + out["service::telemetry::logs::level"] = getOTeLLogLevel(level) + } + err = conf.Merge(confmap.NewFromStringMap(out)) if err != nil { return err diff --git a/libbeat/otelbeat/beatconverter/logging.go b/libbeat/otelbeat/beatconverter/logging.go new file mode 100644 index 000000000000..4217c0d40e55 --- /dev/null +++ b/libbeat/otelbeat/beatconverter/logging.go @@ -0,0 +1,35 @@ +// Licensed to Elasticsearch B.V. under one or more contributor +// license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright +// ownership. Elasticsearch B.V. licenses this file to you under +// the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package beatconverter + +import "strings" + +func getOTeLLogLevel(level string) string { + switch strings.ToLower(level) { + case "debug": + return "DEBUG" + case "info": + return "INFO" + case "warning": + return "WARN" + case "error", "critical": + return "ERROR" + default: + return "" + } +} diff --git a/libbeat/otelbeat/providers/fbprovider/fbprovider.go b/libbeat/otelbeat/providers/fbprovider/fbprovider.go index 48f270f9bafc..50ba26bdf900 100644 --- a/libbeat/otelbeat/providers/fbprovider/fbprovider.go +++ b/libbeat/otelbeat/providers/fbprovider/fbprovider.go @@ -72,11 +72,7 @@ func (fmp *provider) Retrieve(_ context.Context, uri string, _ confmap.WatcherFu }, }, } - // inject log level - level, _ := cfg.String("logs.level", -1) - if level != "" { - cfgMap["service::telemetry::logs::level"] = level - } + return confmap.NewRetrieved(cfgMap) } From 56bc4ff6333c5394167fb811a0a8ed3344da072b Mon Sep 17 00:00:00 2001 From: Vihas Makwana <121151420+VihasMakwana@users.noreply.github.com> Date: Tue, 4 Mar 2025 21:25:08 +0530 Subject: [PATCH 3/5] Update libbeat/otelbeat/beatconverter/logging.go Co-authored-by: Anderson Queiroz --- libbeat/otelbeat/beatconverter/logging.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libbeat/otelbeat/beatconverter/logging.go b/libbeat/otelbeat/beatconverter/logging.go index 4217c0d40e55..5be917638f0a 100644 --- a/libbeat/otelbeat/beatconverter/logging.go +++ b/libbeat/otelbeat/beatconverter/logging.go @@ -19,7 +19,7 @@ package beatconverter import "strings" -func getOTeLLogLevel(level string) string { +func getOTelLogLevel(level string) string { switch strings.ToLower(level) { case "debug": return "DEBUG" From 0ac5848d39b28edbe3633bb1df658f3f93b158ae Mon Sep 17 00:00:00 2001 From: Vihas Makwana Date: Thu, 6 Mar 2025 16:16:17 +0530 Subject: [PATCH 4/5] comments and test case --- .../otelbeat/beatconverter/beatconverter.go | 14 +++- .../beatconverter/beatconverter_test.go | 70 +++++++++++++++++++ libbeat/otelbeat/beatconverter/logging.go | 17 +++-- 3 files changed, 91 insertions(+), 10 deletions(-) diff --git a/libbeat/otelbeat/beatconverter/beatconverter.go b/libbeat/otelbeat/beatconverter/beatconverter.go index 7d6ee08a8c32..8321d2fe622f 100644 --- a/libbeat/otelbeat/beatconverter/beatconverter.go +++ b/libbeat/otelbeat/beatconverter/beatconverter.go @@ -112,9 +112,17 @@ func (c converter) Convert(_ context.Context, conf *confmap.Conf) error { } // inject log level - level, _ := config.MustNewConfigFrom(receiverCfg.ToStringMap()).String("logging.level", -1) - if level != "" { - out["service::telemetry::logs::level"] = getOTeLLogLevel(level) + receiverConfig, err := config.NewConfigFrom(receiverCfg.ToStringMap()) + if err != nil { + return fmt.Errorf("Error getting receiver config: %w", err) + } + + if level, _ := receiverConfig.String("logging.level", -1); level != "" { + out["service::telemetry::logs::level"], err = getOTelLogLevel(level) + if err != nil { + return fmt.Errorf("error injecting log level: %w", err) + + } } err = conf.Merge(confmap.NewFromStringMap(out)) diff --git a/libbeat/otelbeat/beatconverter/beatconverter_test.go b/libbeat/otelbeat/beatconverter/beatconverter_test.go index d2093a7722de..8b18d184d1df 100644 --- a/libbeat/otelbeat/beatconverter/beatconverter_test.go +++ b/libbeat/otelbeat/beatconverter/beatconverter_test.go @@ -19,6 +19,7 @@ package beatconverter import ( "context" + "fmt" "testing" "github.com/stretchr/testify/assert" @@ -279,6 +280,75 @@ service: }) + // t.Run("test log level", +} + +func TestLogLevel(t *testing.T) { + c := converter{} + tests := []struct { + name string + level string + expectedLevel string + expectedError string + }{ + { + name: "test-debug", + level: "debug", + expectedLevel: "DEBUG", + }, + { + name: "test-info", + level: "info", + expectedLevel: "INFO", + }, + { + name: "test-warn", + level: "warning", + expectedLevel: "WARN", + }, + { + name: "test-error", + level: "error", + expectedLevel: "ERROR", + }, + { + name: "test-critical", + level: "critical", + expectedLevel: "ERROR", + }, + { + name: "test-error", + level: "blabla", + expectedError: "unrecognized level: blabla", + }, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + supportedInput := fmt.Sprintf(` + receivers: + filebeatreceiver: + logging: + level: %s + filebeat: + inputs: + - type: filestream + enabled: true + id: filestream-input-id + paths: + - /tmp/flog.log + `, test.level) + input := newFromYamlString(t, supportedInput) + err := c.Convert(context.Background(), input) + if test.expectedError != "" { + require.ErrorContains(t, err, test.expectedError) + } else { + require.NoError(t, err) + inputMap := input.Get("service::telemetry::logs::level") + require.Equal(t, test.expectedLevel, inputMap) + } + }) + } + } func newFromYamlString(t *testing.T, input string) *confmap.Conf { diff --git a/libbeat/otelbeat/beatconverter/logging.go b/libbeat/otelbeat/beatconverter/logging.go index 5be917638f0a..53c90f7d7ed9 100644 --- a/libbeat/otelbeat/beatconverter/logging.go +++ b/libbeat/otelbeat/beatconverter/logging.go @@ -17,19 +17,22 @@ package beatconverter -import "strings" +import ( + "fmt" + "strings" +) -func getOTelLogLevel(level string) string { +func getOTelLogLevel(level string) (string, error) { switch strings.ToLower(level) { case "debug": - return "DEBUG" + return "DEBUG", nil case "info": - return "INFO" + return "INFO", nil case "warning": - return "WARN" + return "WARN", nil case "error", "critical": - return "ERROR" + return "ERROR", nil default: - return "" + return "", fmt.Errorf("unrecognized level: %s", level) } } From 68e93e90423bcd13c981e9792c87d4ef34c53249 Mon Sep 17 00:00:00 2001 From: Vihas Makwana Date: Thu, 6 Mar 2025 22:01:20 +0530 Subject: [PATCH 5/5] remove comment --- libbeat/otelbeat/beatconverter/beatconverter_test.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/libbeat/otelbeat/beatconverter/beatconverter_test.go b/libbeat/otelbeat/beatconverter/beatconverter_test.go index 8b18d184d1df..3a87374b71f4 100644 --- a/libbeat/otelbeat/beatconverter/beatconverter_test.go +++ b/libbeat/otelbeat/beatconverter/beatconverter_test.go @@ -279,8 +279,6 @@ service: compareAndAssert(t, expOutput, input) }) - - // t.Run("test log level", } func TestLogLevel(t *testing.T) {