From 3ce98a46c47066eb02e29f93206d29c00945db48 Mon Sep 17 00:00:00 2001 From: Florian Koch Date: Wed, 1 Jun 2016 08:17:24 +0200 Subject: [PATCH] add cgropu swap usage and export as prometheus metric --- container/libcontainer/helpers.go | 1 + info/v1/container.go | 4 ++++ metrics/prometheus.go | 7 +++++++ metrics/prometheus_test.go | 1 + metrics/testdata/prometheus_metrics | 3 +++ 5 files changed, 16 insertions(+) diff --git a/container/libcontainer/helpers.go b/container/libcontainer/helpers.go index 77fa1869..05d0c6e9 100644 --- a/container/libcontainer/helpers.go +++ b/container/libcontainer/helpers.go @@ -383,6 +383,7 @@ func setMemoryStats(s *cgroups.Stats, ret *info.ContainerStats) { ret.Memory.Failcnt = s.MemoryStats.Usage.Failcnt ret.Memory.Cache = s.MemoryStats.Stats["cache"] ret.Memory.RSS = s.MemoryStats.Stats["rss"] + ret.Memory.Swap = s.MemoryStats.Stats["swap"] if v, ok := s.MemoryStats.Stats["pgfault"]; ok { ret.Memory.ContainerData.Pgfault = v ret.Memory.HierarchicalData.Pgfault = v diff --git a/info/v1/container.go b/info/v1/container.go index cfbdd03a..21c85bd2 100644 --- a/info/v1/container.go +++ b/info/v1/container.go @@ -338,6 +338,10 @@ type MemoryStats struct { // Units: Bytes. RSS uint64 `json:"rss"` + // The amount of swap currently used by the processes in this cgroup + // Units: Bytes. + Swap uint64 `json:"swap"` + // The amount of working set memory, this includes recently accessed memory, // dirty memory, and kernel memory. Working set is <= "usage". // Units: Bytes. diff --git a/metrics/prometheus.go b/metrics/prometheus.go index 96879f1f..0e7e8fba 100644 --- a/metrics/prometheus.go +++ b/metrics/prometheus.go @@ -166,6 +166,13 @@ func NewPrometheusCollector(infoProvider infoProvider, f ContainerNameToLabelsFu getValues: func(s *info.ContainerStats) metricValues { return metricValues{{value: float64(s.Memory.RSS)}} }, + }, { + name: "container_memory_swap", + help: "Container swap usage in bytes.", + valueType: prometheus.GaugeValue, + getValues: func(s *info.ContainerStats) metricValues { + return metricValues{{value: float64(s.Memory.Swap)}} + }, }, { name: "container_memory_failcnt", help: "Number of memory usage hits limits", diff --git a/metrics/prometheus_test.go b/metrics/prometheus_test.go index e1e18e9b..8c54097e 100644 --- a/metrics/prometheus_test.go +++ b/metrics/prometheus_test.go @@ -99,6 +99,7 @@ func (p testSubcontainersInfoProvider) SubcontainersInfo(string, *info.Container }, Cache: 14, RSS: 15, + Swap: 8192, }, Network: info.NetworkStats{ InterfaceStats: info.InterfaceStats{ diff --git a/metrics/testdata/prometheus_metrics b/metrics/testdata/prometheus_metrics index 298bd6e6..bd1f5d19 100644 --- a/metrics/testdata/prometheus_metrics +++ b/metrics/testdata/prometheus_metrics @@ -92,6 +92,9 @@ container_memory_failures_total{container_env_foo_env="prod",container_label_foo # HELP container_memory_rss Size of RSS in bytes. # TYPE container_memory_rss gauge container_memory_rss{container_env_foo_env="prod",container_label_foo_label="bar",id="testcontainer",image="test",name="testcontaineralias",zone_name="hello"} 15 +# HELP container_memory_swap Container swap usage in bytes. +# TYPE container_memory_swap gauge +container_memory_swap{container_env_foo_env="prod",container_label_foo_label="bar",id="testcontainer",image="test",name="testcontaineralias",zone_name="hello"} 8192 # HELP container_memory_usage_bytes Current memory usage in bytes. # TYPE container_memory_usage_bytes gauge container_memory_usage_bytes{container_env_foo_env="prod",container_label_foo_label="bar",id="testcontainer",image="test",name="testcontaineralias",zone_name="hello"} 8