Skip to content

Commit aac3a58

Browse files
authored
Remove containerd/cgroups v1 dependency (#36)
* update test * move cgroup1 dependency to latest release * remove unneeded code * update test to remove unneeded logger * remove cgroupv1 depencies * update tests
1 parent 00c65eb commit aac3a58

File tree

9 files changed

+25
-64
lines changed

9 files changed

+25
-64
lines changed

cgroup_exporter.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
"strings"
2121

2222
"github.com/alecthomas/kingpin/v2"
23-
"github.com/containerd/cgroups"
23+
"github.com/containerd/cgroups/v3"
2424
"github.com/go-kit/log"
2525
"github.com/go-kit/log/level"
2626
"github.com/prometheus/client_golang/prometheus"

cgroup_exporter_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func TestMetricsHandlerBadPath(t *testing.T) {
9191
t.Fatalf("Unexpected error GET /metrics: %s", err.Error())
9292
}
9393
if !strings.Contains(body, "cgroup_exporter_collect_error{cgroup=\"/dne\"} 1") {
94-
t.Errorf("Unexpected value for cgroup_memory_used_bytes")
94+
t.Errorf("Unexpected value for cgroup_exporter_collect_error: %s", body)
9595
}
9696
}
9797

collector/cgroupv1.go

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
"strings"
2222
"sync"
2323

24-
"github.com/containerd/cgroups"
24+
"github.com/containerd/cgroups/v3/cgroup1"
2525
"github.com/go-kit/log"
2626
"github.com/go-kit/log/level"
2727
)
@@ -30,10 +30,10 @@ func NewCgroupV1Collector(paths []string, logger log.Logger) Collector {
3030
return NewExporter(paths, logger, false)
3131
}
3232

33-
func subsystem() ([]cgroups.Subsystem, error) {
34-
s := []cgroups.Subsystem{
35-
cgroups.NewCpuacct(*CgroupRoot),
36-
cgroups.NewMemory(*CgroupRoot),
33+
func subsystem() ([]cgroup1.Subsystem, error) {
34+
s := []cgroup1.Subsystem{
35+
cgroup1.NewCpuacct(*CgroupRoot),
36+
cgroup1.NewMemory(*CgroupRoot),
3737
}
3838
return s, nil
3939
}
@@ -75,7 +75,7 @@ func getInfov1(name string, metric *CgroupMetric, logger log.Logger) {
7575
}
7676
}
7777

78-
func getNamev1(p cgroups.Process, path string, logger log.Logger) (string, error) {
78+
func getNamev1(p cgroup1.Process, logger log.Logger) (string, error) {
7979
cpuacctPath := filepath.Join(*CgroupRoot, "cpuacct")
8080
name := strings.TrimPrefix(p.Path, cpuacctPath)
8181
name = strings.TrimSuffix(name, "/")
@@ -103,15 +103,13 @@ func getNamev1(p cgroups.Process, path string, logger log.Logger) (string, error
103103
func (e *Exporter) getMetricsv1(name string, pids map[string][]int) (CgroupMetric, error) {
104104
metric := CgroupMetric{name: name}
105105
level.Debug(e.logger).Log("msg", "Loading cgroup", "root", *CgroupRoot, "path", name)
106-
ctrl, err := cgroups.Load(subsystem, func(subsystem cgroups.Name) (string, error) {
107-
return name, nil
108-
})
106+
ctrl, err := cgroup1.Load(cgroup1.StaticPath(name), cgroup1.WithHiearchy(subsystem))
109107
if err != nil {
110108
level.Error(e.logger).Log("msg", "Failed to load cgroups", "path", name, "err", err)
111109
metric.err = true
112110
return metric, err
113111
}
114-
stats, err := ctrl.Stat(cgroups.IgnoreNotExist)
112+
stats, err := ctrl.Stat(cgroup1.IgnoreNotExist)
115113
if err != nil {
116114
level.Error(e.logger).Log("msg", "Failed to stat cgroups", "path", name, "err", err)
117115
metric.err = true
@@ -166,14 +164,14 @@ func (e *Exporter) collectv1() ([]CgroupMetric, error) {
166164
var metrics []CgroupMetric
167165
for _, path := range e.paths {
168166
level.Debug(e.logger).Log("msg", "Loading cgroup", "root", *CgroupRoot, "path", path)
169-
control, err := cgroups.Load(subsystem, cgroups.StaticPath(path))
167+
control, err := cgroup1.Load(cgroup1.StaticPath(path), cgroup1.WithHiearchy(subsystem))
170168
if err != nil {
171169
level.Error(e.logger).Log("msg", "Error loading cgroup subsystem", "root", *CgroupRoot, "path", path, "err", err)
172170
metric := CgroupMetric{name: path, err: true}
173171
metrics = append(metrics, metric)
174172
continue
175173
}
176-
processes, err := control.Processes(cgroups.Cpuacct, true)
174+
processes, err := control.Processes(cgroup1.Cpuacct, true)
177175
if err != nil {
178176
level.Error(e.logger).Log("msg", "Error loading cgroup processes", "path", path, "err", err)
179177
metric := CgroupMetric{name: path, err: true}
@@ -184,7 +182,7 @@ func (e *Exporter) collectv1() ([]CgroupMetric, error) {
184182
pids := make(map[string][]int)
185183
for _, p := range processes {
186184
level.Debug(e.logger).Log("msg", "Get Name", "process", p.Path, "pid", p.Pid, "path", path)
187-
name, err := getNamev1(p, path, e.logger)
185+
name, err := getNamev1(p, e.logger)
188186
if err != nil {
189187
level.Error(e.logger).Log("msg", "Error getting cgroup name for process", "process", p.Path, "path", path, "err", err)
190188
continue

collector/cgroupv1_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func TestCollectUserSlice(t *testing.T) {
5353
if val := metrics[0].memoryCache; val != 2322432 {
5454
t.Errorf("Unexpected value for memoryCache, got %v", val)
5555
}
56-
if val := metrics[0].memoryUsed; val != 8081408 {
56+
if val := metrics[0].memoryUsed; val != 27115520 {
5757
t.Errorf("Unexpected value for memoryUsed, got %v", val)
5858
}
5959
if val := metrics[0].memoryTotal; val != 68719476736 {

collector/cgroupv2.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,9 @@ func getNamev2(pidPath string, path string, logger log.Logger) string {
112112
return name
113113
}
114114

115-
func getStatv2(name string, path string, logger log.Logger) (float64, error) {
115+
func getStatv2(name string, path string) (float64, error) {
116116
if !fileExists(path) {
117-
return 0, fmt.Errorf("Path %s does not exist", path)
117+
return 0, fmt.Errorf("path %s does not exist", path)
118118
}
119119
f, err := os.Open(path)
120120
if err != nil {
@@ -134,7 +134,7 @@ func getStatv2(name string, path string, logger log.Logger) (float64, error) {
134134
return float64(v), nil
135135
}
136136
}
137-
return 0, fmt.Errorf("Unable to find stat key %s in %s", name, path)
137+
return 0, fmt.Errorf("unable to find stat key %s in %s", name, path)
138138
}
139139

140140
func (e *Exporter) getMetricsv2(name string, pids []int, opts cgroup2.InitOpts) (CgroupMetric, error) {
@@ -164,7 +164,7 @@ func (e *Exporter) getMetricsv2(name string, pids []int, opts cgroup2.InitOpts)
164164
}
165165
// TODO: Move to https://github.com/containerd/cgroups/blob/d131035c7599c51ff4aed27903c45eb3b2cc29d0/cgroup2/manager.go#L593
166166
memoryStatPath := filepath.Join(*CgroupRoot, name, "memory.stat")
167-
swapcached, err := getStatv2("swapcached", memoryStatPath, e.logger)
167+
swapcached, err := getStatv2("swapcached", memoryStatPath)
168168
if err != nil {
169169
level.Error(e.logger).Log("msg", "Unable to get swapcached", "path", name, "err", err)
170170
metric.err = true

collector/cgroupv2_test.go

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,33 +23,31 @@ import (
2323
)
2424

2525
func TestGetStatv2(t *testing.T) {
26-
w := log.NewSyncWriter(os.Stderr)
27-
logger := log.NewLogfmtLogger(w)
28-
_, err := getStatv2("swapcached", "/dne", logger)
26+
_, err := getStatv2("swapcached", "/dne")
2927
if err == nil {
3028
t.Errorf("Expected error with /dne but none given")
3129
}
3230
path := filepath.Join(*CgroupRoot, "system.slice")
33-
_, err = getStatv2("swapcached", path, logger)
31+
_, err = getStatv2("swapcached", path)
3432
if err == nil {
3533
t.Errorf("Expected error with /dne but none given")
3634
}
3735
path = filepath.Join(*CgroupRoot, "user.slice/user-20821.slice/memory.max")
38-
_, err = getStatv2("swapcached", path, logger)
36+
_, err = getStatv2("swapcached", path)
3937
if err == nil {
4038
t.Errorf("Expected error with single value file but none given")
4139
}
4240
path = filepath.Join(*CgroupRoot, "stat.invalid")
43-
_, err = getStatv2("nan", path, logger)
41+
_, err = getStatv2("nan", path)
4442
if err == nil {
4543
t.Errorf("Expected error with stat.invalid but none given")
4644
}
4745
path = filepath.Join(*CgroupRoot, "user.slice/user-20821.slice/memory.stat")
48-
_, err = getStatv2("dne", path, logger)
46+
_, err = getStatv2("dne", path)
4947
if err == nil {
5048
t.Errorf("Expected error when stat key missing but none given")
5149
}
52-
stat, err := getStatv2("swapcached", path, logger)
50+
stat, err := getStatv2("swapcached", path)
5351
if err != nil {
5452
t.Errorf("Unexpected error: %s", err)
5553
}

fixtures.ttar

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5124,7 +5124,7 @@ Mode: 644
51245124
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
51255125
Path: fixtures/memory/user.slice/user-20821.slice/memory.usage_in_bytes
51265126
Lines: 1
5127-
8081408
5127+
27115520
51285128
Mode: 644
51295129
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
51305130
Path: fixtures/memory/user.slice/user-20821.slice/memory.use_hierarchy

go.mod

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ go 1.22
44

55
require (
66
github.com/alecthomas/kingpin/v2 v2.4.0
7-
github.com/containerd/cgroups v1.1.0
87
github.com/containerd/cgroups/v3 v3.0.3
98
github.com/go-kit/log v0.2.1
109
github.com/prometheus/client_golang v1.19.1
@@ -21,7 +20,6 @@ require (
2120
github.com/docker/go-units v0.5.0 // indirect
2221
github.com/go-logfmt/logfmt v0.6.0 // indirect
2322
github.com/godbus/dbus/v5 v5.1.0 // indirect
24-
github.com/gogo/protobuf v1.3.2 // indirect
2523
github.com/opencontainers/runtime-spec v1.2.0 // indirect
2624
github.com/prometheus/client_model v0.6.1 // indirect
2725
github.com/sirupsen/logrus v1.9.3 // indirect

go.sum

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF
88
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
99
github.com/cilium/ebpf v0.15.0 h1:7NxJhNiBT3NG8pZJ3c+yfrVdHY8ScgKD27sScgjLMMk=
1010
github.com/cilium/ebpf v0.15.0/go.mod h1:DHp1WyrLeiBh19Cf/tfiSMhqheEiK8fXFZ4No0P1Hso=
11-
github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM=
12-
github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw=
1311
github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0=
1412
github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0=
1513
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
@@ -28,12 +26,8 @@ github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZs
2826
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
2927
github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
3028
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
31-
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
32-
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
3329
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
3430
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
35-
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
36-
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
3731
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
3832
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
3933
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
@@ -61,40 +55,13 @@ github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ
6155
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
6256
github.com/xhit/go-str2duration/v2 v2.1.0 h1:lxklc02Drh6ynqX+DdPyp5pCKLUQpRT8bp8Ydu2Bstc=
6357
github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU=
64-
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
65-
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
6658
go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA=
6759
go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
68-
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
69-
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
70-
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
7160
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM=
7261
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc=
73-
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
74-
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
75-
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
76-
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
77-
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
78-
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
79-
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
80-
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
81-
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
82-
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
83-
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
84-
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
8562
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
8663
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
8764
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
88-
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
89-
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
90-
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
91-
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
92-
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
93-
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
94-
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
95-
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
96-
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
97-
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
9865
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
9966
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
10067
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

0 commit comments

Comments
 (0)