diff --git a/metrics/cgroups/cgroups.go b/metrics/cgroups/cgroups.go index 46cce4241..137eb33df 100644 --- a/metrics/cgroups/cgroups.go +++ b/metrics/cgroups/cgroups.go @@ -75,7 +75,14 @@ func (m *cgroupsMonitor) Monitor(c runtime.Task) error { func (m *cgroupsMonitor) Stop(c runtime.Task) error { info := c.Info() t := c.(*linux.Task) - m.collector.collect(info.ID, info.Namespace, t.Cgroup(), m.collector.storedMetrics, false, nil) + + cgroup, err := t.Cgroup() + if err != nil { + log.G(m.context).WithError(err).Warnf("unable to retrieve cgroup on stop") + } else { + m.collector.collect(info.ID, info.Namespace, cgroup, m.collector.storedMetrics, false, nil) + } + m.collector.Remove(info.ID, info.Namespace) return nil } diff --git a/metrics/cgroups/metrics.go b/metrics/cgroups/metrics.go index f5a29b86a..92ba8a886 100644 --- a/metrics/cgroups/metrics.go +++ b/metrics/cgroups/metrics.go @@ -8,9 +8,9 @@ import ( "sync" "github.com/containerd/cgroups" + "github.com/containerd/containerd/log" metrics "github.com/docker/go-metrics" "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" ) var ( @@ -97,9 +97,10 @@ func (c *collector) collect(id, namespace string, cg cgroups.Cgroup, ch chan<- p if wg != nil { defer wg.Done() } + stats, err := cg.Stat(cgroups.IgnoreNotExist) if err != nil { - logrus.WithError(err).Errorf("stat cgroup %s", id) + log.L.WithError(err).Errorf("stat cgroup %s", id) return } for _, m := range c.metrics {