From c75b1e7ab9424076e8254861ebbe4dd174dd1fdc Mon Sep 17 00:00:00 2001 From: Nat Welch Date: Tue, 1 Sep 2020 16:02:40 -0400 Subject: [PATCH] Fix dropping all labels (#943) * simplify filtering and logging * oh I'm dumb --- pkg/observability/resource.go | 40 +++++++++++++++++--------------- pkg/observability/stackdriver.go | 2 +- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/pkg/observability/resource.go b/pkg/observability/resource.go index 19d6794ba..3c2ad78a9 100644 --- a/pkg/observability/resource.go +++ b/pkg/observability/resource.go @@ -27,14 +27,6 @@ import ( var ( _ monitoredresource.Interface = (*stackdriverMonitoredResource)(nil) - - // The labels each resource type requires. - requiredLabels = map[string]map[string]bool{ - // https://cloud.google.com/monitoring/api/resources#tag_generic_task - "generic_task": {"project_id": true, "location": true, "namespace": true, "job": true, "task_id": true}, - // https://cloud.google.com/monitoring/api/resources#tag_gke_container - "gke_container": {"project_id": true, "cluster_name": true, "namespace_id": true, "instance_id": true, "pod_id": true, "container_name": true, "zone": true}, - } ) type stackdriverMonitoredResource struct { @@ -107,23 +99,33 @@ func NewStackdriverMonitoredResource(ctx context.Context, c *StackdriverConfig) labels["namespace"] = c.Namespace - if _, ok := requiredLabels[resource]; !ok { - logger.Warnw("unknown resource type", "resource", resource, "labels", labels) - } else { - // Delete unused labels to not flood stackdriver. - for k := range labels { - if _, ok := requiredLabels[k]; !ok { - delete(labels, k) - } - } - } + filteredLabels := removeUnusedLabels(resource, labels) + logger.Debugw("resource type defined", "resource", resource, "labels", labels, "filteredLabels", filteredLabels) return &stackdriverMonitoredResource{ resource: resource, - labels: labels, + labels: filteredLabels, } } func (s *stackdriverMonitoredResource) MonitoredResource() (string, map[string]string) { return s.resource, s.labels } + +// removeUnusedLabels deletes unused labels to not flood stackdriver. +func removeUnusedLabels(resource string, in map[string]string) map[string]string { + // The labels each resource type requires. + requiredLabels := map[string]map[string]bool{ + // https://cloud.google.com/monitoring/api/resources#tag_generic_task + "generic_task": {"project_id": true, "location": true, "namespace": true, "job": true, "task_id": true}, + } + + ret := map[string]string{} + for k, v := range in { + if requiredLabels[resource][k] { + ret[k] = v + } + } + + return ret +} diff --git a/pkg/observability/stackdriver.go b/pkg/observability/stackdriver.go index 1d9ac26c2..9ba607a11 100644 --- a/pkg/observability/stackdriver.go +++ b/pkg/observability/stackdriver.go @@ -52,7 +52,7 @@ func NewStackdriver(ctx context.Context, config *StackdriverConfig) (Exporter, e ReportingInterval: time.Minute, // stackdriver export interval minimum MonitoredResource: monitoredResource, OnError: func(err error) { - logger.Errorw("failed to export metric", "error", err) + logger.Errorw("failed to export metric", "error", err, "resource", monitoredResource) }, })