From a84d8db90b91ccee3dd9fe5d524d6763aee7f161 Mon Sep 17 00:00:00 2001 From: Anthony Landreth Date: Thu, 26 Sep 2024 15:56:58 -0400 Subject: [PATCH 1/2] Prepares exporter command for pg17 --- .../controller/postgrescluster/pgmonitor.go | 23 ++++++++++++++++--- internal/pgmonitor/exporter.go | 3 ++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/internal/controller/postgrescluster/pgmonitor.go b/internal/controller/postgrescluster/pgmonitor.go index a5ace10966..e023ab1e32 100644 --- a/internal/controller/postgrescluster/pgmonitor.go +++ b/internal/controller/postgrescluster/pgmonitor.go @@ -259,13 +259,32 @@ func addPGMonitorExporterToInstancePodSpec( withBuiltInCollectors := !strings.EqualFold(cluster.Annotations[naming.PostgresExporterCollectorsAnnotation], "None") + var cmd []string + // PG 17 does not include some of the columns found in stat_bgwriter with older PGs. + // Selectively turn off the collector for stat_bgwriter in PG 17, unless the user + // requests all collectors to be turned off. + switch { + case cluster.Spec.PostgresVersion == 17 && withBuiltInCollectors && certSecret == nil: + cmd = pgmonitor.ExporterStartCommand(withBuiltInCollectors, + pgmonitor.ExporterDeactivateStatBGWriterFlag) + case cluster.Spec.PostgresVersion == 17 && withBuiltInCollectors && certSecret != nil: + cmd = pgmonitor.ExporterStartCommand(withBuiltInCollectors, + pgmonitor.ExporterWebConfigFileFlag, + pgmonitor.ExporterDeactivateStatBGWriterFlag) + case cluster.Spec.PostgresVersion != 17 && certSecret != nil: + cmd = pgmonitor.ExporterStartCommand(withBuiltInCollectors, + pgmonitor.ExporterWebConfigFileFlag) + default: + cmd = pgmonitor.ExporterStartCommand(withBuiltInCollectors) + } + securityContext := initialize.RestrictedSecurityContext() exporterContainer := corev1.Container{ Name: naming.ContainerPGMonitorExporter, Image: config.PGExporterContainerImage(cluster), ImagePullPolicy: cluster.Spec.ImagePullPolicy, Resources: cluster.Spec.Monitoring.PGMonitor.Exporter.Resources, - Command: pgmonitor.ExporterStartCommand(withBuiltInCollectors), + Command: cmd, Env: []corev1.EnvVar{ {Name: "DATA_SOURCE_URI", Value: fmt.Sprintf("%s:%d/%s", pgmonitor.ExporterHost, *cluster.Spec.Port, pgmonitor.ExporterDB)}, {Name: "DATA_SOURCE_USER", Value: pgmonitor.MonitoringUser}, @@ -357,8 +376,6 @@ func addPGMonitorExporterToInstancePodSpec( }} exporterContainer.VolumeMounts = append(exporterContainer.VolumeMounts, mounts...) - exporterContainer.Command = pgmonitor.ExporterStartCommand( - withBuiltInCollectors, pgmonitor.ExporterWebConfigFileFlag) } template.Spec.Containers = append(template.Spec.Containers, exporterContainer) diff --git a/internal/pgmonitor/exporter.go b/internal/pgmonitor/exporter.go index 19a78a49eb..9d7a1fc3c6 100644 --- a/internal/pgmonitor/exporter.go +++ b/internal/pgmonitor/exporter.go @@ -32,7 +32,8 @@ const ( // postgres_exporter command flags var ( - ExporterWebConfigFileFlag = "--web.config.file=/web-config/web-config.yml" + ExporterWebConfigFileFlag = "--web.config.file=/web-config/web-config.yml" + ExporterDeactivateStatBGWriterFlag = "--no-collector.stat_bgwriter" ) // Defaults for certain values used in queries.yml From a60438cb01881383c3786246808cbb2154708d02 Mon Sep 17 00:00:00 2001 From: Anthony Landreth Date: Thu, 26 Sep 2024 16:50:15 -0400 Subject: [PATCH 2/2] Clarifies the version sensitivity of the case statement --- internal/controller/postgrescluster/pgmonitor.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/controller/postgrescluster/pgmonitor.go b/internal/controller/postgrescluster/pgmonitor.go index e023ab1e32..e1b5186cb4 100644 --- a/internal/controller/postgrescluster/pgmonitor.go +++ b/internal/controller/postgrescluster/pgmonitor.go @@ -271,7 +271,9 @@ func addPGMonitorExporterToInstancePodSpec( cmd = pgmonitor.ExporterStartCommand(withBuiltInCollectors, pgmonitor.ExporterWebConfigFileFlag, pgmonitor.ExporterDeactivateStatBGWriterFlag) - case cluster.Spec.PostgresVersion != 17 && certSecret != nil: + // If you're turning off all built-in collectors, we don't care which + // version of PG you're using. + case certSecret != nil: cmd = pgmonitor.ExporterStartCommand(withBuiltInCollectors, pgmonitor.ExporterWebConfigFileFlag) default: