Skip to content

Commit 7861363

Browse files
committed
Add --strip-settings-suffix flag for prometheus-community#619
Adds --strip-settings-suffix flag to make the fixes for AWS Aurora in prometheus-community#619 opt in for users. It should be safe for all users, but this code should also be unnecessary if AWS fixes their bug. Signed-off-by: Joe Adams <[email protected]>
1 parent 7e02b9b commit 7861363

File tree

4 files changed

+39
-2
lines changed

4 files changed

+39
-2
lines changed

README.md

+3
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ This will build the docker image as `prometheuscommunity/postgres_exporter:${bra
8282
* `include-databases`
8383
A list of databases to only include when autoDiscoverDatabases is enabled.
8484

85+
* `strip-settings-suffix`
86+
Whether to strip unit siffixes (i.e. KB) from pg_settings metrics.
87+
8588
* `log.level`
8689
Set logging level: one of `debug`, `info`, `warn`, `error`.
8790

cmd/postgres_exporter/main.go

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ var (
4343
excludeDatabases = kingpin.Flag("exclude-databases", "A list of databases to remove when autoDiscoverDatabases is enabled").Default("").Envar("PG_EXPORTER_EXCLUDE_DATABASES").String()
4444
includeDatabases = kingpin.Flag("include-databases", "A list of databases to include when autoDiscoverDatabases is enabled").Default("").Envar("PG_EXPORTER_INCLUDE_DATABASES").String()
4545
metricPrefix = kingpin.Flag("metric-prefix", "A metric prefix can be used to have non-default (not \"pg\") prefixes for each of the metrics").Default("pg").Envar("PG_EXPORTER_METRIC_PREFIX").String()
46+
stripSettingsSuffix = kingpin.Flag("strip-settings-suffix", "Whether to strip unit siffixes (i.e. KB) from pg_settings metrics.").Default("false").Envar("PG_EXPORTER_STRIP_METRICS_SUFFIX").Bool()
4647
logger = log.NewNopLogger()
4748
)
4849

cmd/postgres_exporter/pg_setting.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ func querySettings(ch chan<- prometheus.Metric, server *Server) error {
5353
return fmt.Errorf("Error retrieving rows on %q: %s %v", server, namespace, err)
5454
}
5555

56+
if *stripSettingsSuffix {
57+
s.stripUnitSuffix()
58+
}
59+
5660
ch <- s.metric(server.labels)
5761
}
5862

@@ -103,7 +107,7 @@ func (s *pgSetting) metric(labels prometheus.Labels) prometheus.Metric {
103107
// Removes units from any of the setting values.
104108
// This is mostly because of a irregularity regarding AWS RDS Aurora
105109
// https://github.com/prometheus-community/postgres_exporter/issues/619
106-
func (s *pgSetting) sanitizeValue() {
110+
func (s *pgSetting) stripUnitSuffix() {
107111
for _, unit := range settingUnits {
108112
if strings.HasSuffix(s.setting, unit) {
109113
endPos := len(s.setting) - len(unit) - 1
@@ -116,7 +120,6 @@ func (s *pgSetting) sanitizeValue() {
116120
// TODO: fix linter override
117121
// nolint: nakedret
118122
func (s *pgSetting) normaliseUnit() (val float64, unit string, err error) {
119-
s.sanitizeValue()
120123

121124
val, err = strconv.ParseFloat(s.setting, 64)
122125
if err != nil {

cmd/postgres_exporter/pg_setting_test.go

+30
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package main
1818

1919
import (
20+
"testing"
21+
2022
"github.com/prometheus/client_golang/prometheus"
2123
dto "github.com/prometheus/client_model/go"
2224
. "gopkg.in/check.v1"
@@ -268,3 +270,31 @@ type fixture struct {
268270
d string
269271
v float64
270272
}
273+
274+
func Test_pgSetting_sanitizeValue(t *testing.T) {
275+
tests := []struct {
276+
name string
277+
setting *pgSetting
278+
want string
279+
}{
280+
{
281+
name: "RDS Shared Buffers",
282+
setting: &pgSetting{
283+
name: "shared_buffers",
284+
setting: "88413056kB",
285+
unit: "8kB",
286+
shortDesc: "Sets the number of shared memory buffers used by the server.",
287+
vartype: "integer",
288+
},
289+
want: "88413056",
290+
},
291+
}
292+
for _, tt := range tests {
293+
t.Run(tt.name, func(t *testing.T) {
294+
tt.setting.stripUnitSuffix()
295+
if got := tt.setting.setting; got != tt.want {
296+
t.Errorf("sanitizeValue() = %v, want %v", got, tt.want)
297+
}
298+
})
299+
}
300+
}

0 commit comments

Comments
 (0)