Skip to content

Commit e50b066

Browse files
committed
add auto gomemlimit
Signed-off-by: Markus Blaschke <[email protected]>
1 parent c13ec54 commit e50b066

File tree

6 files changed

+96
-18
lines changed

6 files changed

+96
-18
lines changed

logger.go renamed to common.logger.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
package main
22

33
import (
4+
"log/slog"
5+
46
"go.uber.org/zap"
7+
"go.uber.org/zap/exp/zapslog"
58
"go.uber.org/zap/zapcore"
69
)
710

811
var (
9-
logger *zap.SugaredLogger
12+
logger *zap.SugaredLogger
13+
slogger *slog.Logger
1014
)
1115

1216
func initLogger() *zap.SugaredLogger {
1317
var config zap.Config
14-
if opts.Logger.Development {
18+
if Opts.Logger.Development {
1519
config = zap.NewDevelopmentConfig()
1620
config.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
1721
} else {
@@ -22,12 +26,12 @@ func initLogger() *zap.SugaredLogger {
2226
config.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
2327

2428
// debug level
25-
if opts.Logger.Debug {
29+
if Opts.Logger.Debug {
2630
config.Level = zap.NewAtomicLevelAt(zapcore.DebugLevel)
2731
}
2832

2933
// json log format
30-
if opts.Logger.Json {
34+
if Opts.Logger.Json {
3135
config.Encoding = "json"
3236

3337
// if running in containers, logs already enriched with timestamp by the container runtime
@@ -39,6 +43,9 @@ func initLogger() *zap.SugaredLogger {
3943
if err != nil {
4044
panic(err)
4145
}
46+
4247
logger = log.Sugar()
48+
slogger = slog.New(zapslog.NewHandler(log.Core(), nil))
49+
4350
return logger
4451
}

common.system.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package main
2+
3+
import (
4+
"github.com/KimMachineGun/automemlimit/memlimit"
5+
humanize "github.com/dustin/go-humanize"
6+
)
7+
8+
func initSystem() {
9+
// set memory limit
10+
goMemLimit, err := memlimit.SetGoMemLimitWithOpts(
11+
memlimit.WithProvider(
12+
memlimit.ApplyFallback(
13+
memlimit.FromCgroup,
14+
memlimit.FromSystem,
15+
),
16+
),
17+
memlimit.WithLogger(slogger),
18+
)
19+
20+
if goMemLimit > 0 {
21+
logger.Infof(`GOMEMLIMIT updated to %v`, humanize.Bytes(uint64(goMemLimit)))
22+
}
23+
24+
if err != nil {
25+
logger.Fatal(err)
26+
}
27+
}

go.mod

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,32 @@ module github.com/webdevops/fenecon-exporter
33
go 1.23
44

55
require (
6+
github.com/KimMachineGun/automemlimit v0.6.1
7+
github.com/dustin/go-humanize v1.0.1
68
github.com/go-resty/resty/v2 v2.14.0
79
github.com/jessevdk/go-flags v1.6.1
810
github.com/prometheus/client_golang v1.20.3
911
github.com/remeh/sizedwaitgroup v1.0.0
1012
go.uber.org/zap v1.27.0
13+
go.uber.org/zap/exp v0.2.0
1114
)
1215

1316
require (
1417
github.com/beorn7/perks v1.0.1 // indirect
1518
github.com/cespare/xxhash/v2 v2.3.0 // indirect
19+
github.com/cilium/ebpf v0.9.1 // indirect
20+
github.com/containerd/cgroups/v3 v3.0.1 // indirect
21+
github.com/coreos/go-systemd/v22 v22.3.2 // indirect
22+
github.com/docker/go-units v0.4.0 // indirect
23+
github.com/godbus/dbus/v5 v5.0.4 // indirect
1624
github.com/klauspost/compress v1.17.9 // indirect
1725
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
26+
github.com/opencontainers/runtime-spec v1.0.2 // indirect
27+
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect
1828
github.com/prometheus/client_model v0.6.1 // indirect
1929
github.com/prometheus/common v0.59.1 // indirect
2030
github.com/prometheus/procfs v0.15.1 // indirect
31+
github.com/sirupsen/logrus v1.8.1 // indirect
2132
go.uber.org/multierr v1.11.0 // indirect
2233
golang.org/x/net v0.29.0 // indirect
2334
golang.org/x/sys v0.25.0 // indirect

go.sum

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,45 @@
1+
github.com/KimMachineGun/automemlimit v0.6.1 h1:ILa9j1onAAMadBsyyUJv5cack8Y1WT26yLj/V+ulKp8=
2+
github.com/KimMachineGun/automemlimit v0.6.1/go.mod h1:T7xYht7B8r6AG/AqFcUdc7fzd2bIdBKmepfP2S1svPY=
13
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
24
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
35
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
46
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
7+
github.com/cilium/ebpf v0.9.1 h1:64sn2K3UKw8NbP/blsixRpF3nXuyhz/VjRlRzvlBRu4=
8+
github.com/cilium/ebpf v0.9.1/go.mod h1:+OhNOIXx/Fnu1IE8bJz2dzOA+VSfyTfdNUVdlQnxUFY=
9+
github.com/containerd/cgroups/v3 v3.0.1 h1:4hfGvu8rfGIwVIDd+nLzn/B9ZXx4BcCjzt5ToenJRaE=
10+
github.com/containerd/cgroups/v3 v3.0.1/go.mod h1:/vtwk1VXrtoa5AaZLkypuOJgA/6DyPMZHJPGQNtlHnw=
11+
github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI=
12+
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
513
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
614
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
15+
github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
16+
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
17+
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
18+
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
19+
github.com/frankban/quicktest v1.14.0 h1:+cqqvzZV87b4adx/5ayVOaYZ2CrvM4ejQvUdBzPPUss=
20+
github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og=
721
github.com/go-resty/resty/v2 v2.14.0 h1:/rhkzsAqGQkozwfKS5aFAbb6TyKd3zyFRWcdRXLPCAU=
822
github.com/go-resty/resty/v2 v2.14.0/go.mod h1:IW6mekUOsElt9C7oWr0XRt9BNSD6D5rr9mhk6NjmNHg=
23+
github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA=
24+
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
925
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
1026
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
1127
github.com/jessevdk/go-flags v1.6.1 h1:Cvu5U8UGrLay1rZfv/zP7iLpSHGUZ/Ou68T0iX1bBK4=
1228
github.com/jessevdk/go-flags v1.6.1/go.mod h1:Mk8T1hIAWpOiJiHa9rJASDK2UGWji0EuPGBnNLMooyc=
1329
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
1430
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
31+
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
32+
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
33+
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
34+
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
1535
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
1636
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
1737
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
1838
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
39+
github.com/opencontainers/runtime-spec v1.0.2 h1:UfAcuLBJB9Coz72x1hgl8O5RVzTdNiaglX6v2DM6FI0=
40+
github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
41+
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0=
42+
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y=
1943
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
2044
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
2145
github.com/prometheus/client_golang v1.20.3 h1:oPksm4K8B+Vt35tUhw6GbSNSgVlVSBH0qELP/7u83l4=
@@ -28,6 +52,11 @@ github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0leargg
2852
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
2953
github.com/remeh/sizedwaitgroup v1.0.0 h1:VNGGFwNo/R5+MJBf6yrsr110p0m4/OX4S3DCy7Kyl5E=
3054
github.com/remeh/sizedwaitgroup v1.0.0/go.mod h1:3j2R4OIe/SeS6YDhICBy22RWjJC5eNCJ1V+9+NVNYlo=
55+
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
56+
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
57+
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
58+
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
59+
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
3160
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
3261
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
3362
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
@@ -37,6 +66,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
3766
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
3867
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
3968
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
69+
go.uber.org/zap/exp v0.2.0 h1:FtGenNNeCATRB3CmB/yEUnjEFeJWpB/pMcy7e2bKPYs=
70+
go.uber.org/zap/exp v0.2.0/go.mod h1:t0gqAIdh1MfKv9EwN/dLwfZnJxe9ITAZN78HEWPFWDQ=
4071
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
4172
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
4273
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
@@ -66,6 +97,7 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
6697
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
6798
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
6899
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
100+
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
69101
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
70102
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
71103
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=

main.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const (
2020

2121
var (
2222
argparser *flags.Parser
23-
opts config.Opts
23+
Opts config.Opts
2424

2525
// Git version information
2626
gitCommit = "<unknown>"
@@ -32,14 +32,15 @@ func main() {
3232
initLogger()
3333

3434
logger.Infof("starting fenecon-exporter v%s (%s; %s; by %v)", gitTag, gitCommit, runtime.Version(), Author)
35-
logger.Info(string(opts.GetJson()))
35+
logger.Info(string(Opts.GetJson()))
36+
initSystem()
3637

37-
logger.Infof("starting http server on %s", opts.Server.Bind)
38+
logger.Infof("starting http server on %s", Opts.Server.Bind)
3839
startHttpServer()
3940
}
4041

4142
func initArgparser() {
42-
argparser = flags.NewParser(&opts, flags.Default)
43+
argparser = flags.NewParser(&Opts, flags.Default)
4344
_, err := argparser.Parse()
4445

4546
// check if there is an parse error
@@ -77,10 +78,10 @@ func startHttpServer() {
7778
mux.HandleFunc("/probe", probeFenecon)
7879

7980
srv := &http.Server{
80-
Addr: opts.Server.Bind,
81+
Addr: Opts.Server.Bind,
8182
Handler: mux,
82-
ReadTimeout: opts.Server.ReadTimeout,
83-
WriteTimeout: opts.Server.WriteTimeout,
83+
ReadTimeout: Opts.Server.ReadTimeout,
84+
WriteTimeout: Opts.Server.WriteTimeout,
8485
}
8586
logger.Fatal(srv.ListenAndServe())
8687
}

probe.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ const (
2020
func newFeneconProber(ctx context.Context, registry *prometheus.Registry, logger *zap.SugaredLogger) *fenecon.FeneconProber {
2121
sp := fenecon.New(ctx, registry, logger)
2222
sp.SetUserAgent(UserAgent + gitTag)
23-
sp.SetTimeout(opts.Fenecon.Request.Timeout)
24-
sp.SetParallelRequests(opts.Fenecon.Request.Parallel)
23+
sp.SetTimeout(Opts.Fenecon.Request.Timeout)
24+
sp.SetParallelRequests(Opts.Fenecon.Request.Parallel)
2525
sp.SetRetry(
26-
opts.Fenecon.Request.RetryCount,
27-
opts.Fenecon.Request.RetryWaitTime,
28-
opts.Fenecon.Request.RetryMaxWaitTime,
26+
Opts.Fenecon.Request.RetryCount,
27+
Opts.Fenecon.Request.RetryWaitTime,
28+
Opts.Fenecon.Request.RetryMaxWaitTime,
2929
)
30-
if len(opts.Fenecon.Auth.Password) >= 1 {
31-
sp.SetHttpAuth(opts.Fenecon.Auth.Username, opts.Fenecon.Auth.Password)
30+
if len(Opts.Fenecon.Auth.Password) >= 1 {
31+
sp.SetHttpAuth(Opts.Fenecon.Auth.Username, Opts.Fenecon.Auth.Password)
3232
}
3333

3434
return sp

0 commit comments

Comments
 (0)