From 1fed6148c9d8c4e4981810244963f97d72844467 Mon Sep 17 00:00:00 2001 From: Bastian Krol Date: Thu, 19 Sep 2024 15:18:43 +0200 Subject: [PATCH] chore(self-monitoring): let otel.go handle shutdown functions --- cmd/main.go | 9 +++--- helm-chart/dash0-operator/README.md | 2 +- images/configreloader/src/configreloader.go | 4 +-- .../src/filelogoffsetsynch.go | 4 +-- images/pkg/common/otel.go | 29 ++++++++++--------- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index a539e48..7997f4a 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -92,9 +92,8 @@ var ( deploymentSelfReference *appsv1.Deployment envVars environmentVariables - metricNamePrefix = fmt.Sprintf("%s.", meterName) - meter otelmetric.Meter - otelShutdownFunctions []func(ctx context.Context) error + metricNamePrefix = fmt.Sprintf("%s.", meterName) + meter otelmetric.Meter ) func init() { @@ -205,7 +204,7 @@ func main() { os.Exit(1) } - meter, otelShutdownFunctions = + meter = common.InitOTelSdk( ctx, meterName, @@ -335,7 +334,7 @@ func startOperatorManager( } // ^mgr.Start(...) blocks. It only returns when the manager is terminating. - common.ShutDownOTelSdk(ctx, otelShutdownFunctions) + common.ShutDownOTelSdk(ctx) return nil } diff --git a/helm-chart/dash0-operator/README.md b/helm-chart/dash0-operator/README.md index 7f862de..ff4a732 100644 --- a/helm-chart/dash0-operator/README.md +++ b/helm-chart/dash0-operator/README.md @@ -347,7 +347,7 @@ provided explicitly. Note that by default, Kubernetes secrets are stored _unencrypted_, and anyone with API access to the Kubernetes cluster will be able to read the value. Additional steps are required to make sure secret values are encrypted, if that is desired. -See https://kubernetes.io/docs/concepts/configur**ation/secret/ for more information on Kubernetes secrets. +See https://kubernetes.io/docs/concepts/configuration/secret/ for more information on Kubernetes secrets. ### Dash0 Dataset Configuration diff --git a/images/configreloader/src/configreloader.go b/images/configreloader/src/configreloader.go index c55f52c..c7db369 100644 --- a/images/configreloader/src/configreloader.go +++ b/images/configreloader/src/configreloader.go @@ -71,7 +71,7 @@ func main() { done := make(chan bool, 1) signal.Notify(shutdown, syscall.SIGTERM) - meter, selfMonitoringShutdownFunctions := common.InitOTelSdk(ctx, meterName, nil) + meter := common.InitOTelSdk(ctx, meterName, nil) initializeSelfMonitoringMetrics(meter) go func() { @@ -96,7 +96,7 @@ func main() { <-done - common.ShutDownOTelSdk(ctx, selfMonitoringShutdownFunctions) + common.ShutDownOTelSdk(ctx) } func initializeHashes(configurationFilePaths []string) error { diff --git a/images/filelogoffsetsynch/src/filelogoffsetsynch.go b/images/filelogoffsetsynch/src/filelogoffsetsynch.go index 44efeed..783b3e4 100644 --- a/images/filelogoffsetsynch/src/filelogoffsetsynch.go +++ b/images/filelogoffsetsynch/src/filelogoffsetsynch.go @@ -108,7 +108,7 @@ func main() { log.Fatalf("Cannot create the Kube API client: %v\n", err) } - meter, selfMonitoringShutdownFunctions := common.InitOTelSdk(ctx, meterName, nil) + meter := common.InitOTelSdk(ctx, meterName, nil) initializeSelfMonitoringMetrics(meter) // creates the clientset @@ -138,7 +138,7 @@ func main() { } } - common.ShutDownOTelSdk(ctx, selfMonitoringShutdownFunctions) + common.ShutDownOTelSdk(ctx) } func initOffsets(ctx context.Context, settings *Settings) (int, error) { diff --git a/images/pkg/common/otel.go b/images/pkg/common/otel.go index 36b2f64..0e15f03 100644 --- a/images/pkg/common/otel.go +++ b/images/pkg/common/otel.go @@ -21,14 +21,15 @@ import ( ) var ( - meterProvider otelmetric.MeterProvider + meterProvider otelmetric.MeterProvider + shutdownFunctions []func(ctx context.Context) error ) func InitOTelSdk( ctx context.Context, meterName string, extraResourceAttributes map[string]string, -) (otelmetric.Meter, []func(ctx context.Context) error) { +) otelmetric.Meter { podUid, isSet := os.LookupEnv("K8S_POD_UID") if !isSet { log.Println("Env var 'K8S_POD_UID' is not set") @@ -42,8 +43,6 @@ func InitOTelSdk( daemonSetUid := os.Getenv("K8S_DAEMONSET_UID") deploymentUid := os.Getenv("K8S_DEPLOYMENT_UID") - var doMeterShutdown func(ctx context.Context) error - if _, isSet = os.LookupEnv("OTEL_EXPORTER_OTLP_ENDPOINT"); isSet { var metricExporter sdkmetric.Exporter @@ -100,26 +99,28 @@ func InitOTelSdk( ) meterProvider = sdkMeterProvider - doMeterShutdown = sdkMeterProvider.Shutdown + shutdownFunctions = []func(ctx context.Context) error{ + sdkMeterProvider.Shutdown, + } } else { meterProvider = metricnoop.MeterProvider{} - doMeterShutdown = func(ctx context.Context) error { return nil } } otel.SetMeterProvider(meterProvider) - return meterProvider.Meter(meterName), []func(ctx context.Context) error{ - doMeterShutdown, - } + return meterProvider.Meter(meterName) } -func ShutDownOTelSdk(ctx context.Context, shutdownFunctions []func(ctx context.Context) error) { - var err error +func ShutDownOTelSdk(ctx context.Context) { + if len(shutdownFunctions) == 0 { + return + } + + timeoutCtx, cancelFun := context.WithTimeout(ctx, time.Second) + defer cancelFun() for _, shutdownFunction := range shutdownFunctions { - timeoutCtx, cancelFun := context.WithTimeout(ctx, time.Second) - if err = shutdownFunction(timeoutCtx); err != nil { + if err := shutdownFunction(timeoutCtx); err != nil { log.Printf("Failed to shutdown self monitoring, telemetry may have been lost:%v\n", err) } - cancelFun() } }