From c359f373aeb387b6f6721420402504bb6ecb0d07 Mon Sep 17 00:00:00 2001 From: hainenber Date: Sat, 28 Oct 2023 21:49:46 +0700 Subject: [PATCH 1/2] feat(tools/lambda-promtail): not evaluate empty string for drop_labels Signed-off-by: hainenber --- tools/lambda-promtail/lambda-promtail/main.go | 15 ++++++++------- .../lambda-promtail/lambda-promtail/main_test.go | 7 ++++++- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/tools/lambda-promtail/lambda-promtail/main.go b/tools/lambda-promtail/lambda-promtail/main.go index 14cef6732737a..0e0df1e880041 100644 --- a/tools/lambda-promtail/lambda-promtail/main.go +++ b/tools/lambda-promtail/lambda-promtail/main.go @@ -137,14 +137,15 @@ func parseExtraLabels(extraLabelsRaw string, omitPrefix bool) (model.LabelSet, e func getDropLabels() ([]model.LabelName, error) { var result []model.LabelName - dropLabelsRaw = os.Getenv("DROP_LABELS") - dropLabelsRawSplit := strings.Split(dropLabelsRaw, ",") - for _, dropLabelRaw := range dropLabelsRawSplit { - dropLabel := model.LabelName(dropLabelRaw) - if !dropLabel.IsValid() { - return []model.LabelName{}, fmt.Errorf("invalid label name %s", dropLabelRaw) + if dropLabelsRaw = os.Getenv("DROP_LABELS"); dropLabelsRaw != "" { + dropLabelsRawSplit := strings.Split(dropLabelsRaw, ",") + for _, dropLabelRaw := range dropLabelsRawSplit { + dropLabel := model.LabelName(dropLabelRaw) + if !dropLabel.IsValid() { + return []model.LabelName{}, fmt.Errorf("invalid label name %s", dropLabelRaw) + } + result = append(result, dropLabel) } - result = append(result, dropLabel) } return result, nil diff --git a/tools/lambda-promtail/lambda-promtail/main_test.go b/tools/lambda-promtail/lambda-promtail/main_test.go index 21063b643c109..5f70044e2b5ea 100644 --- a/tools/lambda-promtail/lambda-promtail/main_test.go +++ b/tools/lambda-promtail/lambda-promtail/main_test.go @@ -37,7 +37,8 @@ func TestLambdaPromtail_TestParseLabelsNoneProvided(t *testing.T) { } func TestLambdaPromtail_TestDropLabels(t *testing.T) { - os.Setenv("DROP_LABELS", "A1,A2") + // Simulate default env var set in Terraform + os.Setenv("DROP_LABELS", "") // Reset the shared global variables defer func() { @@ -48,6 +49,10 @@ func TestLambdaPromtail_TestDropLabels(t *testing.T) { var err error dropLabels, err = getDropLabels() require.Nil(t, err) + + os.Setenv("DROP_LABELS", "A1,A2") + dropLabels, err = getDropLabels() + require.Nil(t, err) require.Contains(t, dropLabels, model.LabelName("A1")) defaultLabelSet := model.LabelSet{ From 75c6e10254f58cd9e9b1d50ea48aa7c87d1db94b Mon Sep 17 00:00:00 2001 From: hainenber Date: Sat, 28 Oct 2023 21:52:29 +0700 Subject: [PATCH 2/2] doc(CHANGELOG): add new entry Signed-off-by: hainenber --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9bcc208412f6..7ed4fb36b27ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ * [10727](https://github.com/grafana/loki/pull/10727) **sandeepsukhani** Native otlp ingestion support * [11051](https://github.com/grafana/loki/pull/11051) Refactor to not use global logger in modules ##### Fixes +* [11074](https://github.com/grafana/loki/pull/11074) **hainenber** Fix panic in lambda-promtail due to mishandling of empty DROP_LABELS env var. ##### Changes