From d06367542f45562420eba681c965fc6cceebf0b7 Mon Sep 17 00:00:00 2001 From: shantanualshi Date: Tue, 2 Apr 2024 21:54:19 +0530 Subject: [PATCH] Filter out ID types and add common labels --- pkg/querier/querier.go | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/pkg/querier/querier.go b/pkg/querier/querier.go index 7f59e26c61fc..e499a02618b6 100644 --- a/pkg/querier/querier.go +++ b/pkg/querier/querier.go @@ -4,10 +4,12 @@ import ( "context" "flag" "net/http" + "regexp" "time" "github.com/go-kit/log" "github.com/opentracing/opentracing-go" + "golang.org/x/exp/slices" "github.com/grafana/loki/v3/pkg/storage/stores/index" "github.com/grafana/loki/v3/pkg/storage/stores/index/seriesvolume" @@ -915,6 +917,9 @@ func (q *SingleTenantQuerier) DetectedFields(_ context.Context, _ *logproto.Dete func (q *SingleTenantQuerier) DetectedLabels(ctx context.Context, req *logproto.DetectedLabelsRequest) (*logproto.DetectedLabelsResponse, error) { var ingesterLabels *logproto.LabelToValuesResponse var detectedLabels []*logproto.DetectedLabel + + staticLabels := []string{"pod", "namespace", "cluster", "instance"} + g, ctx := errgroup.WithContext(ctx) ingesterQueryInterval, _ := q.buildQueryIntervals(*req.Start, *req.End) if !q.cfg.QueryStoreOnly { @@ -937,7 +942,9 @@ func (q *SingleTenantQuerier) DetectedLabels(ctx context.Context, req *logproto. for label, values := range ingesterLabels.Labels { cardinality := len(values.Values) // TODO(shantanu) make these values configurable - if cardinality < 5 || cardinality > 50 { + if !slices.Contains(staticLabels, label) && + (cardinality < 1 || cardinality > 50) || + containsAllIDTypes(values.Values) { continue } detectedLabels = append(detectedLabels, &logproto.DetectedLabel{Label: label, Cardinality: uint64(cardinality)}) @@ -947,3 +954,18 @@ func (q *SingleTenantQuerier) DetectedLabels(ctx context.Context, req *logproto. DetectedLabels: detectedLabels, }, nil } + +// containsAllIDTypes filters out all UUID, GUID and numeric types. Returns false if even one value is not of the type +func containsAllIDTypes(values []string) bool { + pattern := `^(?:(?:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})|(?:(?:\{)?[0-9a-fA-F]{8}(?:-?[0-9a-fA-F]{4}){3}-?[0-9a-fA-F]{12}(?:\})?)|(\d+))$` + + re := regexp.MustCompile(pattern) + + for _, v := range values { + if !re.MatchString(v) { + return false + } + } + + return true +}