Skip to content

Commit

Permalink
[metricbeat] check for a valid limit before we process a memory event (
Browse files Browse the repository at this point in the history
…#11676)

* check for a valid limit before we process a memory event
  • Loading branch information
fearful-symmetry authored Apr 9, 2019
1 parent 1e6d160 commit 97aec9b
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 3 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.next.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d
*Metricbeat*

- Add _bucket to histogram metrics in Prometheus Collector {pull}11578[11578]
- Prevent the docker/memory metricset from processing invalid events before container start {pull}11676[11676]

*Packetbeat*

Expand Down
14 changes: 11 additions & 3 deletions metricbeat/module/docker/memory/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"github.com/elastic/beats/metricbeat/module/docker"
)

// MemoryData contains parsed container memory info
type MemoryData struct {
Time common.Time
Container *docker.Container
Expand All @@ -34,12 +35,19 @@ type MemoryData struct {
UsageP float64
}

// MemoryService is placeholder for the the memory stat parsers
type MemoryService struct{}

func (s *MemoryService) getMemoryStatsList(rawStats []docker.Stat, dedot bool) []MemoryData {
func (s *MemoryService) getMemoryStatsList(containers []docker.Stat, dedot bool) []MemoryData {
formattedStats := []MemoryData{}
for _, myRawStats := range rawStats {
formattedStats = append(formattedStats, s.getMemoryStats(myRawStats, dedot))
for _, containerStats := range containers {
//There appears to be a race where a container will report with a stat object before it actually starts
//during this time, there doesn't appear to be any meaningful data,
// and Limit will never be 0 unless the container is not running & there's no cgroup data
if containerStats.Stats.MemoryStats.Limit == 0 {
continue
}
formattedStats = append(formattedStats, s.getMemoryStats(containerStats, dedot))
}

return formattedStats
Expand Down
1 change: 1 addition & 0 deletions metricbeat/module/docker/memory/memory.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ func init() {
)
}

// MetricSet type defines all fields of the MetricSet
type MetricSet struct {
mb.BaseMetricSet
memoryService *MemoryService
Expand Down

0 comments on commit 97aec9b

Please sign in to comment.