Skip to content

Commit 04b47fd

Browse files
authored
chore!: adopt log/slog, drop go-kit/log (#378)
* build(deps): bump prometheus/{client_golang,common,exporter-toolkit} Also bumps the minimum go version in go.mod to 1.22 to support log/slog, for exporter-toolkit support. Signed-off-by: TJ Hoplock <[email protected]> * chore!: adopt log/slog, drop go-kit/log The bulk of this PR was automated by the following script which is being used to aid in converting the various exporters/projects to use slog: https://gist.github.com/tjhop/49f96fb7ebbe55b12deee0b0312d8434 Other changes include: - removing unneeded linter settings for go-kit/log - enabling sloglint linter Signed-off-by: TJ Hoplock <[email protected]> --------- Signed-off-by: TJ Hoplock <[email protected]>
1 parent 157cf40 commit 04b47fd

9 files changed

+77
-80
lines changed

.golangci.yml

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
---
2+
linters:
3+
enable:
4+
- sloglint
5+
26
run:
37
deadline: 5m
48
skip-files:
@@ -16,5 +20,3 @@ linters-settings:
1620
exclude-functions:
1721
# Used in HTTP handlers, any error is handled by the server itself.
1822
- (net/http.ResponseWriter).Write
19-
# Never check for logger errors.
20-
- (github.com/go-kit/log.Logger).Log

collectors/monitoring_collector.go

+17-18
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,12 @@ package collectors
1616
import (
1717
"errors"
1818
"fmt"
19+
"log/slog"
1920
"math"
2021
"strings"
2122
"sync"
2223
"time"
2324

24-
"github.com/go-kit/log"
25-
"github.com/go-kit/log/level"
2625
"github.com/prometheus/client_golang/prometheus"
2726
"golang.org/x/net/context"
2827
"google.golang.org/api/monitoring/v3"
@@ -53,7 +52,7 @@ type MonitoringCollector struct {
5352
lastScrapeDurationSecondsMetric prometheus.Gauge
5453
collectorFillMissingLabels bool
5554
monitoringDropDelegatedProjects bool
56-
logger log.Logger
55+
logger *slog.Logger
5756
counterStore DeltaCounterStore
5857
histogramStore DeltaHistogramStore
5958
aggregateDeltas bool
@@ -120,10 +119,10 @@ type DeltaHistogramStore interface {
120119
ListMetrics(metricDescriptorName string) []*HistogramMetric
121120
}
122121

123-
func NewMonitoringCollector(projectID string, monitoringService *monitoring.Service, opts MonitoringCollectorOptions, logger log.Logger, counterStore DeltaCounterStore, histogramStore DeltaHistogramStore) (*MonitoringCollector, error) {
122+
func NewMonitoringCollector(projectID string, monitoringService *monitoring.Service, opts MonitoringCollectorOptions, logger *slog.Logger, counterStore DeltaCounterStore, histogramStore DeltaHistogramStore) (*MonitoringCollector, error) {
124123
const subsystem = "monitoring"
125124

126-
logger = log.With(logger, "project_id", projectID)
125+
logger = logger.With("project_id", projectID)
127126

128127
apiCallsTotalMetric := prometheus.NewCounter(
129128
prometheus.CounterOpts{
@@ -237,7 +236,7 @@ func (c *MonitoringCollector) Collect(ch chan<- prometheus.Metric) {
237236
if err := c.reportMonitoringMetrics(ch, begun); err != nil {
238237
errorMetric = float64(1)
239238
c.scrapeErrorsTotalMetric.Inc()
240-
level.Error(c.logger).Log("msg", "Error while getting Google Stackdriver Monitoring metrics", "err", err)
239+
c.logger.Error("Error while getting Google Stackdriver Monitoring metrics", "err", err)
241240
}
242241
c.scrapeErrorsTotalMetric.Collect(ch)
243242

@@ -283,7 +282,7 @@ func (c *MonitoringCollector) reportMonitoringMetrics(ch chan<- prometheus.Metri
283282
wg.Add(1)
284283
go func(metricDescriptor *monitoring.MetricDescriptor, ch chan<- prometheus.Metric, startTime, endTime time.Time) {
285284
defer wg.Done()
286-
level.Debug(c.logger).Log("msg", "retrieving Google Stackdriver Monitoring metrics for descriptor", "descriptor", metricDescriptor.Type)
285+
c.logger.Debug("retrieving Google Stackdriver Monitoring metrics for descriptor", "descriptor", metricDescriptor.Type)
287286
filter := fmt.Sprintf("metric.type=\"%s\"", metricDescriptor.Type)
288287
if c.monitoringDropDelegatedProjects {
289288
filter = fmt.Sprintf(
@@ -298,11 +297,11 @@ func (c *MonitoringCollector) reportMonitoringMetrics(ch chan<- prometheus.Metri
298297
ingestDelay := metricDescriptor.Metadata.IngestDelay
299298
ingestDelayDuration, err := time.ParseDuration(ingestDelay)
300299
if err != nil {
301-
level.Error(c.logger).Log("msg", "error parsing ingest delay from metric metadata", "descriptor", metricDescriptor.Type, "err", err, "delay", ingestDelay)
300+
c.logger.Error("error parsing ingest delay from metric metadata", "descriptor", metricDescriptor.Type, "err", err, "delay", ingestDelay)
302301
errChannel <- err
303302
return
304303
}
305-
level.Debug(c.logger).Log("msg", "adding ingest delay", "descriptor", metricDescriptor.Type, "delay", ingestDelay)
304+
c.logger.Debug("adding ingest delay", "descriptor", metricDescriptor.Type, "delay", ingestDelay)
306305
endTime = endTime.Add(ingestDelayDuration * -1)
307306
startTime = startTime.Add(ingestDelayDuration * -1)
308307
}
@@ -313,7 +312,7 @@ func (c *MonitoringCollector) reportMonitoringMetrics(ch chan<- prometheus.Metri
313312
}
314313
}
315314

316-
level.Debug(c.logger).Log("msg", "retrieving Google Stackdriver Monitoring metrics with filter", "filter", filter)
315+
c.logger.Debug("retrieving Google Stackdriver Monitoring metrics with filter", "filter", filter)
317316

318317
timeSeriesListCall := c.monitoringService.Projects.TimeSeries.List(utils.ProjectResource(c.projectID)).
319318
Filter(filter).
@@ -324,15 +323,15 @@ func (c *MonitoringCollector) reportMonitoringMetrics(ch chan<- prometheus.Metri
324323
c.apiCallsTotalMetric.Inc()
325324
page, err := timeSeriesListCall.Do()
326325
if err != nil {
327-
level.Error(c.logger).Log("msg", "error retrieving Time Series metrics for descriptor", "descriptor", metricDescriptor.Type, "err", err)
326+
c.logger.Error("error retrieving Time Series metrics for descriptor", "descriptor", metricDescriptor.Type, "err", err)
328327
errChannel <- err
329328
break
330329
}
331330
if page == nil {
332331
break
333332
}
334333
if err := c.reportTimeSeriesMetrics(page, metricDescriptor, ch, begun); err != nil {
335-
level.Error(c.logger).Log("msg", "error reporting Time Series metrics for descriptor", "descriptor", metricDescriptor.Type, "err", err)
334+
c.logger.Error("error reporting Time Series metrics for descriptor", "descriptor", metricDescriptor.Type, "err", err)
336335
errChannel <- err
337336
break
338337
}
@@ -368,7 +367,7 @@ func (c *MonitoringCollector) reportMonitoringMetrics(ch chan<- prometheus.Metri
368367
}
369368

370369
if cached := c.descriptorCache.Lookup(metricsTypePrefix); cached != nil {
371-
level.Debug(c.logger).Log("msg", "using cached Google Stackdriver Monitoring metric descriptors starting with", "prefix", metricsTypePrefix)
370+
c.logger.Debug("using cached Google Stackdriver Monitoring metric descriptors starting with", "prefix", metricsTypePrefix)
372371
if err := metricDescriptorsFunction(cached); err != nil {
373372
errChannel <- err
374373
}
@@ -381,7 +380,7 @@ func (c *MonitoringCollector) reportMonitoringMetrics(ch chan<- prometheus.Metri
381380
return metricDescriptorsFunction(r.MetricDescriptors)
382381
}
383382

384-
level.Debug(c.logger).Log("msg", "listing Google Stackdriver Monitoring metric descriptors starting with", "prefix", metricsTypePrefix)
383+
c.logger.Debug("listing Google Stackdriver Monitoring metric descriptors starting with", "prefix", metricsTypePrefix)
385384
if err := c.monitoringService.Projects.MetricDescriptors.List(utils.ProjectResource(c.projectID)).
386385
Filter(filter).
387386
Pages(ctx, callback); err != nil {
@@ -396,7 +395,7 @@ func (c *MonitoringCollector) reportMonitoringMetrics(ch chan<- prometheus.Metri
396395
wg.Wait()
397396
close(errChannel)
398397

399-
level.Debug(c.logger).Log("msg", "Done reporting monitoring metrics")
398+
c.logger.Debug("Done reporting monitoring metrics")
400399
return <-errChannel
401400
}
402401

@@ -500,12 +499,12 @@ func (c *MonitoringCollector) reportTimeSeriesMetrics(
500499
if err == nil {
501500
timeSeriesMetrics.CollectNewConstHistogram(timeSeries, newestEndTime, labelKeys, dist, buckets, labelValues, timeSeries.MetricKind)
502501
} else {
503-
level.Debug(c.logger).Log("msg", "discarding", "resource", timeSeries.Resource.Type, "metric",
502+
c.logger.Debug("discarding", "resource", timeSeries.Resource.Type, "metric",
504503
timeSeries.Metric.Type, "err", err)
505504
}
506505
continue
507506
default:
508-
level.Debug(c.logger).Log("msg", "discarding", "value_type", timeSeries.ValueType, "metric", timeSeries)
507+
c.logger.Debug("discarding", "value_type", timeSeries.ValueType, "metric", timeSeries)
509508
continue
510509
}
511510

@@ -569,7 +568,7 @@ func (c *MonitoringCollector) generateHistogramBuckets(
569568
func (c *MonitoringCollector) keyExists(labelKeys []string, key string) bool {
570569
for _, item := range labelKeys {
571570
if item == key {
572-
level.Debug(c.logger).Log("msg", "Found duplicate label key", "key", key)
571+
c.logger.Debug("Found duplicate label key", "key", key)
573572
return true
574573
}
575574
}

delta/counter.go

+7-8
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,12 @@ package delta
1515

1616
import (
1717
"fmt"
18+
"log/slog"
1819
"sort"
1920
"strings"
2021
"sync"
2122
"time"
2223

23-
"github.com/go-kit/log"
24-
"github.com/go-kit/log/level"
2524
"google.golang.org/api/monitoring/v3"
2625

2726
"github.com/prometheus-community/stackdriver_exporter/collectors"
@@ -36,11 +35,11 @@ type MetricEntry struct {
3635
type InMemoryCounterStore struct {
3736
store *sync.Map
3837
ttl time.Duration
39-
logger log.Logger
38+
logger *slog.Logger
4039
}
4140

4241
// NewInMemoryCounterStore returns an implementation of CounterStore which is persisted in-memory
43-
func NewInMemoryCounterStore(logger log.Logger, ttl time.Duration) *InMemoryCounterStore {
42+
func NewInMemoryCounterStore(logger *slog.Logger, ttl time.Duration) *InMemoryCounterStore {
4443
store := &InMemoryCounterStore{
4544
store: &sync.Map{},
4645
logger: logger,
@@ -68,19 +67,19 @@ func (s *InMemoryCounterStore) Increment(metricDescriptor *monitoring.MetricDesc
6867
existing := entry.Collected[key]
6968

7069
if existing == nil {
71-
level.Debug(s.logger).Log("msg", "Tracking new counter", "fqName", currentValue.FqName, "key", key, "current_value", currentValue.Value, "incoming_time", currentValue.ReportTime)
70+
s.logger.Debug("Tracking new counter", "fqName", currentValue.FqName, "key", key, "current_value", currentValue.Value, "incoming_time", currentValue.ReportTime)
7271
entry.Collected[key] = currentValue
7372
return
7473
}
7574

7675
if existing.ReportTime.Before(currentValue.ReportTime) {
77-
level.Debug(s.logger).Log("msg", "Incrementing existing counter", "fqName", currentValue.FqName, "key", key, "current_value", existing.Value, "adding", currentValue.Value, "last_reported_time", existing.ReportTime, "incoming_time", currentValue.ReportTime)
76+
s.logger.Debug("Incrementing existing counter", "fqName", currentValue.FqName, "key", key, "current_value", existing.Value, "adding", currentValue.Value, "last_reported_time", existing.ReportTime, "incoming_time", currentValue.ReportTime)
7877
currentValue.Value = currentValue.Value + existing.Value
7978
entry.Collected[key] = currentValue
8079
return
8180
}
8281

83-
level.Debug(s.logger).Log("msg", "Ignoring old sample for counter", "fqName", currentValue.FqName, "key", key, "last_reported_time", existing.ReportTime, "incoming_time", currentValue.ReportTime)
82+
s.logger.Debug("Ignoring old sample for counter", "fqName", currentValue.FqName, "key", key, "last_reported_time", existing.ReportTime, "incoming_time", currentValue.ReportTime)
8483
}
8584

8685
func toCounterKey(c *collectors.ConstMetric) uint64 {
@@ -118,7 +117,7 @@ func (s *InMemoryCounterStore) ListMetrics(metricDescriptorName string) []*colle
118117
for key, collected := range entry.Collected {
119118
//Scan and remove metrics which are outside the TTL
120119
if ttlWindowStart.After(collected.CollectionTime) {
121-
level.Debug(s.logger).Log("msg", "Deleting counter entry outside of TTL", "key", key, "fqName", collected.FqName)
120+
s.logger.Debug("Deleting counter entry outside of TTL", "key", key, "fqName", collected.FqName)
122121
delete(entry.Collected, key)
123122
continue
124123
}

delta/counter_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import (
1818

1919
. "github.com/onsi/ginkgo"
2020
. "github.com/onsi/gomega"
21-
"github.com/prometheus/common/promlog"
21+
"github.com/prometheus/common/promslog"
2222
"google.golang.org/api/monitoring/v3"
2323

2424
"github.com/prometheus-community/stackdriver_exporter/collectors"
@@ -31,7 +31,7 @@ var _ = Describe("Counter", func() {
3131
descriptor := &monitoring.MetricDescriptor{Name: "This is a metric"}
3232

3333
BeforeEach(func() {
34-
store = delta.NewInMemoryCounterStore(promlog.New(&promlog.Config{}), time.Minute)
34+
store = delta.NewInMemoryCounterStore(promslog.New(&promslog.Config{}), time.Minute)
3535
metric = &collectors.ConstMetric{
3636
FqName: "counter_name",
3737
LabelKeys: []string{"labelKey"},

delta/histogram.go

+7-8
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,12 @@ package delta
1515

1616
import (
1717
"fmt"
18+
"log/slog"
1819
"sort"
1920
"strings"
2021
"sync"
2122
"time"
2223

23-
"github.com/go-kit/log"
24-
"github.com/go-kit/log/level"
2524
"google.golang.org/api/monitoring/v3"
2625

2726
"github.com/prometheus-community/stackdriver_exporter/collectors"
@@ -36,11 +35,11 @@ type HistogramEntry struct {
3635
type InMemoryHistogramStore struct {
3736
store *sync.Map
3837
ttl time.Duration
39-
logger log.Logger
38+
logger *slog.Logger
4039
}
4140

4241
// NewInMemoryHistogramStore returns an implementation of HistogramStore which is persisted in-memory
43-
func NewInMemoryHistogramStore(logger log.Logger, ttl time.Duration) *InMemoryHistogramStore {
42+
func NewInMemoryHistogramStore(logger *slog.Logger, ttl time.Duration) *InMemoryHistogramStore {
4443
store := &InMemoryHistogramStore{
4544
store: &sync.Map{},
4645
logger: logger,
@@ -68,20 +67,20 @@ func (s *InMemoryHistogramStore) Increment(metricDescriptor *monitoring.MetricDe
6867
existing := entry.Collected[key]
6968

7069
if existing == nil {
71-
level.Debug(s.logger).Log("msg", "Tracking new histogram", "fqName", currentValue.FqName, "key", key, "incoming_time", currentValue.ReportTime)
70+
s.logger.Debug("Tracking new histogram", "fqName", currentValue.FqName, "key", key, "incoming_time", currentValue.ReportTime)
7271
entry.Collected[key] = currentValue
7372
return
7473
}
7574

7675
if existing.ReportTime.Before(currentValue.ReportTime) {
77-
level.Debug(s.logger).Log("msg", "Incrementing existing histogram", "fqName", currentValue.FqName, "key", key, "last_reported_time", existing.ReportTime, "incoming_time", currentValue.ReportTime)
76+
s.logger.Debug("Incrementing existing histogram", "fqName", currentValue.FqName, "key", key, "last_reported_time", existing.ReportTime, "incoming_time", currentValue.ReportTime)
7877
currentValue.MergeHistogram(existing)
7978
// Replace the existing histogram by the new one after merging it.
8079
entry.Collected[key] = currentValue
8180
return
8281
}
8382

84-
level.Debug(s.logger).Log("msg", "Ignoring old sample for histogram", "fqName", currentValue.FqName, "key", key, "last_reported_time", existing.ReportTime, "incoming_time", currentValue.ReportTime)
83+
s.logger.Debug("Ignoring old sample for histogram", "fqName", currentValue.FqName, "key", key, "last_reported_time", existing.ReportTime, "incoming_time", currentValue.ReportTime)
8584
}
8685

8786
func toHistogramKey(hist *collectors.HistogramMetric) uint64 {
@@ -119,7 +118,7 @@ func (s *InMemoryHistogramStore) ListMetrics(metricDescriptorName string) []*col
119118
for key, collected := range entry.Collected {
120119
// Scan and remove metrics which are outside the TTL
121120
if ttlWindowStart.After(collected.CollectionTime) {
122-
level.Debug(s.logger).Log("msg", "Deleting histogram entry outside of TTL", "key", key, "fqName", collected.FqName)
121+
s.logger.Debug("Deleting histogram entry outside of TTL", "key", key, "fqName", collected.FqName)
123122
delete(entry.Collected, key)
124123
continue
125124
}

delta/histogram_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import (
1818

1919
. "github.com/onsi/ginkgo"
2020
. "github.com/onsi/gomega"
21-
"github.com/prometheus/common/promlog"
21+
"github.com/prometheus/common/promslog"
2222
"google.golang.org/api/monitoring/v3"
2323

2424
"github.com/prometheus-community/stackdriver_exporter/collectors"
@@ -33,7 +33,7 @@ var _ = Describe("HistogramStore", func() {
3333
bucketValue := uint64(1000)
3434

3535
BeforeEach(func() {
36-
store = delta.NewInMemoryHistogramStore(promlog.New(&promlog.Config{}), time.Minute)
36+
store = delta.NewInMemoryHistogramStore(promslog.New(&promslog.Config{}), time.Minute)
3737
histogram = &collectors.HistogramMetric{
3838
FqName: "histogram_name",
3939
LabelKeys: []string{"labelKey"},

go.mod

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
module github.com/prometheus-community/stackdriver_exporter
22

3-
go 1.21
3+
go 1.22
44

55
require (
66
github.com/PuerkitoBio/rehttp v1.4.0
77
github.com/alecthomas/kingpin/v2 v2.4.0
88
github.com/fatih/camelcase v1.0.0
9-
github.com/go-kit/log v0.2.1
109
github.com/onsi/ginkgo v1.16.5
1110
github.com/onsi/gomega v1.34.1
12-
github.com/prometheus/client_golang v1.20.2
13-
github.com/prometheus/common v0.59.1
14-
github.com/prometheus/exporter-toolkit v0.11.0
11+
github.com/prometheus/client_golang v1.20.5
12+
github.com/prometheus/common v0.60.0
13+
github.com/prometheus/exporter-toolkit v0.13.0
1514
golang.org/x/net v0.29.0
1615
golang.org/x/oauth2 v0.23.0
1716
google.golang.org/api v0.199.0
@@ -27,7 +26,6 @@ require (
2726
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
2827
github.com/felixge/httpsnoop v1.0.4 // indirect
2928
github.com/fsnotify/fsnotify v1.4.9 // indirect
30-
github.com/go-logfmt/logfmt v0.5.1 // indirect
3129
github.com/go-logr/logr v1.4.2 // indirect
3230
github.com/go-logr/stdr v1.2.2 // indirect
3331
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
@@ -38,6 +36,8 @@ require (
3836
github.com/googleapis/gax-go/v2 v2.13.0 // indirect
3937
github.com/jpillora/backoff v1.0.0 // indirect
4038
github.com/klauspost/compress v1.17.9 // indirect
39+
github.com/mdlayher/socket v0.4.1 // indirect
40+
github.com/mdlayher/vsock v1.2.1 // indirect
4141
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
4242
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
4343
github.com/nxadm/tail v1.4.8 // indirect

0 commit comments

Comments
 (0)