feat(metrics): add block transaction count and SR set change monitoring#6624
feat(metrics): add block transaction count and SR set change monitoring#6624warku123 wants to merge 7 commits intotronprotocol:developfrom
Conversation
…monitoring Replace the dedicated tron:block_empty_total counter with a more comprehensive tron:block_transaction_count histogram that tracks the distribution of transaction counts per block. Changes: - Add overloaded init() method in MetricsHistogram to support custom buckets - Add BLOCK_TRANSACTION_COUNT histogram with buckets [0, 10, 50, 100, 200, 500, 1000, 2000, 5000, 10000] - Record transaction count for all blocks (including empty blocks with txCount=0) - Empty blocks can be queried via bucket le=0.0 - Remove unused BLOCK_EMPTY counter This provides richer insights for network analysis while still supporting empty block monitoring via histogram bucket queries. Closes tronprotocol#6590
Replace duplicated miner string literal with MINER_LABEL constant to fix SonarQube code smell. Relates tronprotocol#6624
- Replace duplicated miner string literal with MINER_LABEL constant in PrometheusApiServiceTest to fix SonarQube code smell - Add //NOSONAR comment for new BLOCK_TRANSACTION_COUNT histogram label name in MetricsHistogram Relates tronprotocol#6624
4433c52 to
93d0083
Compare
Extract repeated 'miner' string literal into MINER_LABEL constant in MetricsHistogram to follow DRY principle and fix SonarQube warning. Also update PrometheusApiServiceTest to use MINER_LABEL constant for test assertions. Relates tronprotocol#6624
93d0083 to
6315ffc
Compare
Extract repeated 'miner' string literal into MINER_LABEL constant in MetricsHistogram to follow DRY principle and fix SonarQube warning. Also update PrometheusApiServiceTest to use MINER_LABEL constant for test assertions. Relates tronprotocol#6624
6315ffc to
e92b8e2
Compare
| public static final String TXS = "tron:txs"; | ||
| public static final String MINER = "tron:miner"; | ||
| public static final String BLOCK_FORK = "tron:block_fork"; | ||
| public static final String SR_SET_CHANGE = "tron:sr_set_change"; |
There was a problem hiding this comment.
The name tron:sr_set_change can be misleading — it sounds like it tracks changes to the entire SR set, when it actually monitors rotation of the top 27 block-producing SRs (Active Witnesses).
Suggested alternatives for better clarity:
-
tron:active_sr_change -
tron:active_witness_change -
tron:top27_sr_change
This way, operators can immediately understand what the metric represents when viewing Prometheus dashboards.
| init(MetricKeys.Counter.TXS, "tron txs info .", "type", "detail"); | ||
| init(MetricKeys.Counter.MINER, "tron miner info .", "miner", "type"); | ||
| init(MetricKeys.Counter.BLOCK_FORK, "tron block fork info .", "type"); | ||
| init(MetricKeys.Counter.SR_SET_CHANGE, "tron sr set change .", "action", "witness"); |
There was a problem hiding this comment.
The witness label uses addresses. Although the Active SR pool is relatively limited (27 slots), as SRs rotate in and out over time, label values will accumulate monotonically — they only grow, never shrink. This is a known Prometheus anti-pattern.
Practical impact assessment:
-
TRON's SR candidate pool is not infinite, and rotation frequency is low, so it won't explode in the short term
-
However, as a
long-running node metric, months or years of operation could still accumulate a significant number of time series
Possible approaches:
-
If the address dimension is truly needed, keep the current design, but document this characteristic
-
Or remove the
witnesslabel entirely, keeping onlyaction(add/remove), and output address details via logs instead. Follow the principle thatPrometheus should be used for alerting and awareness, while logs are for precise investigation and root-cause analysis.
What does this PR do?
Add two new metrics enhancements for better network monitoring:
Block Transaction Count Histogram
tron:block_empty_totalcounter withtron:block_transaction_counthistogramle=0.0bucketBLOCK_EMPTYcounterSR Set Change Monitoring
tron:sr_set_changecounter to track SR membership changesaction(add/remove),witness(SR address)Changes:
init()method inMetricsHistogramfor custom bucketsBLOCK_TRANSACTION_COUNThistogram metricSR_SET_CHANGEcounter withSR_ADD/SR_REMOVElabelsBlockChainMetricManagerPrometheusApiServiceTestwith comprehensive test coverageWhy are these changes required?
Compared to #6602, this PR provides a cleaner implementation focused solely on metrics enhancement without additional complexity.
This PR has been tested by:
PrometheusApiServiceTest)Follow up
N/A
Extra details