From 201bf401cde0dc48b24eaf668fc7d36b543a566c Mon Sep 17 00:00:00 2001 From: Mengran Lan Date: Thu, 11 Apr 2024 12:47:03 +0800 Subject: [PATCH] feat(coordinator): add new metric get_task_counter tracking prover info (#1235) Co-authored-by: colinlyguo --- common/version/version.go | 2 +- .../internal/controller/api/get_task.go | 34 +++++++++++++++++++ .../logic/provertask/batch_prover_task.go | 7 ++++ .../logic/provertask/chunk_prover_task.go | 7 ++++ .../internal/logic/provertask/prover_task.go | 22 ++++++++++++ coordinator/internal/types/metric.go | 10 ++++++ 6 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 coordinator/internal/types/metric.go diff --git a/common/version/version.go b/common/version/version.go index cfad27122..b6f4209d9 100644 --- a/common/version/version.go +++ b/common/version/version.go @@ -5,7 +5,7 @@ import ( "runtime/debug" ) -var tag = "v4.3.86" +var tag = "v4.3.87" var commit = func() string { if info, ok := debug.ReadBuildInfo(); ok { diff --git a/coordinator/internal/controller/api/get_task.go b/coordinator/internal/controller/api/get_task.go index 45a794a94..e9276c6b1 100644 --- a/coordinator/internal/controller/api/get_task.go +++ b/coordinator/internal/controller/api/get_task.go @@ -6,6 +6,8 @@ import ( "github.com/gin-gonic/gin" "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" + "github.com/scroll-tech/go-ethereum/log" "github.com/scroll-tech/go-ethereum/params" "gorm.io/gorm" @@ -21,6 +23,8 @@ import ( // GetTaskController the get prover task api controller type GetTaskController struct { proverTasks map[message.ProofType]provertask.ProverTask + + getTaskAccessCounter *prometheus.CounterVec } // NewGetTaskController create a get prover task controller @@ -30,6 +34,10 @@ func NewGetTaskController(cfg *config.Config, chainCfg *params.ChainConfig, db * ptc := &GetTaskController{ proverTasks: make(map[message.ProofType]provertask.ProverTask), + getTaskAccessCounter: promauto.With(reg).NewCounterVec(prometheus.CounterOpts{ + Name: "coordinator_get_task_access_count", + Help: "Multi dimensions get task counter.", + }, []string{coordinatorType.LabelProverName, coordinatorType.LabelProverPublicKey, coordinatorType.LabelProverVersion}), } ptc.proverTasks[message.ProofTypeChunk] = chunkProverTask @@ -38,6 +46,28 @@ func NewGetTaskController(cfg *config.Config, chainCfg *params.ChainConfig, db * return ptc } +func (ptc *GetTaskController) incGetTaskAccessCounter(ctx *gin.Context) error { + publicKey, publicKeyExist := ctx.Get(coordinatorType.PublicKey) + if !publicKeyExist { + return fmt.Errorf("get public key from context failed") + } + proverName, proverNameExist := ctx.Get(coordinatorType.ProverName) + if !proverNameExist { + return fmt.Errorf("get prover name from context failed") + } + proverVersion, proverVersionExist := ctx.Get(coordinatorType.ProverVersion) + if !proverVersionExist { + return fmt.Errorf("get prover version from context failed") + } + + ptc.getTaskAccessCounter.With(prometheus.Labels{ + coordinatorType.LabelProverPublicKey: publicKey.(string), + coordinatorType.LabelProverName: proverName.(string), + coordinatorType.LabelProverVersion: proverVersion.(string), + }).Inc() + return nil +} + // GetTasks get assigned chunk/batch task func (ptc *GetTaskController) GetTasks(ctx *gin.Context) { var getTaskParameter coordinatorType.GetTaskParameter @@ -55,6 +85,10 @@ func (ptc *GetTaskController) GetTasks(ctx *gin.Context) { return } + if err := ptc.incGetTaskAccessCounter(ctx); err != nil { + log.Warn("get_task access counter inc failed", "error", err.Error()) + } + result, err := proverTask.Assign(ctx, &getTaskParameter) if err != nil { nerr := fmt.Errorf("return prover task err:%w", err) diff --git a/coordinator/internal/logic/provertask/batch_prover_task.go b/coordinator/internal/logic/provertask/batch_prover_task.go index 84cfde546..20c3e296d 100644 --- a/coordinator/internal/logic/provertask/batch_prover_task.go +++ b/coordinator/internal/logic/provertask/batch_prover_task.go @@ -31,6 +31,7 @@ type BatchProverTask struct { batchAttemptsExceedTotal prometheus.Counter batchTaskGetTaskTotal *prometheus.CounterVec + batchTaskGetTaskProver *prometheus.CounterVec } // NewBatchProverTask new a batch collector @@ -58,6 +59,7 @@ func NewBatchProverTask(cfg *config.Config, chainCfg *params.ChainConfig, db *go Name: "coordinator_batch_get_task_total", Help: "Total number of batch get task.", }, []string{"fork_name"}), + batchTaskGetTaskProver: newGetTaskCounterVec(promauto.With(reg), "batch"), } return bp } @@ -180,6 +182,11 @@ func (bp *BatchProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato } bp.batchTaskGetTaskTotal.WithLabelValues(taskCtx.HardForkName).Inc() + bp.batchTaskGetTaskProver.With(prometheus.Labels{ + coordinatorType.LabelProverName: proverTask.ProverName, + coordinatorType.LabelProverPublicKey: proverTask.ProverPublicKey, + coordinatorType.LabelProverVersion: proverTask.ProverVersion, + }).Inc() return taskMsg, nil } diff --git a/coordinator/internal/logic/provertask/chunk_prover_task.go b/coordinator/internal/logic/provertask/chunk_prover_task.go index bad68d383..fe079153f 100644 --- a/coordinator/internal/logic/provertask/chunk_prover_task.go +++ b/coordinator/internal/logic/provertask/chunk_prover_task.go @@ -29,6 +29,7 @@ type ChunkProverTask struct { chunkAttemptsExceedTotal prometheus.Counter chunkTaskGetTaskTotal *prometheus.CounterVec + chunkTaskGetTaskProver *prometheus.CounterVec } // NewChunkProverTask new a chunk prover task @@ -55,6 +56,7 @@ func NewChunkProverTask(cfg *config.Config, chainCfg *params.ChainConfig, db *go Name: "coordinator_chunk_get_task_total", Help: "Total number of chunk get task.", }, []string{"fork_name"}), + chunkTaskGetTaskProver: newGetTaskCounterVec(promauto.With(reg), "chunk"), } return cp } @@ -152,6 +154,11 @@ func (cp *ChunkProverTask) Assign(ctx *gin.Context, getTaskParameter *coordinato } cp.chunkTaskGetTaskTotal.WithLabelValues(taskCtx.HardForkName).Inc() + cp.chunkTaskGetTaskProver.With(prometheus.Labels{ + coordinatorType.LabelProverName: proverTask.ProverName, + coordinatorType.LabelProverPublicKey: proverTask.ProverPublicKey, + coordinatorType.LabelProverVersion: proverTask.ProverVersion, + }).Inc() return taskMsg, nil } diff --git a/coordinator/internal/logic/provertask/prover_task.go b/coordinator/internal/logic/provertask/prover_task.go index 270396aef..980dc569e 100644 --- a/coordinator/internal/logic/provertask/prover_task.go +++ b/coordinator/internal/logic/provertask/prover_task.go @@ -2,8 +2,11 @@ package provertask import ( "fmt" + "sync" "github.com/gin-gonic/gin" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" "github.com/scroll-tech/go-ethereum/log" "gorm.io/gorm" @@ -130,3 +133,22 @@ func (b *BaseProverTask) getHardForkNumberByName(forkName string) (uint64, error return hardForkNumber, nil } + +var ( + getTaskCounterInitOnce sync.Once + getTaskCounterVec *prometheus.CounterVec = nil +) + +func newGetTaskCounterVec(factory promauto.Factory, taskType string) *prometheus.CounterVec { + getTaskCounterInitOnce.Do(func() { + getTaskCounterVec = factory.NewCounterVec(prometheus.CounterOpts{ + Name: "coordinator_get_task_count", + Help: "Multi dimensions get task counter.", + }, []string{"task_type", + coordinatorType.LabelProverName, + coordinatorType.LabelProverPublicKey, + coordinatorType.LabelProverVersion}) + }) + + return getTaskCounterVec.MustCurryWith(prometheus.Labels{"task_type": taskType}) +} diff --git a/coordinator/internal/types/metric.go b/coordinator/internal/types/metric.go new file mode 100644 index 000000000..30b2beb38 --- /dev/null +++ b/coordinator/internal/types/metric.go @@ -0,0 +1,10 @@ +package types + +var ( + // LabelProverName label name for prover name; common label name using in prometheus metrics, same rule applies to below. + LabelProverName = "prover_name" + // LabelProverPublicKey label name for prover public key + LabelProverPublicKey = "prover_pubkey" + // LabelProverVersion label name for prover version + LabelProverVersion = "prover_version" +)