From 241ac78b6e533c9b9531f5ace10140d2bcfd6c2c Mon Sep 17 00:00:00 2001 From: xujihui1985 Date: Sun, 3 Dec 2023 20:40:48 +0800 Subject: [PATCH 1/2] feat(dfdaemon): add disk usage metrics --- client/daemon/metrics/metrics.go | 37 +++++++++++++++++++++++- client/daemon/storage/storage_manager.go | 32 ++++++++++++++++---- 2 files changed, 63 insertions(+), 6 deletions(-) diff --git a/client/daemon/metrics/metrics.go b/client/daemon/metrics/metrics.go index a56b458df65..5e06aa2cb9c 100644 --- a/client/daemon/metrics/metrics.go +++ b/client/daemon/metrics/metrics.go @@ -99,7 +99,7 @@ var ( Namespace: types.MetricsNamespace, Subsystem: types.DfdaemonMetricsName, Name: "piece_task_total", - Help: "Counter of the total failed piece tasks.", + Help: "Counter of the total piece tasks.", }) PieceTaskFailedCount = promauto.NewCounter(prometheus.CounterOpts{ @@ -171,6 +171,41 @@ var ( Name: "version", Help: "Version info of the service.", }, []string{"major", "minor", "git_version", "git_commit", "platform", "build_time", "go_version", "go_tags", "go_gcflags"}) + + DataDiskUsage = promauto.NewGauge(prometheus.GaugeOpts{ + Namespace: types.MetricsNamespace, + Subsystem: types.DfdaemonMetricsName, + Name: "data_disk_usage_total", + Help: "Gauger of the disk usage of data directory.", + }) + + DataDiskCapacity = promauto.NewGauge(prometheus.GaugeOpts{ + Namespace: types.MetricsNamespace, + Subsystem: types.DfdaemonMetricsName, + Name: "data_disk_capacity_total", + Help: "Gauger of disk capacity of data directory.", + }) + + DataUnReclaimedUsage = promauto.NewGauge(prometheus.GaugeOpts{ + Namespace: types.MetricsNamespace, + Subsystem: types.DfdaemonMetricsName, + Name: "data_unreclaimed_usage_total", + Help: "Gauger of unreclaimed data usage of data directory.", + }) + + DataDiskGCThreshold = promauto.NewGauge(prometheus.GaugeOpts{ + Namespace: types.MetricsNamespace, + Subsystem: types.DfdaemonMetricsName, + Name: "data_disk_gc_threshold_total", + Help: "Gauger of disk gc threshold of data directory.", + }) + + DataDiskGCThresholdPercent = promauto.NewGauge(prometheus.GaugeOpts{ + Namespace: types.MetricsNamespace, + Subsystem: types.DfdaemonMetricsName, + Name: "data_disk_gc_threshold_percent", + Help: "Gauger of disk gc threshold percent of data directory.", + }) ) func New(addr string) *http.Server { diff --git a/client/daemon/storage/storage_manager.go b/client/daemon/storage/storage_manager.go index b5cff0bbdeb..ca07fa0e3dd 100644 --- a/client/daemon/storage/storage_manager.go +++ b/client/daemon/storage/storage_manager.go @@ -20,6 +20,7 @@ package storage import ( "context" + "d7y.io/dragonfly/v2/client/daemon/metrics" "encoding/base64" "encoding/json" "errors" @@ -806,10 +807,24 @@ func (s *storageManager) TryGC() (bool, error) { } return true }) + diskUsage := s.diskUsage() + if diskUsage != nil { + } quotaBytesExceed := totalNotMarkedSize - int64(s.storeOption.DiskGCThreshold) quotaExceed := s.storeOption.DiskGCThreshold > 0 && quotaBytesExceed > 0 - usageExceed, usageBytesExceed := s.diskUsageExceed() + + metrics.DataUnReclaimedUsage.Set(float64(totalNotMarkedSize)) + metrics.DataDiskGCThreshold.Set(float64(s.storeOption.DiskGCThreshold)) + metrics.DataDiskGCThresholdPercent.Set(s.storeOption.DiskGCThresholdPercent) + + usage := s.diskUsage() + if usage != nil { + metrics.DataDiskUsage.Set(float64(usage.Used)) + metrics.DataDiskCapacity.Set(float64(usage.Total)) + } + + usageExceed, usageBytesExceed := s.diskUsageExceed(usage) if quotaExceed || usageExceed { var bytesExceed int64 @@ -941,13 +956,20 @@ func (s *storageManager) forceGC() (bool, error) { return true, nil } -func (s *storageManager) diskUsageExceed() (exceed bool, bytes int64) { - if s.storeOption.DiskGCThresholdPercent <= 0 { - return false, 0 - } +func (s *storageManager) diskUsage() *disk.UsageStat { usage, err := disk.Usage(s.storeOption.DataPath) if err != nil { logger.Warnf("get %s disk usage error: %s", s.storeOption.DataPath, err) + return nil + } + return usage +} + +func (s *storageManager) diskUsageExceed(usage *disk.UsageStat) (exceed bool, bytes int64) { + if s.storeOption.DiskGCThresholdPercent <= 0 { + return false, 0 + } + if usage == nil { return false, 0 } logger.Debugf("disk usage: %+v", usage) From d614d30169a03376310493464e47bbb7f9dd8cd0 Mon Sep 17 00:00:00 2001 From: xujihui1985 Date: Mon, 4 Dec 2023 22:45:14 +0800 Subject: [PATCH 2/2] feat(dfdaemon): remove redandant code --- client/daemon/storage/storage_manager.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/client/daemon/storage/storage_manager.go b/client/daemon/storage/storage_manager.go index ca07fa0e3dd..5abc0a2b1c7 100644 --- a/client/daemon/storage/storage_manager.go +++ b/client/daemon/storage/storage_manager.go @@ -807,10 +807,6 @@ func (s *storageManager) TryGC() (bool, error) { } return true }) - diskUsage := s.diskUsage() - if diskUsage != nil { - - } quotaBytesExceed := totalNotMarkedSize - int64(s.storeOption.DiskGCThreshold) quotaExceed := s.storeOption.DiskGCThreshold > 0 && quotaBytesExceed > 0