Skip to content

Commit 6624157

Browse files
committed
Update prometheus/common
1 parent e0a5117 commit 6624157

32 files changed

+231
-246
lines changed

.github/workflows/golangci-lint.yml

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,23 @@ on:
1414

1515
jobs:
1616
golangci:
17+
permissions:
18+
contents: read # for actions/checkout to fetch code
19+
pull-requests: read # for golangci/golangci-lint-action to fetch pull requests
1720
name: lint
1821
runs-on: ubuntu-latest
1922
steps:
2023
- name: Checkout repository
21-
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
22-
- name: install Go
23-
uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0
24+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
25+
- name: Install Go
26+
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
2427
with:
25-
go-version: 1.21.x
28+
go-version: 1.23.x
2629
- name: Install snmp_exporter/generator dependencies
2730
run: sudo apt-get update && sudo apt-get -y install libsnmp-dev
2831
if: github.repository == 'prometheus/snmp_exporter'
2932
- name: Lint
30-
uses: golangci/golangci-lint-action@3a919529898de77ec3da873e3063ca4b10e7f5cc # v3.7.0
33+
uses: golangci/golangci-lint-action@971e284b6050e8a5849b72094c50ab08da042db8 # v6.1.1
3134
with:
32-
version: v1.54.2
35+
args: --verbose
36+
version: v1.62.0

cmd/postgres_exporter/datasource.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"regexp"
2121
"strings"
2222

23-
"github.com/go-kit/log/level"
2423
"github.com/prometheus/client_golang/prometheus"
2524
)
2625

@@ -39,19 +38,19 @@ func (e *Exporter) discoverDatabaseDSNs() []string {
3938
var err error
4039
dsnURI, err = url.Parse(dsn)
4140
if err != nil {
42-
level.Error(e.logger).Log("msg", "Unable to parse DSN as URI", "dsn", loggableDSN(dsn), "err", err)
41+
e.logger.Error("Unable to parse DSN as URI", "dsn", loggableDSN(dsn), "err", err)
4342
continue
4443
}
4544
} else if connstringRe.MatchString(dsn) {
4645
dsnConnstring = dsn
4746
} else {
48-
level.Error(e.logger).Log("msg", "Unable to parse DSN as either URI or connstring", "dsn", loggableDSN(dsn))
47+
e.logger.Error("Unable to parse DSN as either URI or connstring", "dsn", loggableDSN(dsn))
4948
continue
5049
}
5150

5251
server, err := e.servers.GetServer(dsn)
5352
if err != nil {
54-
level.Error(e.logger).Log("msg", "Error opening connection to database", "dsn", loggableDSN(dsn), "err", err)
53+
e.logger.Error("Error opening connection to database", "dsn", loggableDSN(dsn), "err", err)
5554
continue
5655
}
5756
dsns[dsn] = struct{}{}
@@ -61,7 +60,7 @@ func (e *Exporter) discoverDatabaseDSNs() []string {
6160

6261
databaseNames, err := queryDatabases(server)
6362
if err != nil {
64-
level.Error(e.logger).Log("msg", "Error querying databases", "dsn", loggableDSN(dsn), "err", err)
63+
e.logger.Error("Error querying databases", "dsn", loggableDSN(dsn), "err", err)
6564
continue
6665
}
6766
for _, databaseName := range databaseNames {
@@ -109,7 +108,7 @@ func (e *Exporter) scrapeDSN(ch chan<- prometheus.Metric, dsn string) error {
109108

110109
// Check if map versions need to be updated
111110
if err := e.checkMapVersions(ch, server); err != nil {
112-
level.Warn(e.logger).Log("msg", "Proceeding with outdated query maps, as the Postgres version could not be determined", "err", err)
111+
e.logger.Warn("Proceeding with outdated query maps, as the Postgres version could not be determined", "err", err)
113112
}
114113

115114
return server.Scrape(ch, e.disableSettingsMetrics)

cmd/postgres_exporter/main.go

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,13 @@ import (
2020
"strings"
2121

2222
"github.com/alecthomas/kingpin/v2"
23-
"github.com/go-kit/log"
24-
"github.com/go-kit/log/level"
2523
"github.com/prometheus-community/postgres_exporter/collector"
2624
"github.com/prometheus-community/postgres_exporter/config"
2725
"github.com/prometheus/client_golang/prometheus"
2826
cversion "github.com/prometheus/client_golang/prometheus/collectors/version"
2927
"github.com/prometheus/client_golang/prometheus/promhttp"
30-
"github.com/prometheus/common/promlog"
31-
"github.com/prometheus/common/promlog/flag"
28+
"github.com/prometheus/common/promslog"
29+
"github.com/prometheus/common/promslog/flag"
3230
"github.com/prometheus/common/version"
3331
"github.com/prometheus/exporter-toolkit/web"
3432
"github.com/prometheus/exporter-toolkit/web/kingpinflag"
@@ -52,7 +50,7 @@ var (
5250
includeDatabases = kingpin.Flag("include-databases", "A list of databases to include when autoDiscoverDatabases is enabled (DEPRECATED)").Default("").Envar("PG_EXPORTER_INCLUDE_DATABASES").String()
5351

5452
// rootFallbackLogger is used when we cannot use the regular logger in this fork. Under normal operations, there shouldn't be anything logged using this.
55-
rootFallbackLogger = log.NewLogfmtLogger(os.Stderr)
53+
rootFallbackLogger = promslog.New(&promslog.Config{})
5654
)
5755

5856
// Metric name parts.
@@ -72,7 +70,7 @@ const (
7270

7371
func main() {
7472
kingpin.Version(version.Print(exporterName))
75-
promlogConfig := &promlog.Config{}
73+
promlogConfig := &promslog.Config{}
7674
flag.AddFlags(kingpin.CommandLine, promlogConfig)
7775
kingpin.HelpFlag.Short('h')
7876
kingpin.Parse()
@@ -84,28 +82,28 @@ func main() {
8482

8583
if err := c.ReloadConfig(*configFile, rootFallbackLogger); err != nil {
8684
// This is not fatal, but it means that auth must be provided for every dsn.
87-
level.Warn(rootFallbackLogger).Log("msg", "Error loading config", "err", err)
85+
rootFallbackLogger.Warn("Error loading config", "err", err)
8886
}
8987

9088
dsns, err := getDataSources()
9189
if err != nil {
92-
level.Error(rootFallbackLogger).Log("msg", "Failed reading data sources", "err", err.Error())
90+
rootFallbackLogger.Error("Failed reading data sources", "err", err.Error())
9391
os.Exit(1)
9492
}
9593

9694
excludedDatabases := strings.Split(*excludeDatabases, ",")
97-
level.Info(rootFallbackLogger).Log("msg", "Excluded databases", "databases", fmt.Sprintf("%v", excludedDatabases))
95+
rootFallbackLogger.Info("Excluded databases", "databases", fmt.Sprintf("%v", excludedDatabases))
9896

9997
if *queriesPath != "" {
100-
level.Warn(rootFallbackLogger).Log("msg", "The extended queries.yaml config is DEPRECATED", "file", *queriesPath)
98+
rootFallbackLogger.Warn("The extended queries.yaml config is DEPRECATED", "file", *queriesPath)
10199
}
102100

103101
if *autoDiscoverDatabases || *excludeDatabases != "" || *includeDatabases != "" {
104-
level.Warn(rootFallbackLogger).Log("msg", "Scraping additional databases via auto discovery is DEPRECATED")
102+
rootFallbackLogger.Warn("Scraping additional databases via auto discovery is DEPRECATED")
105103
}
106104

107105
if *constantLabelsList != "" {
108-
level.Warn(rootFallbackLogger).Log("msg", "Constant labels on all metrics is DEPRECATED")
106+
rootFallbackLogger.Warn("Constant labels on all metrics is DEPRECATED")
109107
}
110108

111109
opts := []ExporterOpt{
@@ -140,7 +138,7 @@ func main() {
140138
[]string{},
141139
)
142140
if err != nil {
143-
level.Warn(rootFallbackLogger).Log("msg", "Failed to create PostgresCollector", "err", err.Error())
141+
rootFallbackLogger.Warn("Failed to create PostgresCollector", "err", err.Error())
144142
} else {
145143
defer pe.Close()
146144
prometheus.MustRegister(pe)
@@ -162,7 +160,7 @@ func main() {
162160
}
163161
landingPage, err := web.NewLandingPage(landingConfig)
164162
if err != nil {
165-
level.Error(rootFallbackLogger).Log("err", err)
163+
rootFallbackLogger.Error("Error initializing landing page", "err", err)
166164
os.Exit(1)
167165
}
168166
http.Handle("/", landingPage)
@@ -172,7 +170,7 @@ func main() {
172170

173171
srv := &http.Server{}
174172
if err := web.ListenAndServe(srv, webConfig, rootFallbackLogger); err != nil {
175-
level.Error(rootFallbackLogger).Log("msg", "Error running HTTP server", "err", err)
173+
rootFallbackLogger.Error("Error running HTTP server", "err", err)
176174
os.Exit(1)
177175
}
178176
}

cmd/postgres_exporter/namespace.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"time"
2121

2222
"github.com/blang/semver/v4"
23-
"github.com/go-kit/log/level"
2423
"github.com/lib/pq"
2524
"github.com/prometheus/client_golang/prometheus"
2625
)
@@ -190,10 +189,10 @@ func queryNamespaceMappings(ch chan<- prometheus.Metric, server *Server) map[str
190189
scrapeStart := time.Now()
191190

192191
for namespace, mapping := range server.metricMap {
193-
level.Debug(server.logger).Log("msg", "Querying namespace", "namespace", namespace)
192+
server.logger.Debug("Querying namespace", "namespace", namespace)
194193

195194
if mapping.master && !server.master {
196-
level.Debug(server.logger).Log("msg", "Query skipped...")
195+
server.logger.Debug("Query skipped...")
197196
continue
198197
}
199198

@@ -202,7 +201,7 @@ func queryNamespaceMappings(ch chan<- prometheus.Metric, server *Server) map[str
202201
serVersion, _ := semver.Parse(server.lastMapVersion.String())
203202
runServerRange, _ := semver.ParseRange(server.runonserver)
204203
if !runServerRange(serVersion) {
205-
level.Debug(server.logger).Log("msg", "Query skipped for this database version", "version", server.lastMapVersion.String(), "target_version", server.runonserver)
204+
server.logger.Debug("Query skipped for this database version", "version", server.lastMapVersion.String(), "target_version", server.runonserver)
206205
continue
207206
}
208207
}
@@ -233,12 +232,12 @@ func queryNamespaceMappings(ch chan<- prometheus.Metric, server *Server) map[str
233232
// Serious error - a namespace disappeared
234233
if err != nil {
235234
namespaceErrors[namespace] = err
236-
level.Info(server.logger).Log("err", err)
235+
server.logger.Info("error encountered querying namespace metrics", "err", err)
237236
}
238237
// Non-serious errors - likely version or parsing problems.
239238
if len(nonFatalErrors) > 0 {
240239
for _, err := range nonFatalErrors {
241-
level.Info(server.logger).Log("err", err)
240+
server.logger.Info("nonfatal error encountered querying namespace metrics", "err", err)
242241
}
243242
}
244243

cmd/postgres_exporter/pg_setting.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919
"strconv"
2020
"strings"
2121

22-
"github.com/go-kit/log/level"
2322
"github.com/prometheus/client_golang/prometheus"
2423
)
2524

@@ -32,7 +31,7 @@ var (
3231

3332
// Query the pg_settings view containing runtime variables
3433
func querySettings(ch chan<- prometheus.Metric, server *Server) error {
35-
level.Debug(server.logger).Log("msg", "Querying pg_setting view", "server", server)
34+
server.logger.Debug("Querying pg_setting view", "server", server)
3635

3736
// pg_settings docs: https://www.postgresql.org/docs/current/static/view-pg-settings.html
3837
//

cmd/postgres_exporter/postgres_exporter.go

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,16 @@ import (
1818
"database/sql"
1919
"errors"
2020
"fmt"
21+
"log/slog"
2122
"math"
2223
"os"
2324
"regexp"
2425
"strings"
2526
"time"
2627

2728
"github.com/blang/semver/v4"
28-
"github.com/go-kit/log"
29-
"github.com/go-kit/log/level"
3029
"github.com/prometheus/client_golang/prometheus"
30+
"github.com/prometheus/common/promslog"
3131
)
3232

3333
// ColumnUsage should be one of several enum values which describe how a
@@ -262,7 +262,7 @@ var builtinMetricMaps = map[string]intermediateMetricMap{
262262
}
263263

264264
// Turn the MetricMap column mapping into a prometheus descriptor mapping.
265-
func makeDescMap(pgVersion semver.Version, serverLabels prometheus.Labels, metricMaps map[string]intermediateMetricMap, logger log.Logger, metricPrefix string) map[string]MetricMapNamespace {
265+
func makeDescMap(pgVersion semver.Version, serverLabels prometheus.Labels, metricMaps map[string]intermediateMetricMap, logger *slog.Logger, metricPrefix string) map[string]MetricMapNamespace {
266266
var metricMap = make(map[string]MetricMapNamespace)
267267

268268
for namespace, intermediateMappings := range metricMaps {
@@ -285,7 +285,7 @@ func makeDescMap(pgVersion semver.Version, serverLabels prometheus.Labels, metri
285285
if !columnMapping.supportedVersions(pgVersion) {
286286
// It's very useful to be able to see what columns are being
287287
// rejected.
288-
level.Debug(logger).Log("msg", "Column is being forced to discard due to version incompatibility", "column", columnName)
288+
logger.Debug("Column is being forced to discard due to version incompatibility", "column", columnName)
289289
thisMap[columnName] = MetricMap{
290290
discard: true,
291291
conversion: func(_ interface{}) (float64, bool) {
@@ -372,7 +372,7 @@ func makeDescMap(pgVersion semver.Version, serverLabels prometheus.Labels, metri
372372
case string:
373373
durationString = t
374374
default:
375-
level.Error(logger).Log("msg", "Duration conversion metric was not a string")
375+
logger.Error("Duration conversion metric was not a string")
376376
return math.NaN(), false
377377
}
378378

@@ -382,7 +382,7 @@ func makeDescMap(pgVersion semver.Version, serverLabels prometheus.Labels, metri
382382

383383
d, err := time.ParseDuration(durationString)
384384
if err != nil {
385-
level.Error(logger).Log("msg", "Failed converting result to metric", "column", columnName, "in", in, "err", err)
385+
logger.Error("Failed converting result to metric", "column", columnName, "in", in, "err", err)
386386
return math.NaN(), false
387387
}
388388
return float64(d / time.Millisecond), true
@@ -424,7 +424,7 @@ type Exporter struct {
424424
// servers are used to allow re-using the DB connection between scrapes.
425425
// servers contains metrics map and query overrides.
426426
servers *Servers
427-
logger log.Logger
427+
logger *slog.Logger
428428
metricPrefix string
429429
}
430430

@@ -483,7 +483,7 @@ func WithConstantLabels(s string) ExporterOpt {
483483
}
484484

485485
// WithLogger configures logger.
486-
func WithLogger(logger log.Logger) ExporterOpt {
486+
func WithLogger(logger *slog.Logger) ExporterOpt {
487487
return func(e *Exporter) {
488488
e.logger = logger
489489
}
@@ -508,7 +508,7 @@ func parseConstLabels(s string) prometheus.Labels {
508508
for _, p := range parts {
509509
keyValue := strings.Split(strings.TrimSpace(p), "=")
510510
if len(keyValue) != 2 {
511-
level.Error(rootFallbackLogger).Log(`Wrong constant labels format, should be "key=value"`, "input", p)
511+
rootFallbackLogger.Error(`Wrong constant labels format, should be "key=value"`, "input", p)
512512
continue
513513
}
514514
key := strings.TrimSpace(keyValue[0])
@@ -527,7 +527,7 @@ func NewExporter(dsn []string, opts ...ExporterOpt) *Exporter {
527527
e := &Exporter{
528528
dsn: dsn,
529529
builtinMetricMaps: builtinMetricMaps,
530-
logger: log.NewNopLogger(), // Can override with WithLogger option
530+
logger: promslog.NewNopLogger(), // Can override with WithLogger option
531531
}
532532

533533
for _, opt := range opts {
@@ -599,8 +599,8 @@ func newDesc(subsystem, name, help string, labels prometheus.Labels) *prometheus
599599
)
600600
}
601601

602-
func checkPostgresVersion(db *sql.DB, server string, logger log.Logger) (semver.Version, string, error) {
603-
level.Debug(logger).Log("msg", "Querying PostgreSQL version", "server", server)
602+
func checkPostgresVersion(db *sql.DB, server string, logger *slog.Logger) (semver.Version, string, error) {
603+
logger.Debug("Querying PostgreSQL version", "server", server)
604604
versionRow := db.QueryRow("SELECT version();")
605605
var versionString string
606606
err := versionRow.Scan(&versionString)
@@ -623,12 +623,12 @@ func (e *Exporter) checkMapVersions(ch chan<- prometheus.Metric, server *Server)
623623
}
624624

625625
if !e.disableDefaultMetrics && semanticVersion.LT(lowestSupportedVersion) {
626-
level.Warn(server.logger).Log("msg", "PostgreSQL version is lower than our lowest supported version", "server", server, "version", semanticVersion, "lowest_supported_version", lowestSupportedVersion)
626+
server.logger.Warn("PostgreSQL version is lower than our lowest supported version", "server", server, "version", semanticVersion, "lowest_supported_version", lowestSupportedVersion)
627627
}
628628

629629
// Check if semantic version changed and recalculate maps if needed.
630630
if semanticVersion.NE(server.lastMapVersion) || server.metricMap == nil {
631-
level.Info(server.logger).Log("msg", "Semantic version changed", "server", server, "from", server.lastMapVersion, "to", semanticVersion)
631+
server.logger.Info("Semantic version changed", "server", server, "from", server.lastMapVersion, "to", semanticVersion)
632632
server.mappingMtx.Lock()
633633

634634
// Get Default Metrics only for master database
@@ -649,13 +649,13 @@ func (e *Exporter) checkMapVersions(ch chan<- prometheus.Metric, server *Server)
649649
// Calculate the hashsum of the useQueries
650650
userQueriesData, err := os.ReadFile(e.userQueriesPath)
651651
if err != nil {
652-
level.Error(server.logger).Log("msg", "Failed to reload user queries", "path", e.userQueriesPath, "err", err)
652+
server.logger.Error("Failed to reload user queries", "path", e.userQueriesPath, "err", err)
653653
e.userQueriesError.WithLabelValues(e.userQueriesPath, "").Set(1)
654654
} else {
655655
hashsumStr := fmt.Sprintf("%x", sha256.Sum256(userQueriesData))
656656

657657
if err := addQueries(userQueriesData, semanticVersion, server, e.metricPrefix); err != nil {
658-
level.Error(server.logger).Log("msg", "Failed to reload user queries", "path", e.userQueriesPath, "err", err)
658+
server.logger.Error("Failed to reload user queries", "path", e.userQueriesPath, "err", err)
659659
e.userQueriesError.WithLabelValues(e.userQueriesPath, hashsumStr).Set(1)
660660
} else {
661661
// Mark user queries as successfully loaded
@@ -697,7 +697,7 @@ func (e *Exporter) scrape(ch chan<- prometheus.Metric) {
697697
if err := e.scrapeDSN(ch, dsn); err != nil {
698698
errorsCount++
699699

700-
level.Error(e.logger).Log("err", err)
700+
e.logger.Error("error encountered scraping DSN", "err", err)
701701

702702
if _, ok := err.(*ErrorConnectToServer); ok {
703703
connectionErrorsCount++

0 commit comments

Comments
 (0)