Skip to content

Commit a6c5840

Browse files
committed
chore!: adopt log/slog, drop go-kit/log
This PR includes: - linter updates to enable `sloglint` linter - Go dep updates for prometheus/{client_golang,common,exporter-toolkit} libs - refactorings to adopt log/slog in favor of 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 Signed-off-by: SuperQ <superq@gmail.com>
1 parent 83cae52 commit a6c5840

File tree

10 files changed

+102
-97
lines changed

10 files changed

+102
-97
lines changed

.circleci/config.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ orbs:
55
executors:
66
golang:
77
docker:
8-
- image: cimg/go:1.22
8+
- image: cimg/go:1.23
99
- image: quay.io/prometheus/node-exporter:latest
1010

1111
jobs:
1212
test:
1313
executor: golang
1414
environment:
15-
prom_ver: 2.51.0
15+
prom_ver: 2.54.1
1616
steps:
1717
- prometheus/setup_environment
1818
- run: wget https://github.com/prometheus/prometheus/releases/download/v${prom_ver}/prometheus-${prom_ver}.linux-amd64.tar.gz

.github/workflows/golangci-lint.yml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,16 @@ jobs:
2424
runs-on: ubuntu-latest
2525
steps:
2626
- name: Checkout repository
27-
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
28-
- name: install Go
29-
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
27+
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
28+
- name: Install Go
29+
uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2
3030
with:
31-
go-version: 1.22.x
31+
go-version: 1.23.x
3232
- name: Install snmp_exporter/generator dependencies
3333
run: sudo apt-get update && sudo apt-get -y install libsnmp-dev
3434
if: github.repository == 'prometheus/snmp_exporter'
3535
- name: Lint
36-
uses: golangci/golangci-lint-action@3cfe3a4abbb849e10058ce4af15d205b6da42804 # v4.0.0
36+
uses: golangci/golangci-lint-action@aaa42aa0628b4ae2578232a66b541047968fac86 # v6.1.0
3737
with:
38-
version: v1.56.2
38+
args: --verbose
39+
version: v1.60.2

.golangci.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ linters:
33
enable:
44
- misspell
55
- revive
6+
- sloglint
67

78
linters-settings:
89
errcheck:
@@ -11,8 +12,6 @@ linters-settings:
1112
- io.Copy
1213
# Used in HTTP handlers, any error is handled by the server itself.
1314
- (net/http.ResponseWriter).Write
14-
# Never check for logger errors.
15-
- (github.com/go-kit/log.Logger).Log
1615
revive:
1716
rules:
1817
# https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unused-parameter

.promu.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
go:
22
# This must match .circle/config.yml.
3-
version: 1.22
3+
version: 1.23
44
repository:
55
path: github.com/prometheus-community/pushprox
66
build:

Makefile.common

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,13 @@ ifneq ($(shell command -v gotestsum 2> /dev/null),)
5555
endif
5656
endif
5757

58-
PROMU_VERSION ?= 0.15.0
58+
PROMU_VERSION ?= 0.17.0
5959
PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_VERSION)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM).tar.gz
6060

6161
SKIP_GOLANGCI_LINT :=
6262
GOLANGCI_LINT :=
6363
GOLANGCI_LINT_OPTS ?=
64-
GOLANGCI_LINT_VERSION ?= v1.56.2
64+
GOLANGCI_LINT_VERSION ?= v1.60.2
6565
# golangci-lint only supports linux, darwin and windows platforms on i386/amd64/arm64.
6666
# windows isn't included here because of the path separator being different.
6767
ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin))
@@ -275,3 +275,9 @@ $(1)_precheck:
275275
exit 1; \
276276
fi
277277
endef
278+
279+
govulncheck: install-govulncheck
280+
govulncheck ./...
281+
282+
install-govulncheck:
283+
command -v govulncheck > /dev/null || go install golang.org/x/vuln/cmd/govulncheck@latest

