diff --git a/container/libcontainer/helpers.go b/container/libcontainer/helpers.go index c5dd244f..0fa4315b 100644 --- a/container/libcontainer/helpers.go +++ b/container/libcontainer/helpers.go @@ -348,6 +348,7 @@ func toContainerStats1(s *cgroups.Stats, ret *info.ContainerStats) { func toContainerStats2(s *cgroups.Stats, ret *info.ContainerStats) { ret.Memory.Usage = s.MemoryStats.Usage + ret.Memory.Failcnt = s.MemoryStats.Failcnt 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 b4f81388..ccf59be5 100644 --- a/info/v1/container.go +++ b/info/v1/container.go @@ -312,6 +312,8 @@ type MemoryStats struct { // Units: Bytes. WorkingSet uint64 `json:"working_set"` + Failcnt uint64 `json:"failcnt"` + ContainerData MemoryStatsMemoryData `json:"container_data,omitempty"` HierarchicalData MemoryStatsMemoryData `json:"hierarchical_data,omitempty"` } diff --git a/metrics/prometheus.go b/metrics/prometheus.go index 2e8ec06a..8b61f572 100644 --- a/metrics/prometheus.go +++ b/metrics/prometheus.go @@ -121,6 +121,13 @@ func NewPrometheusCollector(infoProvider infoProvider) *PrometheusCollector { } return values }, + }, { + name: "container_memory_failcnt", + help: "Number of memory usage hits limits", + valueType: prometheus.CounterValue, + getValues: func(s *info.ContainerStats) metricValues { + return metricValues{{value: float64(s.Memory.Failcnt)}} + }, }, { name: "container_memory_usage_bytes", help: "Current memory usage in bytes.", diff --git a/metrics/testdata/prometheus_metrics b/metrics/testdata/prometheus_metrics index b4d089bf..e797746a 100644 --- a/metrics/testdata/prometheus_metrics +++ b/metrics/testdata/prometheus_metrics @@ -68,6 +68,9 @@ container_fs_writes_total{device="sda2",id="testcontainer",image="test",name="te # HELP container_last_seen Last time a container was seen by the exporter # TYPE container_last_seen gauge container_last_seen{id="testcontainer",image="test",name="testcontaineralias"} 1.426203694e+09 +# HELP container_memory_failcnt Number of memory usage hits limits +# TYPE container_memory_failcnt counter +container_memory_failcnt{id="testcontainer",image="test",name="testcontaineralias"} 0 # HELP container_memory_failures_total Cumulative count of memory allocation failures. # TYPE container_memory_failures_total counter container_memory_failures_total{id="testcontainer",image="test",name="testcontaineralias",scope="container",type="pgfault"} 10