From c4a7bd97b5069b14511fbedc9470665ecab2ded1 Mon Sep 17 00:00:00 2001 From: zhijian Date: Mon, 11 Mar 2024 17:54:00 +0800 Subject: [PATCH] metrics: export meta backup metrics (#4480) --- 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 c74d0b85678d..5468a881196c 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..33bb5342e5ff 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_successful_backup", + Help: "Last successful backup.", + }) + LastBackupDurationG = prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "last_backup_duration", + Help: "Last backup duration.", + }) ) // Backup metadata periodically in the object storage @@ -66,10 +78,12 @@ 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) logger.Infof("backup metadata succeed, used %s", time.Since(now)) } else { logger.Warnf("backup metadata failed: %s", err) } + LastBackupDurationG.Set(time.Since(now).Seconds()) } } }