Skip to content

Commit 27989a7

Browse files
committed
chore: switch to slog
Signed-off-by: Jan-Otto Kröpke <[email protected]>
1 parent bd21919 commit 27989a7

File tree

72 files changed

+1029
-898
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+1029
-898
lines changed

.golangci.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,21 @@ linters-settings:
5959
msg: use golang.org/x/sys/windows instead of syscall
6060
- p: "^windows\\.NewLazyDLL$"
6161
msg: use NewLazySystemDLL instead NewLazyDLL
62+
sloglint:
63+
no-mixed-args: true
64+
kv-only: false
65+
attr-only: true
66+
no-global: "all"
67+
context: "scope"
68+
static-msg: false
69+
no-raw-keys: false
70+
key-naming-case: snake
71+
forbidden-keys:
72+
- time
73+
- level
74+
- msg
75+
- source
76+
args-on-sep-lines: true
6277
issues:
6378
exclude:
6479
- don't use underscores in Go names

exporter.go

Lines changed: 60 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"encoding/json"
1515
"errors"
1616
"fmt"
17+
"log/slog"
1718
"net/http"
1819
"net/http/pprof"
1920
"os"
@@ -25,7 +26,6 @@ import (
2526
"time"
2627

2728
"github.com/alecthomas/kingpin/v2"
28-
"github.com/go-kit/log/level"
2929
"github.com/prometheus-community/windows_exporter/pkg/collector"
3030
"github.com/prometheus-community/windows_exporter/pkg/config"
3131
winlog "github.com/prometheus-community/windows_exporter/pkg/log"
@@ -137,24 +137,36 @@ func main() {
137137

138138
// Load values from configuration file(s). Executable flags must first be parsed, in order
139139
// to load the specified file(s).
140-
kingpin.MustParse(app.Parse(os.Args[1:]))
140+
if _, err := app.Parse(os.Args[1:]); err != nil {
141+
//nolint:sloglint // we do not have an logger yet
142+
slog.Error("Failed to parse CLI args",
143+
slog.Any("err", err),
144+
)
145+
os.Exit(1)
146+
}
147+
141148
logger, err := winlog.New(winlogConfig)
142149
if err != nil {
143-
_ = level.Error(logger).Log("err", err)
150+
//nolint:sloglint // we do not have an logger yet
151+
slog.Error("failed to create logger",
152+
slog.Any("err", err),
153+
)
144154
os.Exit(1)
145155
}
146156

147-
_ = level.Debug(logger).Log("msg", "Logging has Started")
148-
149157
if *configFile != "" {
150158
resolver, err := config.NewResolver(*configFile, logger, *insecureSkipVerify)
151159
if err != nil {
152-
_ = level.Error(logger).Log("msg", "could not load config file", "err", err)
160+
logger.Error("could not load config file",
161+
slog.Any("err", err),
162+
)
153163
os.Exit(1)
154164
}
155-
err = resolver.Bind(app, os.Args[1:])
156-
if err != nil {
157-
_ = level.Error(logger).Log("err", err)
165+
166+
if err = resolver.Bind(app, os.Args[1:]); err != nil {
167+
logger.Error("Failed to bind configuration",
168+
slog.Any("err", err),
169+
)
158170
os.Exit(1)
159171
}
160172

@@ -164,15 +176,25 @@ func main() {
164176
*webConfig.WebListenAddresses = (*webConfig.WebListenAddresses)[1:]
165177

166178
// Parse flags once more to include those discovered in configuration file(s).
167-
kingpin.MustParse(app.Parse(os.Args[1:]))
179+
if _, err = app.Parse(os.Args[1:]); err != nil {
180+
logger.Error("Failed to parse CLI args from YAML file",
181+
slog.Any("err", err),
182+
)
183+
os.Exit(1)
184+
}
168185

169186
logger, err = winlog.New(winlogConfig)
170187
if err != nil {
171-
_ = level.Error(logger).Log("err", err)
188+
//nolint:sloglint // we do not have an logger yet
189+
slog.Error("failed to create logger",
190+
slog.Any("err", err),
191+
)
172192
os.Exit(1)
173193
}
174194
}
175195

196+
logger.Debug("Logging has Started")
197+
176198
if *printCollectors {
177199
collectorNames := collector.Available()
178200
sort.Strings(collectorNames)
@@ -187,10 +209,12 @@ func main() {
187209

188210
// Only set process priority if a non-default and valid value has been set
189211
if *processPriority != "normal" && priorityStringToInt[*processPriority] != 0 {
190-
_ = level.Debug(logger).Log("msg", "setting process priority to "+*processPriority)
212+
logger.Debug("setting process priority to " + *processPriority)
191213
err = setPriorityWindows(os.Getpid(), priorityStringToInt[*processPriority])
192214
if err != nil {
193-
_ = level.Error(logger).Log("msg", "failed to set process priority", "err", err)
215+
logger.Error("failed to set process priority",
216+
slog.Any("err", err),
217+
)
194218
os.Exit(1)
195219
}
196220
}
@@ -201,34 +225,39 @@ func main() {
201225
// Initialize collectors before loading
202226
err = collectors.Build(logger)
203227
if err != nil {
204-
_ = level.Error(logger).Log("msg", "Couldn't load collectors", "err", err)
228+
logger.Error("Couldn't load collectors",
229+
slog.Any("err", err),
230+
)
205231
os.Exit(1)
206232
}
207233
err = collectors.SetPerfCounterQuery(logger)
208234
if err != nil {
209-
_ = level.Error(logger).Log("msg", "Couldn't set performance counter query", "err", err)
235+
logger.Error("Couldn't set performance counter query",
236+
slog.Any("err", err),
237+
)
210238
os.Exit(1)
211239
}
212240

213241
if u, err := user.Current(); err != nil {
214-
_ = level.Warn(logger).Log("msg", "Unable to determine which user is running this exporter. More info: https://github.com/golang/go/issues/37348")
242+
logger.Warn("Unable to determine which user is running this exporter. More info: https://github.com/golang/go/issues/37348")
215243
} else {
216-
_ = level.Info(logger).Log("msg", fmt.Sprintf("Running as %v", u.Username))
244+
logger.Info("Running as " + u.Username)
217245

218246
if strings.Contains(u.Username, "ContainerAdministrator") || strings.Contains(u.Username, "ContainerUser") {
219-
_ = level.Warn(logger).Log("msg", "Running as a preconfigured Windows Container user. This may mean you do not have Windows HostProcess containers configured correctly and some functionality will not work as expected.")
247+
logger.Warn("Running as a preconfigured Windows Container user. This may mean you do not have Windows HostProcess containers configured correctly and some functionality will not work as expected.")
220248
}
221249
}
222250

223-
_ = level.Info(logger).Log("msg", fmt.Sprintf("Enabled collectors: %v", strings.Join(enabledCollectorList, ", ")))
251+
logger.Info("Enabled collectors: " + strings.Join(enabledCollectorList, ", "))
224252

225253
mux := http.NewServeMux()
226254
mux.HandleFunc("GET "+*metricsPath, withConcurrencyLimit(*maxRequests, collectors.BuildServeHTTP(logger, *disableExporterMetrics, *timeoutMargin)))
227255
mux.HandleFunc("GET /health", func(w http.ResponseWriter, _ *http.Request) {
228256
w.Header().Set("Content-Type", "application/json")
229-
_, err := fmt.Fprintln(w, `{"status":"ok"}`)
230-
if err != nil {
231-
_ = level.Debug(logger).Log("msg", "Failed to write to stream", "err", err)
257+
if _, err := fmt.Fprintln(w, `{"status":"ok"}`); err != nil {
258+
logger.Debug("Failed to write to stream",
259+
slog.Any("err", err),
260+
)
232261
}
233262
})
234263
mux.HandleFunc("GET /version", func(w http.ResponseWriter, _ *http.Request) {
@@ -255,9 +284,9 @@ func main() {
255284
mux.HandleFunc("GET /debug/pprof/trace", pprof.Trace)
256285
}
257286

258-
_ = level.Info(logger).Log("msg", "Starting windows_exporter", "version", version.Info())
259-
_ = level.Info(logger).Log("msg", "Build context", "build_context", version.BuildContext())
260-
_ = level.Debug(logger).Log("msg", "Go MAXPROCS", "procs", runtime.GOMAXPROCS(0))
287+
logger.Info("Starting windows_exporter", slog.String("version", version.Info()))
288+
logger.Info("Build context", slog.String("build_context", version.BuildContext()))
289+
logger.Debug("Go MAXPROCS", slog.Int("procs", runtime.GOMAXPROCS(0)))
261290

262291
server := &http.Server{
263292
ReadHeaderTimeout: 5 * time.Second,
@@ -269,7 +298,9 @@ func main() {
269298

270299
go func() {
271300
if err := web.ListenAndServe(server, webConfig, logger); err != nil && !errors.Is(err, http.ErrServerClosed) {
272-
_ = level.Error(logger).Log("msg", "cannot start windows_exporter", "err", err)
301+
logger.Error("cannot start windows_exporter",
302+
slog.Any("err", err),
303+
)
273304
os.Exit(1)
274305
}
275306
}()
@@ -279,17 +310,17 @@ func main() {
279310

280311
select {
281312
case <-ctx.Done():
282-
_ = level.Info(logger).Log("msg", "Shutting down windows_exporter via kill signal")
313+
logger.Info("Shutting down windows_exporter via kill signal")
283314
case <-initiate.StopCh:
284-
_ = level.Info(logger).Log("msg", "Shutting down windows_exporter via service control")
315+
logger.Info("Shutting down windows_exporter via service control")
285316
}
286317

287318
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
288319
defer cancel()
289320

290321
_ = server.Shutdown(ctx)
291322

292-
_ = level.Info(logger).Log("msg", "windows_exporter has shut down")
323+
logger.Info("windows_exporter has shut down")
293324
}
294325

295326
func withConcurrencyLimit(n int, next http.HandlerFunc) http.HandlerFunc {

go.mod

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ require (
66
github.com/Microsoft/hcsshim v0.12.6
77
github.com/alecthomas/kingpin/v2 v2.4.0
88
github.com/dimchansky/utfbom v1.1.1
9-
github.com/go-kit/log v0.2.1
109
github.com/go-ole/go-ole v1.3.0
1110
github.com/google/uuid v1.6.0
1211
github.com/pkg/errors v0.9.1
@@ -29,7 +28,6 @@ require (
2928
github.com/containerd/errdefs v0.1.0 // indirect
3029
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
3130
github.com/davecgh/go-spew v1.1.1 // indirect
32-
github.com/go-logfmt/logfmt v0.6.0 // indirect
3331
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
3432
github.com/jpillora/backoff v1.0.0 // indirect
3533
github.com/klauspost/compress v1.17.9 // indirect
@@ -52,3 +50,6 @@ require (
5250
google.golang.org/protobuf v1.34.2 // indirect
5351
gopkg.in/yaml.v2 v2.4.0 // indirect
5452
)
53+
54+
// https://github.com/prometheus/exporter-toolkit/pull/240
55+
replace github.com/prometheus/exporter-toolkit => github.com/lucacome/exporter-toolkit v0.0.0-20240903180955-e5104b3476c7

go.sum

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,6 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
3030
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
3131
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
3232
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
33-
github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
34-
github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
35-
github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
36-
github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
3733
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
3834
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
3935
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
@@ -73,6 +69,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
7369
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
7470
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
7571
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
72+
github.com/lucacome/exporter-toolkit v0.0.0-20240903180955-e5104b3476c7 h1:QYOpQ/29YJ+mMg+KciZiXRr/joFMW3NBNO+wJqeS5bo=
73+
github.com/lucacome/exporter-toolkit v0.0.0-20240903180955-e5104b3476c7/go.mod h1:2uop99EZl80KdXhv/MxVI2181fMcwlsumFOqBecGkG0=
7674
github.com/mdlayher/socket v0.5.1 h1:VZaqt6RkGkt2OE9l3GcC6nZkqD3xKeQLyfleW/uBcos=
7775
github.com/mdlayher/socket v0.5.1/go.mod h1:TjPLHI1UgwEv5J1B5q0zTZq12A/6H7nKmtTanQE37IQ=
7876
github.com/mdlayher/vsock v1.2.1 h1:pC1mTJTvjo1r9n9fbm7S1j04rCgCzhCOS5DY0zqHlnQ=
@@ -92,8 +90,6 @@ github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p
9290
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
9391
github.com/prometheus/common v0.59.1 h1:LXb1quJHWm1P6wq/U824uxYi4Sg0oGvNeUm1z5dJoX0=
9492
github.com/prometheus/common v0.59.1/go.mod h1:GpWM7dewqmVYcd7SmRaiWVe9SSqjf0UrwnYnpEZNuT0=
95-
github.com/prometheus/exporter-toolkit v0.12.0 h1:DkE5RcEZR3lQA2QD5JLVQIf41dFKNsVMXFhgqcif7fo=
96-
github.com/prometheus/exporter-toolkit v0.12.0/go.mod h1:fQH0KtTn0yrrS0S82kqppRjDDiwMfIQUwT+RBRRhwUc=
9793
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
9894
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
9995
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=

pkg/collector/ad/ad.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@ package ad
44

55
import (
66
"errors"
7+
"log/slog"
78

89
"github.com/alecthomas/kingpin/v2"
9-
"github.com/go-kit/log"
10-
"github.com/go-kit/log/level"
1110
"github.com/prometheus-community/windows_exporter/pkg/types"
1211
"github.com/prometheus/client_golang/prometheus"
1312
"github.com/yusufpapurcu/wmi"
@@ -108,15 +107,15 @@ func (c *Collector) GetName() string {
108107
return Name
109108
}
110109

111-
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
110+
func (c *Collector) GetPerfCounter(_ *slog.Logger) ([]string, error) {
112111
return []string{}, nil
113112
}
114113

115-
func (c *Collector) Close(_ log.Logger) error {
114+
func (c *Collector) Close(_ *slog.Logger) error {
116115
return nil
117116
}
118117

119-
func (c *Collector) Build(_ log.Logger, wmiClient *wmi.Client) error {
118+
func (c *Collector) Build(_ *slog.Logger, wmiClient *wmi.Client) error {
120119
if wmiClient == nil || wmiClient.SWbemServicesClient == nil {
121120
return errors.New("wmiClient or SWbemServicesClient is nil")
122121
}
@@ -502,10 +501,12 @@ func (c *Collector) Build(_ log.Logger, wmiClient *wmi.Client) error {
502501

503502
// Collect sends the metric values for each metric
504503
// to the provided prometheus Metric channel.
505-
func (c *Collector) Collect(_ *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
506-
logger = log.With(logger, "collector", Name)
504+
func (c *Collector) Collect(_ *types.ScrapeContext, logger *slog.Logger, ch chan<- prometheus.Metric) error {
505+
logger = logger.With(slog.String("collector", Name))
507506
if err := c.collect(ch); err != nil {
508-
_ = level.Error(logger).Log("msg", "failed collecting ad metrics", "err", err)
507+
logger.Error("failed collecting ad metrics",
508+
slog.Any("err", err),
509+
)
509510
return err
510511
}
511512
return nil

pkg/collector/adcs/adcs.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@ package adcs
44

55
import (
66
"errors"
7+
"log/slog"
78
"strings"
89

910
"github.com/alecthomas/kingpin/v2"
10-
"github.com/go-kit/log"
11-
"github.com/go-kit/log/level"
1211
"github.com/prometheus-community/windows_exporter/pkg/perflib"
1312
"github.com/prometheus-community/windows_exporter/pkg/types"
1413
"github.com/prometheus-community/windows_exporter/pkg/utils"
@@ -60,15 +59,15 @@ func (c *Collector) GetName() string {
6059
return Name
6160
}
6261

63-
func (c *Collector) GetPerfCounter(_ log.Logger) ([]string, error) {
62+
func (c *Collector) GetPerfCounter(_ *slog.Logger) ([]string, error) {
6463
return []string{"Certification Authority"}, nil
6564
}
6665

67-
func (c *Collector) Close(_ log.Logger) error {
66+
func (c *Collector) Close(_ *slog.Logger) error {
6867
return nil
6968
}
7069

71-
func (c *Collector) Build(_ log.Logger, _ *wmi.Client) error {
70+
func (c *Collector) Build(_ *slog.Logger, _ *wmi.Client) error {
7271
c.requestsPerSecond = prometheus.NewDesc(
7372
prometheus.BuildFQName(types.Namespace, Name, "requests_total"),
7473
"Total certificate requests processed",
@@ -151,10 +150,12 @@ func (c *Collector) Build(_ log.Logger, _ *wmi.Client) error {
151150
return nil
152151
}
153152

154-
func (c *Collector) Collect(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
155-
logger = log.With(logger, "collector", Name)
153+
func (c *Collector) Collect(ctx *types.ScrapeContext, logger *slog.Logger, ch chan<- prometheus.Metric) error {
154+
logger = logger.With(slog.String("collector", Name))
156155
if err := c.collectADCSCounters(ctx, logger, ch); err != nil {
157-
_ = level.Error(logger).Log("msg", "failed collecting ADCS metrics", "err", err)
156+
logger.Error("failed collecting ADCS metrics",
157+
slog.Any("err", err),
158+
)
158159
return err
159160
}
160161
return nil
@@ -177,7 +178,7 @@ type perflibADCS struct {
177178
SignedCertificateTimestampListProcessingTime float64 `perflib:"Signed Certificate Timestamp List processing time (ms)"`
178179
}
179180

180-
func (c *Collector) collectADCSCounters(ctx *types.ScrapeContext, logger log.Logger, ch chan<- prometheus.Metric) error {
181+
func (c *Collector) collectADCSCounters(ctx *types.ScrapeContext, logger *slog.Logger, ch chan<- prometheus.Metric) error {
181182
dst := make([]perflibADCS, 0)
182183
if _, ok := ctx.PerfObjects["Certification Authority"]; !ok {
183184
return errors.New("perflib did not contain an entry for Certification Authority")

0 commit comments

Comments
 (0)