diff --git a/receiver/k8sclusterreceiver/receiver.go b/receiver/k8sclusterreceiver/receiver.go index d06cb6a9c513c..71a135acc1fda 100644 --- a/receiver/k8sclusterreceiver/receiver.go +++ b/receiver/k8sclusterreceiver/receiver.go @@ -45,21 +45,22 @@ type getExporters interface { } func (kr *kubernetesReceiver) startReceiver(ctx context.Context, host component.Host) error { - if err := kr.resourceWatcher.initialize(); err != nil { - return err - } - ge, ok := host.(getExporters) if !ok { return errors.New("unable to get exporters") } exporters := ge.GetExporters() + // Setup metadata exporters before initializing watchers to avoid concurrent access if err := kr.resourceWatcher.setupMetadataExporters( exporters[pipeline.SignalMetrics], kr.config.MetadataExporters); err != nil { return err } + if err := kr.resourceWatcher.initialize(); err != nil { + return err + } + go func() { kr.settings.Logger.Info("Starting shared informers and wait for initial cache sync.") for _, informer := range kr.resourceWatcher.informerFactories {