cmd/client/main.go

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"errors"
2323
"fmt"
2424
"io"
25+
"log/slog"
2526
"net"
2627
"net/http"
2728
"net/url"
@@ -32,13 +33,11 @@ import (
3233
"github.com/Showmax/go-fqdn"
3334
"github.com/alecthomas/kingpin/v2"
3435
"github.com/cenkalti/backoff/v4"
35-
"github.com/go-kit/log"
36-
"github.com/go-kit/log/level"
3736
"github.com/prometheus-community/pushprox/util"
3837
"github.com/prometheus/client_golang/prometheus"
3938
"github.com/prometheus/client_golang/prometheus/promhttp"
40-
"github.com/prometheus/common/promlog"
41-
"github.com/prometheus/common/promlog/flag"
39+
"github.com/prometheus/common/promslog"
40+
"github.com/prometheus/common/promslog/flag"
4241
)
4342

4443
var (
@@ -89,11 +88,11 @@ func newBackOffFromFlags() backoff.BackOff {
8988

9089
// Coordinator for scrape requests and responses
9190
type Coordinator struct {
92-
logger log.Logger
91+
logger *slog.Logger
9392
}
9493

9594
func (c *Coordinator) handleErr(request *http.Request, client *http.Client, err error) {
96-
level.Error(c.logger).Log("err", err)
95+
c.logger.Error("coordinator error", "error", err)
9796
scrapeErrorCounter.Inc()
9897
resp := &http.Response{
9998
StatusCode: http.StatusInternalServerError,
@@ -102,14 +101,14 @@ func (c *Coordinator) handleErr(request *http.Request, client *http.Client, err
102101
}
103102
if err = c.doPush(resp, request, client); err != nil {
104103
pushErrorCounter.Inc()
105-
level.Warn(c.logger).Log("msg", "Failed to push failed scrape response:", "err", err)
104+
c.logger.Warn("Failed to push failed scrape response:", "err", err)
106105
return
107106
}
108-
level.Info(c.logger).Log("msg", "Pushed failed scrape response")
107+
c.logger.Info("Pushed failed scrape response")
109108
}
110109

111110
func (c *Coordinator) doScrape(request *http.Request, client *http.Client) {
112-
logger := log.With(c.logger, "scrape_id", request.Header.Get("id"))
111+
logger := c.logger.With("scrape_id", request.Header.Get("id"))
113112
timeout, err := util.GetHeaderTimeout(request.Header)
114113
if err != nil {
115114
c.handleErr(request, client, err)
@@ -137,13 +136,13 @@ func (c *Coordinator) doScrape(request *http.Request, client *http.Client) {
137136
c.handleErr(request, client, fmt.Errorf("failed to scrape %s: %w", request.URL.String(), err))
138137
return
139138
}
140-
level.Info(logger).Log("msg", "Retrieved scrape response")
139+
logger.Info("Retrieved scrape response")
141140
if err = c.doPush(scrapeResp, request, client); err != nil {
142141
pushErrorCounter.Inc()
143-
level.Warn(logger).Log("msg", "Failed to push scrape response:", "err", err)
142+
logger.Warn("Failed to push scrape response:", "err", err)
144143
return
145144
}
146-
level.Info(logger).Log("msg", "Pushed scrape result")
145+
logger.Info("Pushed scrape result")
147146
}
148147

149148
// Report the result of the scrape back up to the proxy.
@@ -182,28 +181,28 @@ func (c *Coordinator) doPush(resp *http.Response, origRequest *http.Request, cli
182181
func (c *Coordinator) doPoll(client *http.Client) error {
183182
base, err := url.Parse(*proxyURL)
184183
if err != nil {
185-
level.Error(c.logger).Log("msg", "Error parsing url:", "err", err)
184+
c.logger.Error("Error parsing url:", "err", err)
186185
return fmt.Errorf("error parsing url: %w", err)
187186
}
188187
u, err := url.Parse("poll")
189188
if err != nil {
190-
level.Error(c.logger).Log("msg", "Error parsing url:", "err", err)
189+
c.logger.Error("Error parsing url:", "err", err)
191190
return fmt.Errorf("error parsing url poll: %w", err)
192191
}
193192
url := base.ResolveReference(u)
194193
resp, err := client.Post(url.String(), "", strings.NewReader(*myFqdn))
195194
if err != nil {
196-
level.Error(c.logger).Log("msg", "Error polling:", "err", err)
195+
c.logger.Error("Error polling:", "err", err)
197196
return fmt.Errorf("error polling: %w", err)
198197
}
199198
defer resp.Body.Close()
200199

201200
request, err := http.ReadRequest(bufio.NewReader(resp.Body))
202201
if err != nil {
203-
level.Error(c.logger).Log("msg", "Error reading request:", "err", err)
202+
c.logger.Error("Error reading request:", "err", err)
204203
return fmt.Errorf("error reading request: %w", err)
205204
}
206-
level.Info(c.logger).Log("msg", "Got scrape request", "scrape_id", request.Header.Get("id"), "url", request.URL)
205+
c.logger.Info("Got scrape request", "scrape_id", request.Header.Get("id"), "url", request.URL)
207206

208207
request.RequestURI = ""
209208

@@ -221,32 +220,32 @@ func (c *Coordinator) loop(bo backoff.BackOff, client *http.Client) {
221220
if err := backoff.RetryNotify(op, bo, func(err error, _ time.Duration) {
222221
pollErrorCounter.Inc()
223222
}); err != nil {
224-
level.Error(c.logger).Log("err", err)
223+
c.logger.Error("backoff returned error", "error", err)
225224
}
226225
}
227226
}
228227

229228
func main() {
230-
promlogConfig := promlog.Config{}
231-
flag.AddFlags(kingpin.CommandLine, &promlogConfig)
229+
promslogConfig := promslog.Config{}
230+
flag.AddFlags(kingpin.CommandLine, &promslogConfig)
232231
kingpin.HelpFlag.Short('h')
233232
kingpin.Parse()
234-
logger := promlog.New(&promlogConfig)
233+
logger := promslog.New(&promslogConfig)
235234
coordinator := Coordinator{logger: logger}
236235

237236
if *proxyURL == "" {
238-
level.Error(coordinator.logger).Log("msg", "--proxy-url flag must be specified.")
237+
coordinator.logger.Error("--proxy-url flag must be specified.")
239238
os.Exit(1)
240239
}
241240
// Make sure proxyURL ends with a single '/'
242241
*proxyURL = strings.TrimRight(*proxyURL, "/") + "/"
243-
level.Info(coordinator.logger).Log("msg", "URL and FQDN info", "proxy_url", *proxyURL, "fqdn", *myFqdn)
242+
coordinator.logger.Info("URL and FQDN info", "proxy_url", *proxyURL, "fqdn", *myFqdn)
244243

245244
tlsConfig := &tls.Config{}
246245
if *tlsCert != "" {
247246
cert, err := tls.LoadX509KeyPair(*tlsCert, *tlsKey)
248247
if err != nil {
249-
level.Error(coordinator.logger).Log("msg", "Certificate or Key is invalid", "err", err)
248+
coordinator.logger.Error("Certificate or Key is invalid", "err", err)
250249
os.Exit(1)
251250
}
252251

@@ -257,12 +256,12 @@ func main() {
257256
if *caCertFile != "" {
258257
caCert, err := os.ReadFile(*caCertFile)
259258
if err != nil {
260-
level.Error(coordinator.logger).Log("msg", "Not able to read cacert file", "err", err)
259+
coordinator.logger.Error("Not able to read cacert file", "err", err)
261260
os.Exit(1)
262261
}
263262
caCertPool := x509.NewCertPool()
264263
if ok := caCertPool.AppendCertsFromPEM(caCert); !ok {
265-
level.Error(coordinator.logger).Log("msg", "Failed to use cacert file as ca certificate")
264+
coordinator.logger.Error("Failed to use cacert file as ca certificate")
266265
os.Exit(1)
267266
}
268267

@@ -272,7 +271,7 @@ func main() {
272271
if *metricsAddr != "" {
273272
go func() {
274273
if err := http.ListenAndServe(*metricsAddr, promhttp.Handler()); err != nil {
275-
level.Warn(coordinator.logger).Log("msg", "ListenAndServe", "err", err)
274+
coordinator.logger.Warn("ListenAndServe", "err", err)
276275
}
277276
}()
278277
}

cmd/proxy/coordinator.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,12 @@ package main
1616
import (
1717
"context"
1818
"fmt"
19+
"log/slog"
1920
"net/http"
2021
"sync"
2122
"time"
2223

2324
"github.com/alecthomas/kingpin/v2"
24-
"github.com/go-kit/log"
25-
"github.com/go-kit/log/level"
2625
"github.com/google/uuid"
2726
"github.com/prometheus-community/pushprox/util"
2827
"github.com/prometheus/client_golang/prometheus"
@@ -55,11 +54,11 @@ type Coordinator struct {
5554
// Clients we know about and when they last contacted us.
5655
known map[string]time.Time
5756

58-
logger log.Logger
57+
logger *slog.Logger
5958
}
6059

6160
// NewCoordinator initiates the coordinator and starts the client cleanup routine
62-
func NewCoordinator(logger log.Logger) (*Coordinator, error) {
61+
func NewCoordinator(logger *slog.Logger) (*Coordinator, error) {
6362
c := &Coordinator{
6463
waiting: map[string]chan *http.Request{},
6564
responses: map[string]chan *http.Response{},
@@ -112,7 +111,7 @@ func (c *Coordinator) DoScrape(ctx context.Context, r *http.Request) (*http.Resp
112111
if err != nil {
113112
return nil, err
114113
}
115-
level.Info(c.logger).Log("msg", "DoScrape", "scrape_id", id, "url", r.URL.String())
114+
c.logger.Info("DoScrape", "scrape_id", id, "url", r.URL.String())
116115
r.Header.Add("Id", id)
117116
select {
118117
case <-ctx.Done():
@@ -133,7 +132,7 @@ func (c *Coordinator) DoScrape(ctx context.Context, r *http.Request) (*http.Resp
133132

134133
// WaitForScrapeInstruction registers a client waiting for a scrape result
135134
func (c *Coordinator) WaitForScrapeInstruction(fqdn string) (*http.Request, error) {
136-
level.Info(c.logger).Log("msg", "WaitForScrapeInstruction", "fqdn", fqdn)
135+
c.logger.Info("WaitForScrapeInstruction", "fqdn", fqdn)
137136

138137
c.addKnownClient(fqdn)
139138
// TODO: What if the client times out?
@@ -165,7 +164,7 @@ func (c *Coordinator) WaitForScrapeInstruction(fqdn string) (*http.Request, erro
165164
// ScrapeResult send by client
166165
func (c *Coordinator) ScrapeResult(r *http.Response) error {
167166
id := r.Header.Get("Id")
168-
level.Info(c.logger).Log("msg", "ScrapeResult", "scrape_id", id)
167+
c.logger.Info("ScrapeResult", "scrape_id", id)
169168
ctx, cancel := context.WithTimeout(context.Background(), util.GetScrapeTimeout(maxScrapeTimeout, defaultScrapeTimeout, r.Header))
170169
defer cancel()
171170
// Don't expose internal headers.
@@ -217,7 +216,7 @@ func (c *Coordinator) gc() {
217216
deleted++
218217
}
219218
}
220-
level.Info(c.logger).Log("msg", "GC of clients completed", "deleted", deleted, "remaining", len(c.known))
219+
c.logger.Info("GC of clients completed", "deleted", deleted, "remaining", len(c.known))
221220
knownClients.Set(float64(len(c.known)))
222221
}()
223222
}

0 commit comments

Comments
 (0)