Skip to content

Commit 784b633

Browse files
committed
Add Summary metrics and configurable service-name for backward compatibility
1 parent 1ca3962 commit 784b633

File tree

22 files changed

+376
-424
lines changed

22 files changed

+376
-424
lines changed

beacon/blockchain/blob_fetcher_metrics.go

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -45,41 +45,36 @@ func NewBlobFetcherMetrics(factory metrics.Factory) *BlobFetcherMetrics {
4545
return &BlobFetcherMetrics{
4646
RetriesTotal: factory.NewCounter(
4747
metrics.CounterOpts{
48-
Subsystem: "blob_fetcher",
49-
Name: "retries_total",
50-
Help: "Number of times a blob request was retried after failure",
48+
Name: "beacon_kit_blob_fetcher_retries_total",
49+
Help: "Number of times a blob request was retried after failure",
5150
},
5251
nil,
5352
),
5453
RequestsExpiredTotal: factory.NewCounter(
5554
metrics.CounterOpts{
56-
Subsystem: "blob_fetcher",
57-
Name: "requests_expired_total",
58-
Help: "Number of blob fetch requests that expired before completion",
55+
Name: "beacon_kit_blob_fetcher_requests_expired_total",
56+
Help: "Number of blob fetch requests that expired before completion",
5957
},
6058
[]string{"reason"},
6159
),
6260
RequestsCompletedTotal: factory.NewCounter(
6361
metrics.CounterOpts{
64-
Subsystem: "blob_fetcher",
65-
Name: "requests_completed_total",
66-
Help: "Number of blob fetch requests that completed successfully",
62+
Name: "beacon_kit_blob_fetcher_requests_completed_total",
63+
Help: "Number of blob fetch requests that completed successfully",
6764
},
6865
nil,
6966
),
7067
RequestsQueuedTotal: factory.NewCounter(
7168
metrics.CounterOpts{
72-
Subsystem: "blob_fetcher",
73-
Name: "requests_queued_total",
74-
Help: "Number of new blob fetch requests added to the queue",
69+
Name: "beacon_kit_blob_fetcher_requests_queued_total",
70+
Help: "Number of new blob fetch requests added to the queue",
7571
},
7672
nil,
7773
),
7874
QueueDepth: factory.NewGauge(
7975
metrics.GaugeOpts{
80-
Subsystem: "blob_fetcher",
81-
Name: "queue_depth",
82-
Help: "Current depth of the blob fetcher queue",
76+
Name: "beacon_kit_blob_fetcher_queue_depth",
77+
Help: "Current depth of the blob fetcher queue",
8378
},
8479
nil,
8580
),

beacon/blockchain/metrics.go

Lines changed: 24 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,16 @@ import (
2525

2626
"github.com/berachain/beacon-kit/observability/metrics"
2727
"github.com/berachain/beacon-kit/primitives/math"
28-
"github.com/prometheus/client_golang/prometheus"
2928
)
3029

3130
// Metrics is a struct that contains metrics for the blockchain service.
3231
type Metrics struct {
33-
StateTransitionDuration metrics.Histogram
32+
StateTransitionDuration metrics.Summary
3433
RebuildPayloadForRejectedBlockSuccess metrics.Counter
3534
RebuildPayloadForRejectedBlockFailure metrics.Counter
3635
OptimisticPayloadBuildSuccess metrics.Counter
3736
OptimisticPayloadBuildFailure metrics.Counter
38-
StateRootVerificationDuration metrics.Histogram
37+
StateRootVerificationDuration metrics.Summary
3938
FailedToGetBlockLogs metrics.Counter
4039
FailedToEnqueueDeposits metrics.Counter
4140
}
@@ -44,69 +43,61 @@ type Metrics struct {
4443
// Metric names are kept identical to cosmos-sdk/telemetry output for Grafana compatibility.
4544
func NewMetrics(factory metrics.Factory) *Metrics {
4645
return &Metrics{
47-
StateTransitionDuration: factory.NewHistogram(
48-
metrics.HistogramOpts{
49-
Subsystem: "beacon_blockchain",
50-
Name: "state_transition_duration",
51-
Help: "Time taken to process state transition in seconds",
52-
Buckets: prometheus.ExponentialBucketsRange(0.001, 10, 10),
46+
StateTransitionDuration: factory.NewSummary(
47+
metrics.SummaryOpts{
48+
Name: "beacon_kit_beacon_blockchain_state_transition_duration",
49+
Help: "Time taken to process state transition in seconds",
50+
Objectives: metrics.QuantilesP50P90P99,
5351
},
5452
nil,
5553
),
5654
RebuildPayloadForRejectedBlockSuccess: factory.NewCounter(
5755
metrics.CounterOpts{
58-
Subsystem: "blockchain",
59-
Name: "rebuild_payload_for_rejected_block_success",
60-
Help: "Number of successful payload rebuilds for rejected blocks",
56+
Name: "beacon_kit_blockchain_rebuild_payload_for_rejected_block_success",
57+
Help: "Number of successful payload rebuilds for rejected blocks",
6158
},
6259
[]string{"slot"},
6360
),
6461
RebuildPayloadForRejectedBlockFailure: factory.NewCounter(
6562
metrics.CounterOpts{
66-
Subsystem: "blockchain",
67-
Name: "rebuild_payload_for_rejected_block_failure",
68-
Help: "Number of failed payload rebuilds for rejected blocks",
63+
Name: "beacon_kit_blockchain_rebuild_payload_for_rejected_block_failure",
64+
Help: "Number of failed payload rebuilds for rejected blocks",
6965
},
7066
[]string{"slot", "error"},
7167
),
7268
OptimisticPayloadBuildSuccess: factory.NewCounter(
7369
metrics.CounterOpts{
74-
Subsystem: "blockchain",
75-
Name: "optimistic_payload_build_success",
76-
Help: "Number of successful optimistic payload builds",
70+
Name: "beacon_kit_blockchain_optimistic_payload_build_success",
71+
Help: "Number of successful optimistic payload builds",
7772
},
7873
[]string{"slot"},
7974
),
8075
OptimisticPayloadBuildFailure: factory.NewCounter(
8176
metrics.CounterOpts{
82-
Subsystem: "blockchain",
83-
Name: "optimistic_payload_build_failure",
84-
Help: "Number of failed optimistic payload builds",
77+
Name: "beacon_kit_blockchain_optimistic_payload_build_failure",
78+
Help: "Number of failed optimistic payload builds",
8579
},
8680
[]string{"slot", "error"},
8781
),
88-
StateRootVerificationDuration: factory.NewHistogram(
89-
metrics.HistogramOpts{
90-
Subsystem: "blockchain",
91-
Name: "state_root_verification_duration",
92-
Help: "Time taken to verify state root in seconds",
93-
Buckets: prometheus.ExponentialBucketsRange(0.001, 10, 10),
82+
StateRootVerificationDuration: factory.NewSummary(
83+
metrics.SummaryOpts{
84+
Name: "beacon_kit_blockchain_state_root_verification_duration",
85+
Help: "Time taken to verify state root in seconds",
86+
Objectives: metrics.QuantilesP50P90P99,
9487
},
9588
nil,
9689
),
9790
FailedToGetBlockLogs: factory.NewCounter(
9891
metrics.CounterOpts{
99-
Subsystem: "execution_deposit",
100-
Name: "failed_to_get_block_logs",
101-
Help: "Number of times failed to read deposits from execution layer block logs",
92+
Name: "beacon_kit_execution_deposit_failed_to_get_block_logs",
93+
Help: "Number of times failed to read deposits from execution layer block logs",
10294
},
10395
[]string{"block_num"},
10496
),
10597
FailedToEnqueueDeposits: factory.NewCounter(
10698
metrics.CounterOpts{
107-
Subsystem: "execution_deposit",
108-
Name: "failed_to_enqueue_deposits",
109-
Help: "Number of times failed to enqueue deposits to storage",
99+
Name: "beacon_kit_execution_deposit_failed_to_enqueue_deposits",
100+
Help: "Number of times failed to enqueue deposits to storage",
110101
},
111102
[]string{"block_num"},
112103
),

beacon/validator/metrics.go

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,17 @@ import (
2525

2626
"github.com/berachain/beacon-kit/observability/metrics"
2727
"github.com/berachain/beacon-kit/primitives/math"
28-
"github.com/prometheus/client_golang/prometheus"
2928
)
3029

3130
// Metrics is a struct that contains metrics for the validator service.
3231
type Metrics struct {
3332
// RequestBlockForProposalDuration tracks time to request block for proposal
34-
RequestBlockForProposalDuration metrics.Histogram
33+
// Using Summary for backward compatibility with cosmos-sdk/telemetry.
34+
RequestBlockForProposalDuration metrics.Summary
3535

3636
// StateRootComputationDuration tracks time to compute state root
37-
StateRootComputationDuration metrics.Histogram
37+
// Using Summary for backward compatibility with cosmos-sdk/telemetry.
38+
StateRootComputationDuration metrics.Summary
3839

3940
// FailedToRetrievePayload tracks failed payload retrievals
4041
FailedToRetrievePayload metrics.Counter
@@ -44,29 +45,26 @@ type Metrics struct {
4445
// Metric names are kept identical to cosmos-sdk/telemetry output for Grafana compatibility.
4546
func NewMetrics(factory metrics.Factory) *Metrics {
4647
return &Metrics{
47-
RequestBlockForProposalDuration: factory.NewHistogram(
48-
metrics.HistogramOpts{
49-
Subsystem: "validator",
50-
Name: "request_block_for_proposal_duration",
51-
Help: "Time taken to request block for proposal in seconds",
52-
Buckets: prometheus.ExponentialBucketsRange(0.001, 10, 10),
48+
RequestBlockForProposalDuration: factory.NewSummary(
49+
metrics.SummaryOpts{
50+
Name: "beacon_kit_validator_request_block_for_proposal_duration",
51+
Help: "Time taken to request block for proposal in seconds",
52+
Objectives: metrics.QuantilesP50P90P99,
5353
},
5454
nil,
5555
),
56-
StateRootComputationDuration: factory.NewHistogram(
57-
metrics.HistogramOpts{
58-
Subsystem: "validator",
59-
Name: "state_root_computation_duration",
60-
Help: "Time taken to compute state root in seconds",
61-
Buckets: prometheus.ExponentialBucketsRange(0.001, 10, 10),
56+
StateRootComputationDuration: factory.NewSummary(
57+
metrics.SummaryOpts{
58+
Name: "beacon_kit_validator_state_root_computation_duration",
59+
Help: "Time taken to compute state root in seconds",
60+
Objectives: metrics.QuantilesP50P90P99,
6261
},
6362
nil,
6463
),
6564
FailedToRetrievePayload: factory.NewCounter(
6665
metrics.CounterOpts{
67-
Subsystem: "validator",
68-
Name: "failed_to_retrieve_payload",
69-
Help: "Number of times validator failed to retrieve payload",
66+
Name: "beacon_kit_validator_failed_to_retrieve_payload",
67+
Help: "Number of times validator failed to retrieve payload",
7068
},
7169
[]string{"slot", "error"},
7270
),

config/config/config.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ type TelemetryConfig struct {
8282
// When true, all beacon-kit services emit Prometheus metrics.
8383
// When false, all metrics are no-op with zero runtime overhead.
8484
Enabled bool `mapstructure:"enabled"`
85+
86+
// ServiceName defines the namespace for all Prometheus metrics.
87+
ServiceName string `mapstructure:"service-name"`
8588
}
8689

8790
// Config defines the server's top level configuration.
@@ -106,7 +109,8 @@ func DefaultConfig() *Config {
106109
IAVLDisableFastNode: false,
107110
},
108111
Telemetry: TelemetryConfig{
109-
Enabled: false,
112+
Enabled: false,
113+
ServiceName: "beacond_node",
110114
},
111115
}
112116
}

config/config/config.toml.tpl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ inter-block-cache = {{ .BaseConfig.InterBlockCache }}
5050
# IavlCacheSize set the size of the iavl tree cache (in number of nodes).
5151
iavl-cache-size = {{ .BaseConfig.IAVLCacheSize }}
5252

53-
# IAVLDisableFastNode enables or disables the fast node feature of IAVL.
53+
# IAVLDisableFastNode enables or disables the fast node feature of IAVL.
5454
# Default is false.
5555
iavl-disable-fastnode = {{ .BaseConfig.IAVLDisableFastNode }}
5656

@@ -66,3 +66,6 @@ iavl-disable-fastnode = {{ .BaseConfig.IAVLDisableFastNode }}
6666
# When false, all metrics are no-op with zero runtime overhead.
6767
# Default: false
6868
enabled = {{ .Telemetry.Enabled }}
69+
70+
# ServiceName defines the namespace prefix for all Prometheus metrics.
71+
service-name = "{{ .Telemetry.ServiceName }}"

consensus/cometbft/service/metrics.go

Lines changed: 22 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -24,64 +24,55 @@ import (
2424
"time"
2525

2626
"github.com/berachain/beacon-kit/observability/metrics"
27-
prominternal "github.com/prometheus/client_golang/prometheus"
2827
)
2928

3029
// Metrics holds metrics for the CometBFT service.
31-
//
32-
// Metric names are kept identical to cosmos-sdk/telemetry output for Grafana compatibility.
3330
type Metrics struct {
3431
// QueryCount tracks the number of ABCI queries received, labeled by query path.
3532
QueryCount metrics.Counter
3633

3734
// QueryDuration tracks the time taken to process ABCI queries, labeled by query path.
38-
QueryDuration metrics.Histogram
35+
QueryDuration metrics.Summary
3936

4037
// PrepareProposalDuration tracks the time taken to prepare a proposal.
41-
PrepareProposalDuration metrics.Histogram
38+
PrepareProposalDuration metrics.Summary
4239

4340
// ProcessProposalDuration tracks the time taken to process a proposal.
44-
ProcessProposalDuration metrics.Histogram
41+
ProcessProposalDuration metrics.Summary
4542
}
4643

47-
// NewMetrics creates a new Metrics instance using the provided factory.
48-
// The factory determines whether real Prometheus metrics or no-op metrics are created.
49-
//
50-
//nolint:mnd // magic numbers are histogram bucket ranges for timing metrics
44+
// NewMetrics creates a new Metrics instance using the provided factory. The factory determines
45+
// whether real Prometheus metrics or no-op metrics are created.
5146
func NewMetrics(factory metrics.Factory) *Metrics {
5247
return &Metrics{
5348
QueryCount: factory.NewCounter(
5449
metrics.CounterOpts{
55-
Subsystem: "comet",
56-
Name: "query_count",
57-
Help: "Total number of ABCI queries received",
50+
Name: "beacon_kit_comet_query_count",
51+
Help: "Total number of ABCI queries received",
5852
},
5953
[]string{"path"},
6054
),
61-
QueryDuration: factory.NewHistogram(
62-
metrics.HistogramOpts{
63-
Subsystem: "comet",
64-
Name: "query_duration",
65-
Help: "Time taken to process ABCI queries in seconds",
66-
Buckets: prominternal.ExponentialBucketsRange(0.001, 10, 10),
55+
QueryDuration: factory.NewSummary(
56+
metrics.SummaryOpts{
57+
Name: "beacon_kit_comet_query_duration",
58+
Help: "Time taken to process ABCI queries in seconds",
59+
Objectives: metrics.QuantilesP50P90P99,
6760
},
6861
[]string{"path"},
6962
),
70-
PrepareProposalDuration: factory.NewHistogram(
71-
metrics.HistogramOpts{
72-
Subsystem: "runtime",
73-
Name: "prepare_proposal_duration",
74-
Help: "Time taken to prepare a proposal in seconds",
75-
Buckets: prominternal.ExponentialBucketsRange(0.001, 10, 10),
63+
PrepareProposalDuration: factory.NewSummary(
64+
metrics.SummaryOpts{
65+
Name: "beacon_kit_runtime_prepare_proposal_duration",
66+
Help: "Time taken to prepare a proposal in seconds",
67+
Objectives: metrics.QuantilesP50P90P99,
7668
},
7769
nil,
7870
),
79-
ProcessProposalDuration: factory.NewHistogram(
80-
metrics.HistogramOpts{
81-
Subsystem: "runtime",
82-
Name: "process_proposal_duration",
83-
Help: "Time taken to process a proposal in seconds",
84-
Buckets: prominternal.ExponentialBucketsRange(0.001, 10, 10),
71+
ProcessProposalDuration: factory.NewSummary(
72+
metrics.SummaryOpts{
73+
Name: "beacon_kit_runtime_process_proposal_duration",
74+
Help: "Time taken to process a proposal in seconds",
75+
Objectives: metrics.QuantilesP50P90P99,
8576
},
8677
nil,
8778
),

0 commit comments

Comments
 (0)