diff --git a/go.mod b/go.mod index 87ece42..1026069 100644 --- a/go.mod +++ b/go.mod @@ -1,10 +1,9 @@ module github.com/xruins/docker_state_exporter -go 1.23.4 +go 1.26 require ( github.com/docker/docker v27.4.0+incompatible - github.com/go-kit/kit v0.13.0 github.com/prometheus/client_golang v1.20.5 ) @@ -17,8 +16,6 @@ require ( github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/go-kit/log v0.2.1 // indirect - github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -41,8 +38,7 @@ require ( go.opentelemetry.io/otel/sdk v1.33.0 // indirect go.opentelemetry.io/otel/trace v1.33.0 // indirect golang.org/x/sys v0.28.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 // indirect + golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 // indirect google.golang.org/protobuf v1.35.2 // indirect gotest.tools/v3 v3.5.1 // indirect ) diff --git a/go.sum b/go.sum index 29a8095..d173d49 100644 --- a/go.sum +++ b/go.sum @@ -22,12 +22,6 @@ github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4 github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/go-kit/kit v0.13.0 h1:OoneCcHKHQ03LfBpoQCUfCluwd2Vt3ohz+kvbJneZAU= -github.com/go-kit/kit v0.13.0/go.mod h1:phqEHMMUbyrCFCTgH48JueqrM3md2HcAZ8N3XE4FKDg= -github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= -github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= diff --git a/main.go b/main.go index 930c98b..ebabfbb 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "context" "flag" "fmt" + "log/slog" "net/http" "os" "os/signal" @@ -16,7 +17,6 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/docker/docker/client" - "github.com/go-kit/kit/log" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" ) @@ -26,9 +26,14 @@ const ( cachePeriod = 1 * time.Second ) +type ContainerClient interface { + ContainerList(ctx context.Context, options container.ListOptions) ([]types.Container, error) + ContainerInspect(ctx context.Context, containerID string) (types.ContainerJSON, error) +} + type dockerHealthCollector struct { mu sync.Mutex - containerClient *client.Client + containerClient ContainerClient containerInfoCache []types.ContainerJSON lastseen time.Time } @@ -153,23 +158,11 @@ func (c *dockerHealthCollector) collectContainer() { } } -type loggerWrapper struct { - Logger *log.Logger -} - -func (l *loggerWrapper) Println(v ...interface{}) { - (*l.Logger).Log("messages", v) -} - -// Define loggers. -var ( - normalLogger = log.NewJSONLogger(log.NewSyncWriter(os.Stdout)) - errorLogger = log.NewJSONLogger(log.NewSyncWriter(os.Stderr)) -) +var logger *slog.Logger func errCheck(err error) { if err != nil { - errorLogger.Log("message", err) + logger.Error("error occurred", "err", err) os.Exit(1) } } @@ -180,10 +173,11 @@ var ( ) func init() { - normalLogger = log.With(normalLogger, "timestamp", log.DefaultTimestampUTC) - normalLogger = log.With(normalLogger, "severity", "info") - errorLogger = log.With(errorLogger, "timestamp", log.DefaultTimestampUTC) - errorLogger = log.With(errorLogger, "severity", "error") + opts := &slog.HandlerOptions{ + Level: slog.LevelInfo, + } + handler := slog.NewJSONHandler(os.Stdout, opts) + logger = slog.New(handler) prometheus.MustRegister(prometheus.NewBuildInfoCollector()) } @@ -211,9 +205,9 @@ func main() { http.Handle("/metrics", promhttp.HandlerFor( prometheus.DefaultGatherer, - promhttp.HandlerOpts{ErrorLog: &loggerWrapper{Logger: &errorLogger}, EnableOpenMetrics: true})) + promhttp.HandlerOpts{EnableOpenMetrics: true})) - normalLogger.Log("message", "Server listening...", "address", address) + logger.Info("Server listening", "address", *address) server := &http.Server{Addr: *address, Handler: nil} @@ -227,12 +221,12 @@ func main() { quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGTERM, os.Interrupt) <-quit - normalLogger.Log("message", "Server shutting down...") + logger.Info("Server shutting down") ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() if err := server.Shutdown(ctx); err != nil { - errorLogger.Log("message", fmt.Sprintf("Failed to gracefully shutdown: %v", err)) + logger.Error("Failed to gracefully shutdown", "err", err) } - normalLogger.Log("message", "Server shutdown") + logger.Info("Server shutdown") }