Add disk and memory percent_used

This commit is contained in:
Jarkko Sonninen
2023-09-26 14:01:48 +03:00
parent 07b7a42624
commit 07900633cb
9 changed files with 55 additions and 0 deletions

View File

@@ -44,6 +44,9 @@
"disk/bytes_used": {
"displayName": "disk/bytes_used"
},
"disk/percent_used": {
"displayName": "disk/percent_used"
},
"disk/io_time": {
"displayName": "disk/io_time"
},
@@ -88,6 +91,9 @@
},
"memory/unevictable_used": {
"displayName": "memory/unevictable_used"
},
"memory/percent_used": {
"displayName": "memory/percent_used"
}
}
},

View File

@@ -44,6 +44,9 @@
"disk/bytes_used": {
"displayName": "disk/bytes_used"
},
"disk/percent_used": {
"displayName": "disk/percent_used"
},
"disk/io_time": {
"displayName": "disk/io_time"
},
@@ -88,6 +91,9 @@
},
"memory/unevictable_used": {
"displayName": "memory/unevictable_used"
},
"memory/percent_used": {
"displayName": "memory/percent_used"
}
}
}

View File

@@ -54,6 +54,7 @@ var NPDMetricToSDMetric = map[metrics.MetricID]string{
metrics.CPULoad15m: "compute.googleapis.com/guest/cpu/load_15m",
metrics.DiskAvgQueueLenID: "compute.googleapis.com/guest/disk/queue_length",
metrics.DiskBytesUsedID: "compute.googleapis.com/guest/disk/bytes_used",
metrics.DiskPercentUsedID: "custom.googleapis.com/guest/disk/percent_used",
metrics.DiskIOTimeID: "compute.googleapis.com/guest/disk/io_time",
metrics.DiskMergedOpsCountID: "compute.googleapis.com/guest/disk/merged_operation_count",
metrics.DiskOpsBytesID: "compute.googleapis.com/guest/disk/operation_bytes_count",
@@ -66,6 +67,7 @@ var NPDMetricToSDMetric = map[metrics.MetricID]string{
metrics.MemoryDirtyUsedID: "compute.googleapis.com/guest/memory/dirty_used",
metrics.MemoryPageCacheUsedID: "compute.googleapis.com/guest/memory/page_cache_used",
metrics.MemoryUnevictableUsedID: "compute.googleapis.com/guest/memory/unevictable_used",
metrics.MemoryPercentUsedID: "custom.googleapis.com/guest/memory/percent_used",
metrics.ProblemCounterID: "compute.googleapis.com/guest/system/problem_count",
metrics.ProblemGaugeID: "compute.googleapis.com/guest/system/problem_state",
metrics.OSFeatureID: "compute.googleapis.com/guest/system/os_feature_enabled",

View File

@@ -38,6 +38,7 @@ type diskCollector struct {
mOpsBytes *metrics.Int64Metric
mOpsTime *metrics.Int64Metric
mBytesUsed *metrics.Int64Metric
mPercentUsed *metrics.Float64Metric
config *ssmtypes.DiskStatsConfig
@@ -150,6 +151,17 @@ func NewDiskCollectorOrDie(diskConfig *ssmtypes.DiskStatsConfig) *diskCollector
klog.Fatalf("Error initializing metric for %q: %v", metrics.DiskBytesUsedID, err)
}
dc.mPercentUsed, err = metrics.NewFloat64Metric(
metrics.DiskPercentUsedID,
diskConfig.MetricsConfigs[string(metrics.DiskPercentUsedID)].DisplayName,
"Disk usage in percentage of total space",
"%",
metrics.LastValue,
[]string{deviceNameLabel})
if err != nil {
klog.Fatalf("Error initializing metric for %q: %v", metrics.DiskPercentUsedID, err)
}
dc.lastIOTime = make(map[string]uint64)
dc.lastWeightedIO = make(map[string]uint64)
dc.lastReadCount = make(map[string]uint64)
@@ -291,6 +303,9 @@ func (dc *diskCollector) collect() {
opttypes := strings.Join(partition.Opts, ",")
dc.mBytesUsed.Record(map[string]string{deviceNameLabel: deviceName, fsTypeLabel: fstype, mountOptionLabel: opttypes, stateLabel: "free"}, int64(usageStat.Free))
dc.mBytesUsed.Record(map[string]string{deviceNameLabel: deviceName, fsTypeLabel: fstype, mountOptionLabel: opttypes, stateLabel: "used"}, int64(usageStat.Used))
if dc.mPercentUsed != nil {
dc.mPercentUsed.Record(map[string]string{deviceNameLabel: deviceName, fsTypeLabel: fstype, mountOptionLabel: opttypes, stateLabel: "used"}, float64(usageStat.UsedPercent))
}
}
}

View File

@@ -25,6 +25,7 @@ import (
type memoryCollector struct {
mBytesUsed *metrics.Int64Metric
mPercentUsed *metrics.Float64Metric
mAnonymousUsed *metrics.Int64Metric
mPageCacheUsed *metrics.Int64Metric
mUnevictableUsed *metrics.Int64Metric
@@ -49,6 +50,17 @@ func NewMemoryCollectorOrDie(memoryConfig *ssmtypes.MemoryStatsConfig) *memoryCo
klog.Fatalf("Error initializing metric for %q: %v", metrics.MemoryBytesUsedID, err)
}
mc.mPercentUsed, err = metrics.NewFloat64Metric(
metrics.MemoryPercentUsedID,
memoryConfig.MetricsConfigs[string(metrics.MemoryPercentUsedID)].DisplayName,
"Memory usage in percentage of total memory.",
"%",
metrics.LastValue,
[]string{stateLabel})
if err != nil {
klog.Fatalf("Error initializing metric for %q: %v", metrics.MemoryPercentUsedID, err)
}
mc.mAnonymousUsed, err = metrics.NewInt64Metric(
metrics.MemoryAnonymousUsedID,
memoryConfig.MetricsConfigs[string(metrics.MemoryAnonymousUsedID)].DisplayName,

View File

@@ -58,6 +58,12 @@ func (mc *memoryCollector) collect() {
}
}
if mc.mPercentUsed != nil && meminfo.MemTotal != nil && *meminfo.MemTotal > 0 &&
meminfo.MemFree != nil && meminfo.Buffers != nil && meminfo.Cached != nil && meminfo.Slab != nil {
ratio := float64(*meminfo.MemTotal - *meminfo.MemFree - *meminfo.Buffers - *meminfo.Cached - *meminfo.Slab) / float64(*meminfo.MemTotal)
mc.mPercentUsed.Record(map[string]string{stateLabel: "used"}, float64(ratio*100.0))
}
if mc.mDirtyUsed != nil {
if meminfo.Dirty != nil {
mc.mDirtyUsed.Record(map[string]string{stateLabel: "dirty"}, int64(*meminfo.Dirty)*1024)

View File

@@ -37,4 +37,8 @@ func (mc *memoryCollector) collect() {
mc.mBytesUsed.Record(map[string]string{stateLabel: "free"}, int64(meminfo.Available)*1024)
mc.mBytesUsed.Record(map[string]string{stateLabel: "used"}, int64(meminfo.Used)*1024)
}
if mc.mPercentUsed != nil {
mc.mPercentUsed.Record(map[string]string{stateLabel: "used"}, float64(meminfo.UsedPercent))
}
}

View File

@@ -35,12 +35,14 @@ const (
DiskOpsBytesID MetricID = "disk/operation_bytes_count"
DiskOpsTimeID MetricID = "disk/operation_time"
DiskBytesUsedID MetricID = "disk/bytes_used"
DiskPercentUsedID MetricID = "disk/percent_used"
HostUptimeID MetricID = "host/uptime"
MemoryBytesUsedID MetricID = "memory/bytes_used"
MemoryAnonymousUsedID MetricID = "memory/anonymous_used"
MemoryPageCacheUsedID MetricID = "memory/page_cache_used"
MemoryUnevictableUsedID MetricID = "memory/unevictable_used"
MemoryDirtyUsedID MetricID = "memory/dirty_used"
MemoryPercentUsedID MetricID = "memory/percent_used"
OSFeatureID MetricID = "system/os_feature"
SystemProcessesTotal MetricID = "system/processes_total"
SystemProcsRunning MetricID = "system/procs_running"

View File

@@ -85,6 +85,7 @@ var _ = ginkgo.Describe("NPD should export Prometheus metrics.", func() {
assertMetricExist(gotMetrics, "disk_operation_bytes_count", map[string]string{}, false)
assertMetricExist(gotMetrics, "disk_operation_time", map[string]string{}, false)
assertMetricExist(gotMetrics, "disk_bytes_used", map[string]string{}, false)
assertMetricExist(gotMetrics, "disk_percent_used", map[string]string{}, false)
assertMetricExist(gotMetrics, "disk_io_time", map[string]string{}, false)
assertMetricExist(gotMetrics, "disk_weighted_io", map[string]string{}, false)
assertMetricExist(gotMetrics, "memory_bytes_used", map[string]string{}, false)
@@ -92,6 +93,7 @@ var _ = ginkgo.Describe("NPD should export Prometheus metrics.", func() {
assertMetricExist(gotMetrics, "memory_page_cache_used", map[string]string{}, false)
assertMetricExist(gotMetrics, "memory_unevictable_used", map[string]string{}, true)
assertMetricExist(gotMetrics, "memory_dirty_used", map[string]string{}, false)
assertMetricExist(gotMetrics, "memory_percent_used", map[string]string{}, false)
assertMetricExist(gotMetrics, "host_uptime", map[string]string{}, false)
assertMetricExist(gotMetrics, "system_os_feature", map[string]string{}, false)
})