in opentelemetry_collector/receiver/dockerstats/scraper.go [206:247]
func (s *scraper) usageStatsToMetrics(stats *types.StatsJSON, labelValues []*mpb.LabelValue) []*mpb.Metric {
var rx, tx uint64
for _, nw := range stats.Networks {
rx += nw.RxBytes
tx += nw.TxBytes
}
return []*mpb.Metric{
{
MetricDescriptor: cpuUsageDesc,
Timeseries: []*mpb.TimeSeries{
metricgenerator.MakeDoubleTimeSeries(time.Duration(stats.CPUStats.CPUUsage.TotalUsage).Seconds(), s.startTime, s.now(), labelValues),
},
},
// Unfortunately, Docker API doesn't expose CPU Limits via CPUStats API. That information
// is extracted via container inspection (see readInfo() below).
{
MetricDescriptor: memUsageDesc,
Timeseries: []*mpb.TimeSeries{
metricgenerator.MakeInt64TimeSeries(int64(stats.MemoryStats.Usage), s.startTime, s.now(), labelValues),
},
},
{
MetricDescriptor: memLimitDesc,
Timeseries: []*mpb.TimeSeries{
metricgenerator.MakeInt64TimeSeries(int64(stats.MemoryStats.Limit), s.startTime, s.now(), labelValues),
},
},
{
MetricDescriptor: nwRecvBytesDesc,
Timeseries: []*mpb.TimeSeries{
metricgenerator.MakeInt64TimeSeries(int64(rx), s.startTime, s.now(), labelValues),
},
},
{
MetricDescriptor: nwSentBytesDesc,
Timeseries: []*mpb.TimeSeries{
metricgenerator.MakeInt64TimeSeries(int64(tx), s.startTime, s.now(), labelValues),
},
},
}
}