@@ -23,6 +23,13 @@ import (
23
23
"github.com/prometheus/client_golang/prometheus"
24
24
)
25
25
26
+ var (
27
+ settingUnits = []string {
28
+ "ms" , "s" , "min" , "h" , "d" ,
29
+ "B" , "kB" , "MB" , "GB" , "TB" ,
30
+ }
31
+ )
32
+
26
33
// Query the pg_settings view containing runtime variables
27
34
func querySettings (ch chan <- prometheus.Metric , server * Server ) error {
28
35
level .Debug (logger ).Log ("msg" , "Querying pg_setting view" , "server" , server )
@@ -93,9 +100,24 @@ func (s *pgSetting) metric(labels prometheus.Labels) prometheus.Metric {
93
100
return prometheus .MustNewConstMetric (desc , prometheus .GaugeValue , val )
94
101
}
95
102
103
+ // Removes units from any of the setting values.
104
+ // This is mostly because of a irregularity regarding AWS RDS Aurora
105
+ // https://github.com/prometheus-community/postgres_exporter/issues/619
106
+ func (s * pgSetting ) sanitizeValue () {
107
+ for _ , unit := range settingUnits {
108
+ if strings .HasSuffix (s .setting , unit ) {
109
+ endPos := len (s .setting ) - len (unit ) - 1
110
+ s .setting = s .setting [:endPos ]
111
+ return
112
+ }
113
+ }
114
+ }
115
+
96
116
// TODO: fix linter override
97
117
// nolint: nakedret
98
118
func (s * pgSetting ) normaliseUnit () (val float64 , unit string , err error ) {
119
+ s .sanitizeValue ()
120
+
99
121
val , err = strconv .ParseFloat (s .setting , 64 )
100
122
if err != nil {
101
123
return val , unit , fmt .Errorf ("Error converting setting %q value %q to float: %s" , s .name , s .setting , err )
0 commit comments