From d1a2d203b197d31d310fdb04badc937af2eb8107 Mon Sep 17 00:00:00 2001 From: zhijian Date: Mon, 11 Mar 2024 16:34:00 +0800 Subject: [PATCH 1/2] metrics: export meta backup metrics --- cmd/mount.go | 2 ++ pkg/vfs/backup.go | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/cmd/mount.go b/cmd/mount.go index 915dd5dcc9d5..0481dd7e119d 100644 --- a/cmd/mount.go +++ b/cmd/mount.go @@ -360,6 +360,8 @@ func initBackgroundTasks(c *cli.Context, vfsConf *vfs.Config, metaConf *meta.Con vfsConf.Port.ConsulAddr = c.String("consul") } if !metaConf.ReadOnly && !metaConf.NoBGJob && vfsConf.BackupMeta > 0 { + registerer.MustRegister(vfs.LastBackupTimeG) + registerer.MustRegister(vfs.LastBackupDurationG) go vfs.Backup(m, blob, vfsConf.BackupMeta) } if !c.Bool("no-usage-report") { diff --git a/pkg/vfs/backup.go b/pkg/vfs/backup.go index c31ee5f6cd88..e033910c3802 100644 --- a/pkg/vfs/backup.go +++ b/pkg/vfs/backup.go @@ -27,6 +27,18 @@ import ( "github.com/juicedata/juicefs/pkg/object" osync "github.com/juicedata/juicefs/pkg/sync" "github.com/juicedata/juicefs/pkg/utils" + "github.com/prometheus/client_golang/prometheus" +) + +var ( + LastBackupTimeG = prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "last_success_backup_time", + Help: "Last successful backup time.", + }) + LastBackupDurationG = prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "last_success_backup_duration", + Help: "Last successful backup duration.", + }) ) // Backup metadata periodically in the object storage @@ -66,6 +78,8 @@ func Backup(m meta.Meta, blob object.ObjectStorage, interval time.Duration) { go cleanupBackups(blob, now) logger.Debugf("backup metadata started") if err = backup(m, blob, now); err == nil { + LastBackupTimeG.Set(float64(now.UnixNano()) / 1e9) + LastBackupDurationG.Set(time.Since(now).Seconds()) logger.Infof("backup metadata succeed, used %s", time.Since(now)) } else { logger.Warnf("backup metadata failed: %s", err) From 9602f80f79631454bf5abd3cdcd8ea8e36f45887 Mon Sep 17 00:00:00 2001 From: zhijian Date: Mon, 11 Mar 2024 17:23:28 +0800 Subject: [PATCH 2/2] record the duration of the backup, even if the backup fails. --- pkg/vfs/backup.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkg/vfs/backup.go b/pkg/vfs/backup.go index e033910c3802..33bb5342e5ff 100644 --- a/pkg/vfs/backup.go +++ b/pkg/vfs/backup.go @@ -32,12 +32,12 @@ import ( var ( LastBackupTimeG = prometheus.NewGauge(prometheus.GaugeOpts{ - Name: "last_success_backup_time", - Help: "Last successful backup time.", + Name: "last_successful_backup", + Help: "Last successful backup.", }) LastBackupDurationG = prometheus.NewGauge(prometheus.GaugeOpts{ - Name: "last_success_backup_duration", - Help: "Last successful backup duration.", + Name: "last_backup_duration", + Help: "Last backup duration.", }) ) @@ -79,11 +79,11 @@ func Backup(m meta.Meta, blob object.ObjectStorage, interval time.Duration) { logger.Debugf("backup metadata started") if err = backup(m, blob, now); err == nil { LastBackupTimeG.Set(float64(now.UnixNano()) / 1e9) - LastBackupDurationG.Set(time.Since(now).Seconds()) logger.Infof("backup metadata succeed, used %s", time.Since(now)) } else { logger.Warnf("backup metadata failed: %s", err) } + LastBackupDurationG.Set(time.Since(now).Seconds()) } } }