From 4caace7de8789f91dc3ddcdbcd328db002c44abb Mon Sep 17 00:00:00 2001 From: aglipska <107988284+aglipska@users.noreply.github.com> Date: Wed, 27 Mar 2024 19:22:46 +0100 Subject: [PATCH] Add MapMonitoredResource field to Log config. (#826) * Add MapMonitoredResource field to Log config. * Update exporter/collector/config.go Co-authored-by: David Ashpole Signed-off-by: aglipska <107988284+aglipska@users.noreply.github.com> * Fix lint and test problems. --------- Signed-off-by: aglipska <107988284+aglipska@users.noreply.github.com> Co-authored-by: David Ashpole --- exporter/collector/config.go | 6 ++++++ exporter/collector/integrationtest/config/config_test.go | 1 + exporter/collector/logs.go | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/exporter/collector/config.go b/exporter/collector/config.go index 5abff16a6..247e59a97 100644 --- a/exporter/collector/config.go +++ b/exporter/collector/config.go @@ -168,6 +168,11 @@ type ResourceFilter struct { } type LogConfig struct { + // MapMonitoredResource is not exposed as an option in the configuration, but + // can be used by other exporters to extend the functionality of this + // exporter. It allows overriding the function used to map otel resource to + // monitored resource. + MapMonitoredResource func(pcommon.Resource) *monitoredrespb.MonitoredResource // DefaultLogName sets the fallback log name to use when one isn't explicitly set // for a log entry. If unset, logs without a log name will raise an error. DefaultLogName string `mapstructure:"default_log_name"` @@ -194,6 +199,7 @@ func DefaultConfig() Config { UserAgent: "opentelemetry-collector-contrib {{version}}", LogConfig: LogConfig{ ServiceResourceLabels: true, + MapMonitoredResource: defaultResourceToLoggingMonitoredResource, }, MetricConfig: MetricConfig{ KnownDomains: domains, diff --git a/exporter/collector/integrationtest/config/config_test.go b/exporter/collector/integrationtest/config/config_test.go index 1e497bfb0..7043af7bc 100644 --- a/exporter/collector/integrationtest/config/config_test.go +++ b/exporter/collector/integrationtest/config/config_test.go @@ -89,6 +89,7 @@ func TestLoadConfig(t *testing.T) { func sanitize(cfg *testExporterConfig) *testExporterConfig { cfg.Config.MetricConfig.MapMonitoredResource = nil cfg.Config.MetricConfig.GetMetricName = nil + cfg.Config.LogConfig.MapMonitoredResource = nil return cfg } diff --git a/exporter/collector/logs.go b/exporter/collector/logs.go index d0982c873..45de08556 100644 --- a/exporter/collector/logs.go +++ b/exporter/collector/logs.go @@ -278,7 +278,7 @@ func (l logMapper) createEntries(ld plog.Logs) (map[string][]*logpb.LogEntry, er entries := make(map[string][]*logpb.LogEntry) for i := 0; i < ld.ResourceLogs().Len(); i++ { rl := ld.ResourceLogs().At(i) - mr := defaultResourceToLoggingMonitoredResource(rl.Resource()) + mr := l.cfg.LogConfig.MapMonitoredResource(rl.Resource()) extraResourceLabels := attributesToUnsanitizedLabels(filterAttributes(rl.Resource().Attributes(), l.cfg.LogConfig.ServiceResourceLabels, l.cfg.LogConfig.ResourceFilters)) projectID := l.cfg.ProjectID // override project ID with gcp.project.id, if present