feat(metrics): report version of client, metanode, datanode, authnode, lcnode, objectnode

Signed-off-by: W9068822 <v-lijianrong1@oppo.com>
This commit is contained in:
W9068822 2024-04-15 10:42:13 +08:00 committed by longerfly
parent 8459b9372b
commit d25840b71f
10 changed files with 103 additions and 12 deletions

View File

@ -30,6 +30,7 @@ import (
"github.com/cubefs/cubefs/util/config"
"github.com/cubefs/cubefs/util/cryptoutil"
"github.com/cubefs/cubefs/util/errors"
"github.com/cubefs/cubefs/util/exporter"
"github.com/cubefs/cubefs/util/log"
)
@ -225,7 +226,7 @@ func (m *Server) Start(cfg *config.Config) (err error) {
m.cluster.PKIKey.EnableHTTPS = false
}
m.authProxy = m.newAuthProxy()
exporter.RegistConsul(m.clusterName, cfg.GetString("role"), cfg)
m.cluster.scheduleTask()
m.startHTTPService()
m.wg.Add(1)

View File

@ -515,6 +515,9 @@ func main() {
exporter.Init(ModuleName, cfg)
exporter.RegistConsul(super.ClusterName(), ModuleName, cfg)
metric := exporter.NewVersionMetrics(ModuleName)
defer metric.Stop()
go metric.Start()
err = log.OutputPid(opt.Logpath, ModuleName)
if err != nil {

View File

@ -41,6 +41,7 @@ import (
"github.com/cubefs/cubefs/util/auditlog"
"github.com/cubefs/cubefs/util/config"
"github.com/cubefs/cubefs/util/errors"
"github.com/cubefs/cubefs/util/exporter"
"github.com/cubefs/cubefs/util/log"
sysutil "github.com/cubefs/cubefs/util/sys"
"github.com/cubefs/cubefs/util/ump"
@ -339,6 +340,10 @@ func main() {
}
interceptSignal(server)
exporter.Init(role, cfg)
versionMetric := exporter.NewVersionMetrics(role)
go versionMetric.Start()
defer versionMetric.Stop()
err = server.Start(cfg)
if err != nil {
log.LogFlush()

View File

@ -232,7 +232,6 @@ func doStart(server common.Server, cfg *config.Config) (err error) {
return
}
exporter.Init(ModuleName, cfg)
s.registerMetrics()
s.register(cfg)

View File

@ -88,10 +88,9 @@ func doStart(s common.Server, cfg *config.Config) (err error) {
return
}
exporter.Init(ModuleName, cfg)
exporter.RegistConsul(l.clusterID, ModuleName, cfg)
log.LogInfo("lcnode start successfully")
return
}

View File

@ -159,7 +159,6 @@ func doStart(s common.Server, cfg *config.Config) (err error) {
go m.startUpdateNodeInfo()
exporter.Init(cfg.GetString("role"), cfg)
m.startStat()
// check local partition compare with master ,if lack,then not start

View File

@ -422,7 +422,6 @@ func handleStart(s common.Server, cfg *config.Config) (err error) {
return
}
exporter.Init(cfg.GetString("role"), cfg)
exporter.RegistConsul(ci.Cluster, cfg.GetString("role"), cfg)
log.LogInfo("object subsystem start success")

View File

@ -24,3 +24,31 @@ func DumpVersion(role string) string {
CommitID,
runtime.Version(), runtime.GOOS, runtime.GOARCH, BuildTime)
}
type VersionInfo struct {
Role string
Version string
Branch string
Commit string
Build string
}
func (v VersionInfo) ToMap() map[string]string {
return map[string]string{
"role": v.Role,
"version": v.Version,
"branch": v.Branch,
"commit": v.Commit,
"build": v.Build,
}
}
func GetVersion(role string) VersionInfo {
return VersionInfo{
Role: role,
Version: Version,
Branch: BranchName,
Commit: CommitID,
Build: fmt.Sprintf("%s %s %s %s\n", runtime.Version(), runtime.GOOS, runtime.GOARCH, BuildTime),
}
}

View File

@ -46,12 +46,13 @@ const (
ChSize = 1024 * 10 // collect chan size
// monitor label name
Vol = "vol"
Disk = "disk"
PartId = "partid"
Op = "op"
Type = "type"
Err = "err"
Vol = "vol"
Disk = "disk"
PartId = "partid"
Op = "op"
Type = "type"
Err = "err"
Version = "version"
)
var (

57
util/exporter/version.go Normal file
View File

@ -0,0 +1,57 @@
package exporter
import (
"time"
"github.com/cubefs/cubefs/proto"
"github.com/cubefs/cubefs/util/log"
)
const StatPeriod = time.Minute * time.Duration(1)
type VersionMetrics struct {
stopC chan struct{}
Metric *Counter
moduleName string
statPeriod time.Duration
}
func NewVersionMetrics(module string) *VersionMetrics {
return &VersionMetrics{
moduleName: module,
Metric: NewCounter(Version),
stopC: make(chan struct{}),
statPeriod: StatPeriod,
}
}
func (m *VersionMetrics) SetStatPeriod(period time.Duration) {
m.statPeriod = period
}
func (m *VersionMetrics) Start() {
ticker := time.NewTicker(m.statPeriod)
for {
select {
case <-m.stopC:
ticker.Stop()
log.LogInfof("stop version metrics ticker")
return
case <-ticker.C:
m.doStat()
}
}
}
func (m *VersionMetrics) Stop() {
close(m.stopC)
log.LogInfof("stop version metrics")
}
func (m *VersionMetrics) doStat() {
m.setVersionMetrics()
}
func (m *VersionMetrics) setVersionMetrics() {
m.Metric.AddWithLabels(1, proto.GetVersion(m.moduleName).ToMap())
}