Skip to content

Commit a459d97

Browse files
committed
Fix high cardinality metrics by removing unbounded labels
1 parent 5fe4aab commit a459d97

File tree

7 files changed

+48
-62
lines changed

7 files changed

+48
-62
lines changed

beacon/blockchain/deposit.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424
"context"
2525
"maps"
2626
"slices"
27-
"strconv"
2827
"time"
2928

3029
"github.com/berachain/beacon-kit/primitives/math"
@@ -55,11 +54,10 @@ func (s *Service) fetchAndStoreDeposits(
5554
ctx context.Context,
5655
blockNum math.U64,
5756
) {
58-
blockNumStr := strconv.FormatUint(blockNum.Unwrap(), 10)
5957
deposits, err := s.depositContract.ReadDeposits(ctx, blockNum, blockNum)
6058
if err != nil {
6159
s.logger.Error("Failed to read deposits", "error", err)
62-
s.metrics.FailedToGetBlockLogs.With("block_num", blockNumStr).Add(1)
60+
s.metrics.FailedToGetBlockLogs.Add(1)
6361
s.failedBlocksMu.Lock()
6462
s.failedBlocks[blockNum] = struct{}{}
6563
s.failedBlocksMu.Unlock()
@@ -75,7 +73,7 @@ func (s *Service) fetchAndStoreDeposits(
7573

7674
if err = s.storageBackend.DepositStore().EnqueueDeposits(ctx, deposits); err != nil {
7775
s.logger.Error("Failed to store deposits", "error", err)
78-
s.metrics.FailedToEnqueueDeposits.With("block_num", blockNumStr).Add(1)
76+
s.metrics.FailedToEnqueueDeposits.Add(1)
7977
s.failedBlocksMu.Lock()
8078
s.failedBlocks[blockNum] = struct{}{}
8179
s.failedBlocksMu.Unlock()

beacon/blockchain/metrics.go

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424
"time"
2525

2626
"github.com/berachain/beacon-kit/observability/metrics"
27-
"github.com/berachain/beacon-kit/primitives/math"
2827
)
2928

3029
// Metrics is a struct that contains metrics for the blockchain service.
@@ -56,28 +55,28 @@ func NewMetrics(factory metrics.Factory) *Metrics {
5655
Name: "beacon_kit_blockchain_rebuild_payload_for_rejected_block_success",
5756
Help: "Number of successful payload rebuilds for rejected blocks",
5857
},
59-
[]string{"slot"},
58+
nil,
6059
),
6160
RebuildPayloadForRejectedBlockFailure: factory.NewCounter(
6261
metrics.CounterOpts{
6362
Name: "beacon_kit_blockchain_rebuild_payload_for_rejected_block_failure",
6463
Help: "Number of failed payload rebuilds for rejected blocks",
6564
},
66-
[]string{"slot", "error"},
65+
nil,
6766
),
6867
OptimisticPayloadBuildSuccess: factory.NewCounter(
6968
metrics.CounterOpts{
7069
Name: "beacon_kit_blockchain_optimistic_payload_build_success",
7170
Help: "Number of successful optimistic payload builds",
7271
},
73-
[]string{"slot"},
72+
nil,
7473
),
7574
OptimisticPayloadBuildFailure: factory.NewCounter(
7675
metrics.CounterOpts{
7776
Name: "beacon_kit_blockchain_optimistic_payload_build_failure",
7877
Help: "Number of failed optimistic payload builds",
7978
},
80-
[]string{"slot", "error"},
79+
nil,
8180
),
8281
StateRootVerificationDuration: factory.NewSummary(
8382
metrics.SummaryOpts{
@@ -92,14 +91,14 @@ func NewMetrics(factory metrics.Factory) *Metrics {
9291
Name: "beacon_kit_execution_deposit_failed_to_get_block_logs",
9392
Help: "Number of times failed to read deposits from execution layer block logs",
9493
},
95-
[]string{"block_num"},
94+
nil,
9695
),
9796
FailedToEnqueueDeposits: factory.NewCounter(
9897
metrics.CounterOpts{
9998
Name: "beacon_kit_execution_deposit_failed_to_enqueue_deposits",
10099
Help: "Number of times failed to enqueue deposits to storage",
101100
},
102-
[]string{"block_num"},
101+
nil,
103102
),
104103
}
105104
}
@@ -111,27 +110,27 @@ func (m *Metrics) measureStateTransitionDuration(start time.Time) {
111110

112111
// markRebuildPayloadForRejectedBlockSuccess increments the counter for the number of times
113112
// the validator successfully rebuilt the payload for a rejected block.
114-
func (m *Metrics) markRebuildPayloadForRejectedBlockSuccess(slot math.Slot) {
115-
m.RebuildPayloadForRejectedBlockSuccess.With("slot", slot.Base10()).Add(1)
113+
func (m *Metrics) markRebuildPayloadForRejectedBlockSuccess() {
114+
m.RebuildPayloadForRejectedBlockSuccess.Add(1)
116115
}
117116

118117
// markRebuildPayloadForRejectedBlockFailure increments the counter for the
119118
// number of times the validator failed to build an optimistic payload
120119
// due to a failure.
121-
func (m *Metrics) markRebuildPayloadForRejectedBlockFailure(slot math.Slot, err error) {
122-
m.RebuildPayloadForRejectedBlockFailure.With("slot", slot.Base10(), "error", err.Error()).Add(1)
120+
func (m *Metrics) markRebuildPayloadForRejectedBlockFailure() {
121+
m.RebuildPayloadForRejectedBlockFailure.Add(1)
123122
}
124123

125124
// markOptimisticPayloadBuildSuccess increments the counter for the number of
126125
// times the validator successfully built an optimistic payload.
127-
func (m *Metrics) markOptimisticPayloadBuildSuccess(slot math.Slot) {
128-
m.OptimisticPayloadBuildSuccess.With("slot", slot.Base10()).Add(1)
126+
func (m *Metrics) markOptimisticPayloadBuildSuccess() {
127+
m.OptimisticPayloadBuildSuccess.Add(1)
129128
}
130129

131130
// markOptimisticPayloadBuildFailure increments the counter for the number of
132131
// times the validator failed to build an optimistic payload.
133-
func (m *Metrics) markOptimisticPayloadBuildFailure(slot math.Slot, err error) {
134-
m.OptimisticPayloadBuildFailure.With("slot", slot.Base10(), "error", err.Error()).Add(1)
132+
func (m *Metrics) markOptimisticPayloadBuildFailure() {
133+
m.OptimisticPayloadBuildFailure.Add(1)
135134
}
136135

137136
// TODO: remove once state caching is activated

beacon/blockchain/payload.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -211,9 +211,8 @@ func (s *Service) handleRebuildPayloadForRejectedBlock(
211211
buildData *builder.RequestPayloadData,
212212
) {
213213
s.logger.Info("Rebuilding payload for rejected block ⏳ ")
214-
nextBlkSlot := buildData.Slot
215214
if _, _, err := s.localBuilder.RequestPayloadAsync(ctx, buildData); err != nil {
216-
s.metrics.markRebuildPayloadForRejectedBlockFailure(nextBlkSlot, err)
215+
s.metrics.markRebuildPayloadForRejectedBlockFailure()
217216
s.logger.Error(
218217
"failed to rebuild payload for nil block",
219218
"error", err,
@@ -223,7 +222,7 @@ func (s *Service) handleRebuildPayloadForRejectedBlock(
223222

224223
s.latestFcuReq.Store(&buildData.FCState)
225224

226-
s.metrics.markRebuildPayloadForRejectedBlockSuccess(nextBlkSlot)
225+
s.metrics.markRebuildPayloadForRejectedBlockSuccess()
227226
}
228227

229228
// handleOptimisticPayloadBuild handles optimistically
@@ -237,7 +236,7 @@ func (s *Service) handleOptimisticPayloadBuild(
237236
"next_slot", buildData.Slot.Base10(),
238237
)
239238
if _, _, err := s.localBuilder.RequestPayloadAsync(ctx, buildData); err != nil {
240-
s.metrics.markOptimisticPayloadBuildFailure(buildData.Slot, err)
239+
s.metrics.markOptimisticPayloadBuildFailure()
241240
s.logger.Error(
242241
"Failed to build optimistic payload",
243242
"for_slot", buildData.Slot.Base10(),
@@ -248,5 +247,5 @@ func (s *Service) handleOptimisticPayloadBuild(
248247

249248
s.latestFcuReq.Store(&buildData.FCState)
250249

251-
s.metrics.markOptimisticPayloadBuildSuccess(buildData.Slot)
250+
s.metrics.markOptimisticPayloadBuildSuccess()
252251
}

execution/engine/engine.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ func (ee *Engine) NotifyForkchoiceUpdate(
115115

116116
case errors.IsAny(err, engineerrors.ErrSyncingPayloadStatus):
117117
ee.logger.Info("NotifyForkchoiceUpdate: EL syncing. Retrying...")
118-
ee.metrics.markForkchoiceUpdateSyncing(req.State, err)
118+
ee.metrics.markForkchoiceUpdateSyncing(req.State)
119119
return nil, err
120120

121121
case client.IsNonFatalError(err):
@@ -173,7 +173,7 @@ func (ee *Engine) NotifyNewPayload(
173173
_, err := backoff.Retry(
174174
ctx,
175175
func() (*common.ExecutionHash, error) {
176-
ee.metrics.markNewPayloadCalled(payloadHash, payloadParentHash)
176+
ee.metrics.markNewPayloadCalled()
177177
lastValidHash, err := ee.ec.NewPayload(
178178
ctx, req,
179179
)

execution/engine/metrics.go

Lines changed: 20 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func NewMetrics(factory metrics.Factory, logger log.Logger) *Metrics {
6868
Name: "beacon_kit_execution_engine_new_payload",
6969
Help: "Number of new payload calls",
7070
},
71-
[]string{"payload_block_hash", "payload_parent_block_hash"},
71+
nil,
7272
),
7373
NewPayloadValid: factory.NewCounter(
7474
metrics.CounterOpts{
@@ -103,21 +103,21 @@ func NewMetrics(factory metrics.Factory, logger log.Logger) *Metrics {
103103
Name: "beacon_kit_execution_engine_new_payload_non_fatal_error",
104104
Help: "Number of non-fatal errors during new payload",
105105
},
106-
[]string{"error"},
106+
nil,
107107
),
108108
NewPayloadFatalError: factory.NewCounter(
109109
metrics.CounterOpts{
110110
Name: "beacon_kit_execution_engine_new_payload_fatal_error",
111111
Help: "Number of fatal errors during new payload",
112112
},
113-
[]string{"error"},
113+
nil,
114114
),
115115
NewPayloadUndefinedError: factory.NewCounter(
116116
metrics.CounterOpts{
117117
Name: "beacon_kit_execution_engine_new_payload_undefined_error",
118118
Help: "Number of undefined errors during new payload",
119119
},
120-
[]string{"error"},
120+
nil,
121121
),
122122

123123
// Forkchoice update metrics
@@ -140,50 +140,44 @@ func NewMetrics(factory metrics.Factory, logger log.Logger) *Metrics {
140140
Name: "beacon_kit_execution_engine_forkchoice_update_syncing",
141141
Help: "Number of syncing forkchoice update responses",
142142
},
143-
[]string{"error"},
143+
nil,
144144
),
145145
ForkchoiceUpdateInvalid: factory.NewCounter(
146146
metrics.CounterOpts{
147147
Name: "beacon_kit_execution_engine_forkchoice_update_invalid",
148148
Help: "Number of invalid forkchoice update responses",
149149
},
150-
[]string{"error"},
150+
nil,
151151
),
152152
ForkchoiceUpdateFatalError: factory.NewCounter(
153153
metrics.CounterOpts{
154154
Name: "beacon_kit_execution_engine_forkchoice_update_fatal_error",
155155
Help: "Number of fatal errors during forkchoice update",
156156
},
157-
[]string{"error"},
157+
nil,
158158
),
159159
ForkchoiceUpdateNonFatalError: factory.NewCounter(
160160
metrics.CounterOpts{
161161
Name: "beacon_kit_execution_engine_forkchoice_update_non_fatal_error",
162162
Help: "Number of non-fatal errors during forkchoice update",
163163
},
164-
[]string{"error"},
164+
nil,
165165
),
166166
ForkchoiceUpdateUndefinedError: factory.NewCounter(
167167
metrics.CounterOpts{
168168
Name: "beacon_kit_execution_engine_forkchoice_update_undefined_error",
169169
Help: "Number of undefined errors during forkchoice update",
170170
},
171-
[]string{"error"},
171+
nil,
172172
),
173173

174174
logger: logger,
175175
}
176176
}
177177

178178
// markNewPayloadCalled increments the counter for new payload calls.
179-
func (m *Metrics) markNewPayloadCalled(
180-
payloadHash common.ExecutionHash,
181-
parentHash common.ExecutionHash,
182-
) {
183-
m.NewPayload.With(
184-
"payload_block_hash", payloadHash.Hex(),
185-
"payload_parent_block_hash", parentHash.Hex(),
186-
).Add(1)
179+
func (m *Metrics) markNewPayloadCalled() {
180+
m.NewPayload.Add(1)
187181
}
188182

189183
// markNewPayloadValid increments the counter for valid payloads.
@@ -249,7 +243,7 @@ func (m *Metrics) markNewPayloadNonFatalError(
249243
"last_valid_hash", lastValidHash,
250244
"error", err,
251245
)
252-
m.NewPayloadNonFatalError.With("error", err.Error()).Add(1)
246+
m.NewPayloadNonFatalError.Add(1)
253247
}
254248

255249
// markNewPayloadFatalError increments the counter for fatal errors.
@@ -265,7 +259,7 @@ func (m *Metrics) markNewPayloadFatalError(
265259
"last_valid_hash", lastValidHash,
266260
"error", err,
267261
)
268-
m.NewPayloadFatalError.With("error", err.Error()).Add(1)
262+
m.NewPayloadFatalError.Add(1)
269263
}
270264

271265
// markNewPayloadUndefinedError increments the counter for undefined errors.
@@ -279,7 +273,7 @@ func (m *Metrics) markNewPayloadUndefinedError(
279273
"parent_hash", payloadHash,
280274
"error", err,
281275
)
282-
m.NewPayloadUndefinedError.With("error", err.Error()).Add(1)
276+
m.NewPayloadUndefinedError.Add(1)
283277
}
284278

285279
// markNotifyForkchoiceUpdateCalled increments the counter for
@@ -310,10 +304,7 @@ func (m *Metrics) markForkchoiceUpdateValid(
310304
}
311305

312306
// markForkchoiceUpdateSyncing increments the counter for syncing forkchoice updates.
313-
func (m *Metrics) markForkchoiceUpdateSyncing(
314-
state *engineprimitives.ForkchoiceStateV1,
315-
err error,
316-
) {
307+
func (m *Metrics) markForkchoiceUpdateSyncing(state *engineprimitives.ForkchoiceStateV1) {
317308
m.logger.Warn(
318309
"Received syncing payload status during forkchoice update. Awaiting execution client to finish sync.",
319310
"head_block_hash",
@@ -323,7 +314,7 @@ func (m *Metrics) markForkchoiceUpdateSyncing(
323314
"finalized_block_hash",
324315
state.FinalizedBlockHash,
325316
)
326-
m.ForkchoiceUpdateSyncing.With("error", err.Error()).Add(1)
317+
m.ForkchoiceUpdateSyncing.Add(1)
327318
}
328319

329320
// markForkchoiceUpdateInvalid increments the counter for invalid forkchoice updates.
@@ -338,7 +329,7 @@ func (m *Metrics) markForkchoiceUpdateInvalid(
338329
"finalized_block_hash", state.FinalizedBlockHash,
339330
"error", err,
340331
)
341-
m.ForkchoiceUpdateInvalid.With("error", err.Error()).Add(1)
332+
m.ForkchoiceUpdateInvalid.Add(1)
342333
}
343334

344335
// markForkchoiceUpdateFatalError increments the counter for fatal errors
@@ -348,7 +339,7 @@ func (m *Metrics) markForkchoiceUpdateFatalError(err error) {
348339
"Received fatal error during forkchoice update call",
349340
"error", err,
350341
)
351-
m.ForkchoiceUpdateFatalError.With("error", err.Error()).Add(1)
342+
m.ForkchoiceUpdateFatalError.Add(1)
352343
}
353344

354345
// markForkchoiceUpdateNonFatalError increments the counter for non-fatal errors
@@ -358,7 +349,7 @@ func (m *Metrics) markForkchoiceUpdateNonFatalError(err error) {
358349
"Received non-fatal error during forkchoice update call",
359350
"error", err,
360351
)
361-
m.ForkchoiceUpdateNonFatalError.With("error", err.Error()).Add(1)
352+
m.ForkchoiceUpdateNonFatalError.Add(1)
362353
}
363354

364355
// markForkchoiceUpdateUndefinedError increments the counter for undefined
@@ -369,5 +360,5 @@ func (m *Metrics) markForkchoiceUpdateUndefinedError(err error) {
369360
"error",
370361
err,
371362
)
372-
m.ForkchoiceUpdateUndefinedError.With("error", err.Error()).Add(1)
363+
m.ForkchoiceUpdateUndefinedError.Add(1)
373364
}

state-transition/core/metrics.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,14 @@ func NewMetrics(factory metrics.Factory) *Metrics {
4646
Name: "beacon_kit_state_block_tx_gas_used",
4747
Help: "Transaction gas used in the block",
4848
},
49-
[]string{"block_number"},
49+
nil,
5050
),
5151
BlockBlobGasUsed: factory.NewGauge(
5252
metrics.GaugeOpts{
5353
Name: "beacon_kit_state_block_blob_gas_used",
5454
Help: "Blob gas used in the block",
5555
},
56-
[]string{"block_number"},
56+
nil,
5757
),
5858
PartialWithdrawalsEnqueued: factory.NewGauge(
5959
metrics.GaugeOpts{
@@ -100,10 +100,9 @@ func NewMetrics(factory metrics.Factory) *Metrics {
100100
}
101101
}
102102

103-
func (m *Metrics) gaugeBlockGasUsed(blockNumber, txGasUsed, blobGasUsed math.U64) {
104-
blockNumberStr := blockNumber.Base10()
105-
m.BlockTxGasUsed.With("block_number", blockNumberStr).Set(float64(txGasUsed.Unwrap()))
106-
m.BlockBlobGasUsed.With("block_number", blockNumberStr).Set(float64(blobGasUsed.Unwrap()))
103+
func (m *Metrics) gaugeBlockGasUsed(txGasUsed, blobGasUsed math.U64) {
104+
m.BlockTxGasUsed.Set(float64(txGasUsed.Unwrap()))
105+
m.BlockBlobGasUsed.Set(float64(blobGasUsed.Unwrap()))
107106
}
108107

109108
func (m *Metrics) gaugePartialWithdrawalsEnqueued(count int) {

state-transition/core/state_processor_payload.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ func (sp *StateProcessor) processExecutionPayload(
9494

9595
if txCtx.MeterGas() {
9696
sp.metrics.gaugeBlockGasUsed(
97-
payload.GetNumber(), payload.GetGasUsed(), payload.GetBlobGasUsed(),
97+
payload.GetGasUsed(), payload.GetBlobGasUsed(),
9898
)
9999
}
100100

0 commit comments

Comments
 (0)