replaced a logger with slog package
This commit is contained in:
@@ -1,10 +1,9 @@
|
|||||||
module github.com/xruins/docker_state_exporter
|
module github.com/xruins/docker_state_exporter
|
||||||
|
|
||||||
go 1.23.4
|
go 1.26
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/docker/docker v27.4.0+incompatible
|
github.com/docker/docker v27.4.0+incompatible
|
||||||
github.com/go-kit/kit v0.13.0
|
|
||||||
github.com/prometheus/client_golang v1.20.5
|
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-connections v0.5.0 // indirect
|
||||||
github.com/docker/go-units v0.5.0 // indirect
|
github.com/docker/go-units v0.5.0 // indirect
|
||||||
github.com/felixge/httpsnoop v1.0.4 // 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/logr v1.4.2 // indirect
|
||||||
github.com/go-logr/stdr v1.2.2 // indirect
|
github.com/go-logr/stdr v1.2.2 // indirect
|
||||||
github.com/gogo/protobuf v1.3.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/sdk v1.33.0 // indirect
|
||||||
go.opentelemetry.io/otel/trace v1.33.0 // indirect
|
go.opentelemetry.io/otel/trace v1.33.0 // indirect
|
||||||
golang.org/x/sys v0.28.0 // indirect
|
golang.org/x/sys v0.28.0 // indirect
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 // indirect
|
golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 // indirect
|
|
||||||
google.golang.org/protobuf v1.35.2 // indirect
|
google.golang.org/protobuf v1.35.2 // indirect
|
||||||
gotest.tools/v3 v3.5.1 // indirect
|
gotest.tools/v3 v3.5.1 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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/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 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
|
||||||
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
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.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 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
|
||||||
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log/slog"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
@@ -16,7 +17,6 @@ import (
|
|||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/client"
|
"github.com/docker/docker/client"
|
||||||
"github.com/go-kit/kit/log"
|
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
"github.com/prometheus/client_golang/prometheus/promhttp"
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||||
)
|
)
|
||||||
@@ -26,9 +26,14 @@ const (
|
|||||||
cachePeriod = 1 * time.Second
|
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 {
|
type dockerHealthCollector struct {
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
containerClient *client.Client
|
containerClient ContainerClient
|
||||||
containerInfoCache []types.ContainerJSON
|
containerInfoCache []types.ContainerJSON
|
||||||
lastseen time.Time
|
lastseen time.Time
|
||||||
}
|
}
|
||||||
@@ -153,23 +158,11 @@ func (c *dockerHealthCollector) collectContainer() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type loggerWrapper struct {
|
var logger *slog.Logger
|
||||||
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))
|
|
||||||
)
|
|
||||||
|
|
||||||
func errCheck(err error) {
|
func errCheck(err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errorLogger.Log("message", err)
|
logger.Error("error occurred", "err", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -180,10 +173,11 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
normalLogger = log.With(normalLogger, "timestamp", log.DefaultTimestampUTC)
|
opts := &slog.HandlerOptions{
|
||||||
normalLogger = log.With(normalLogger, "severity", "info")
|
Level: slog.LevelInfo,
|
||||||
errorLogger = log.With(errorLogger, "timestamp", log.DefaultTimestampUTC)
|
}
|
||||||
errorLogger = log.With(errorLogger, "severity", "error")
|
handler := slog.NewJSONHandler(os.Stdout, opts)
|
||||||
|
logger = slog.New(handler)
|
||||||
prometheus.MustRegister(prometheus.NewBuildInfoCollector())
|
prometheus.MustRegister(prometheus.NewBuildInfoCollector())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -211,9 +205,9 @@ func main() {
|
|||||||
|
|
||||||
http.Handle("/metrics", promhttp.HandlerFor(
|
http.Handle("/metrics", promhttp.HandlerFor(
|
||||||
prometheus.DefaultGatherer,
|
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}
|
server := &http.Server{Addr: *address, Handler: nil}
|
||||||
|
|
||||||
@@ -227,12 +221,12 @@ func main() {
|
|||||||
quit := make(chan os.Signal, 1)
|
quit := make(chan os.Signal, 1)
|
||||||
signal.Notify(quit, syscall.SIGTERM, os.Interrupt)
|
signal.Notify(quit, syscall.SIGTERM, os.Interrupt)
|
||||||
<-quit
|
<-quit
|
||||||
normalLogger.Log("message", "Server shutting down...")
|
logger.Info("Server shutting down")
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
if err := server.Shutdown(ctx); err != nil {
|
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")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user