Skip to content

Commit

Permalink
fix(host,monitor): container memory metrics
Browse files Browse the repository at this point in the history
  • Loading branch information
zexi committed Feb 27, 2025
1 parent 2914d0d commit c31a2c8
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 4 deletions.
21 changes: 17 additions & 4 deletions pkg/hostman/hostmetrics/container_metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,10 @@ const (
CPU_USAGE_RATE = "usage_rate"
// current working set of memory size in bytes
MEMORY_WORKING_SET_BYTES = "working_set_bytes"
MEMORY_USAGE_BYTES = "usage_bytes"
// memory usage rate
MEMORY_USAGE_RATE = "usage_rate"
MEMORY_USAGE_RATE = "usage_rate"
MEMORY_WORKING_SET_RATE = "working_set_rate"

VOLUME_TOTAL = "total"
VOLUME_FREE = "free"
Expand Down Expand Up @@ -276,6 +278,8 @@ func (m PodCpuMetric) ToMap() map[string]interface{} {
type PodMemoryMetric struct {
PodMetricMeta
MemoryWorkingSetBytes float64 `json:"memory_working_set_bytes"`
MemoryWorkingSetRate float64 `json:"memory_working_set_rate"`
MemoryUsageBytes float64 `json:"memory_usage_bytes"`
MemoryUsageRate float64 `json:"memory_usage_rate"`
}

Expand All @@ -286,7 +290,9 @@ func (m PodMemoryMetric) GetName() string {
func (m PodMemoryMetric) ToMap() map[string]interface{} {
return map[string]interface{}{
MEMORY_WORKING_SET_BYTES: m.MemoryWorkingSetBytes,
MEMORY_USAGE_BYTES: m.MemoryUsageBytes,
MEMORY_USAGE_RATE: m.MemoryUsageRate,
MEMORY_WORKING_SET_RATE: m.MemoryWorkingSetRate,
}
}

Expand Down Expand Up @@ -480,6 +486,8 @@ func (m ContainerMetricMeta) GetTag() map[string]string {
type ContainerMemoryMetric struct {
ContainerMetricMeta
MemoryWorkingSetBytes float64 `json:"memory_working_set_bytes"`
MemoryWorkingSetRate float64 `json:"memory_working_set_rate"`
MemoryUsageBytes float64 `json:"memory_usage_bytes"`
MemoryUsageRate float64 `json:"memory_usage_rate"`
}

Expand All @@ -490,7 +498,9 @@ func (m ContainerMemoryMetric) GetName() string {
func (m *ContainerMemoryMetric) ToMap() map[string]interface{} {
return map[string]interface{}{
MEMORY_WORKING_SET_BYTES: m.MemoryWorkingSetBytes,
MEMORY_USAGE_BYTES: m.MemoryUsageBytes,
MEMORY_USAGE_RATE: m.MemoryUsageRate,
MEMORY_WORKING_SET_RATE: m.MemoryWorkingSetRate,
}
}

Expand Down Expand Up @@ -587,7 +597,6 @@ func GetPodCphAmdGpuMetrics(metrics []CphAmdGpuProcessMetrics, podProcs map[stri

func (s *SGuestMonitorCollector) collectPodMetrics(gm *SGuestMonitor, prevUsage *GuestMetrics) *GuestMetrics {
gmData := new(GuestMetrics)
s.hostInfo.GetContainerStatsProvider()
gmData.PodMetrics = gm.PodMetrics(prevUsage)

// netio
Expand Down Expand Up @@ -703,7 +712,9 @@ func (m *SGuestMonitor) PodMetrics(prevUsage *GuestMetrics) *PodMetrics {
}
podMemory := &PodMemoryMetric{
MemoryWorkingSetBytes: float64(*stat.Memory.WorkingSetBytes),
MemoryUsageRate: (float64(*stat.Memory.WorkingSetBytes) / float64(m.MemMB*1024*1024)) * 100,
MemoryWorkingSetRate: (float64(*stat.Memory.WorkingSetBytes) / float64(m.MemMB*1024*1024)) * 100,
MemoryUsageBytes: float64(*stat.Memory.UsageBytes),
MemoryUsageRate: (float64(*stat.Memory.UsageBytes) / float64(m.MemMB*1024*1024)) * 100,
}

containers := make([]*ContainerMetrics, 0)
Expand All @@ -717,7 +728,9 @@ func (m *SGuestMonitor) PodMetrics(prevUsage *GuestMetrics) *PodMetrics {
ContainerMemory: &ContainerMemoryMetric{
ContainerMetricMeta: ctrMeta,
MemoryWorkingSetBytes: float64(*ctr.Memory.WorkingSetBytes),
MemoryUsageRate: (float64(*ctr.Memory.WorkingSetBytes) / float64(m.MemMB*1024*1024)) * 100,
MemoryWorkingSetRate: (float64(*ctr.Memory.WorkingSetBytes) / float64(m.MemMB*1024*1024)) * 100,
MemoryUsageBytes: float64(*ctr.Memory.UsageBytes),
MemoryUsageRate: (float64(*ctr.Memory.UsageBytes) / float64(m.MemMB*1024*1024)) * 100,
},
}
var prevCtrM *ContainerMetrics
Expand Down
6 changes: 6 additions & 0 deletions pkg/monitor/dbinit/measurements/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,12 @@ var containerMem = SMeasurement{
{
"usage_rate", "Container memory usage rate", monitor.METRIC_UNIT_PERCENT,
},
{
"working_set_rate", "Container memory working set usage rate", monitor.METRIC_UNIT_PERCENT,
},
{
"usage_bytes", "Container memory usage bytes", monitor.METRIC_UNIT_BYTE,
},
{
"working_set_bytes", "Container memory working set bytes", monitor.METRIC_UNIT_BYTE,
},
Expand Down
10 changes: 10 additions & 0 deletions pkg/monitor/dbinit/measurements/pod.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,16 @@ var podMem = SMeasurement{
DisplayName: "Pod memory usage rate",
Unit: monitor.METRIC_UNIT_PERCENT,
},
{
"working_set_rate",
"Container memory working set usage rate",
monitor.METRIC_UNIT_PERCENT,
},
{
"usage_bytes",
"Container memory usage bytes",
monitor.METRIC_UNIT_BYTE,
},
{
Name: "working_set_bytes",
DisplayName: "Pod memory working set bytes",
Expand Down
8 changes: 8 additions & 0 deletions pkg/util/pod/stats/cri_stats_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -510,6 +510,10 @@ func (p *criStatsProvider) makeContainerStats(stats *runtimeapi.ContainerStats,
if stats.Memory.WorkingSetBytes != nil {
result.Memory.WorkingSetBytes = &stats.Memory.WorkingSetBytes.Value
}
if cStats != nil && cStats.Memory != nil {
result.Memory.UsageBytes = &cStats.Memory.Usage
result.Memory.RSSBytes = &cStats.Memory.RSS
}
} else {
result.Memory.Time = metav1.NewTime(time.Unix(0, time.Now().UnixNano()))
result.Memory.WorkingSetBytes = uint64Ptr(0)
Expand Down Expand Up @@ -609,6 +613,10 @@ func (p *criStatsProvider) makeContainerCPUAndMemoryStats(
if stats.Memory.WorkingSetBytes != nil {
result.Memory.WorkingSetBytes = &stats.Memory.WorkingSetBytes.Value
}
if cStats != nil && cStats.Memory != nil {
result.Memory.UsageBytes = &cStats.Memory.Usage
result.Memory.RSSBytes = &cStats.Memory.RSS
}
} else {
result.Memory.Time = metav1.NewTime(time.Unix(0, time.Now().UnixNano()))
result.Memory.WorkingSetBytes = uint64Ptr(0)
Expand Down

0 comments on commit c31a2c8

Please sign in to comment.