gitee.com/lh-her-team/common@v1.5.1/monitor/metric.go (about) 1 package monitor 2 3 import ( 4 "fmt" 5 "sync" 6 7 "github.com/prometheus/client_golang/prometheus" 8 ) 9 10 const ( 11 namespace = "herbt" 12 ) 13 14 const ( 15 SUBSYSTEM_GRPC = "grpc" 16 SUBSYSTEM_CORE_COMMITTER = "committer" 17 SUBSYSTEM_RPCSERVER = "rpcserver" 18 SUBSYSTEM_CORE_PROPOSER_SCHEDULER = "scheduler" 19 SUBSYSTEM_CORE_PROPOSER = "proposer" 20 SUBSYSTEM_CORE_VERIFIER = "verifier" 21 SUBSYSTEM_TXPOOL = "txpool" 22 SUBSYSTEM_VM = "vm" 23 24 ChainId = "chainId" 25 PoolType = "poolType" 26 MetricBlockSize = "metric_block_size" 27 MetricBlockCounter = "metric_block_counter" 28 MetricTxCounter = "metric_tx_counter" 29 MetricTxPoolSize = "metric_tx_pool_size" // tx pool 30 MetricValidateTxInDBTime = "validate_tx_exist_db_time" // tx pool 31 MetricValidateTxSignTime = "validate_tx_sign_time" // tx pool 32 MetricTpsGauge = "metric_tps_gauge" 33 MetricBlockCommitTime = "metric_block_commit_time" 34 MetricBlockIntervalTime = "metric_block_interval_time" 35 HelpCurrentBlockSizeMetric = "current block size metric" 36 HelpBlockCountsMetric = "block counts metric" 37 HelpTxCountsMetric = "tx counts metric" 38 HelpTxPoolSizeMetric = "tx pool size metric" // tx pool 39 MetricValidateTxInDBTimeMetric = "validate tx exist in db time metric" // tx pool 40 MetricValidateTxSignTimeMetric = "validate tx sign time metric" // tx pool 41 HelpTpsGaugeMetric = "real-time transaction per second (TPS) metric" 42 HelpBlockCommitTimeMetric = "block commit time metric" 43 HelpBlockIntervalTimeMetric = "block interval metric" 44 MetricDeployedContractCounter = "metric_deployed_contract_counter" 45 MetricContractInvokeCounter = "metric_contract_invoke_counter" 46 MetricGasUsedHistogram = "metric_gas_used_histogram" 47 HelpDeployedContractCounterMetric = "deployed contract counter metric" 48 HelpContractInvokeCounterMetric = "contract invoke counter metric" 49 HelpGasUsedHistogramMetric = "gas used histogram metric" 50 ) 51 52 var ( 53 counterVecs map[string]*prometheus.CounterVec 54 histogramVecs map[string]*prometheus.HistogramVec 55 gaugeVecs map[string]*prometheus.GaugeVec 56 counterVecsMutex sync.Mutex 57 histogramVecsMutex sync.Mutex 58 gaugeVecsMutex sync.Mutex 59 ) 60 61 func init() { 62 counterVecs = make(map[string]*prometheus.CounterVec) 63 histogramVecs = make(map[string]*prometheus.HistogramVec) 64 gaugeVecs = make(map[string]*prometheus.GaugeVec) 65 } 66 67 func NewCounterVec(subsystem, name, help string, labels ...string) *prometheus.CounterVec { 68 counterVecsMutex.Lock() 69 defer counterVecsMutex.Unlock() 70 s := fmt.Sprintf("%s_%s", subsystem, name) 71 if metric, ok := counterVecs[s]; ok { 72 return metric 73 } 74 metric := prometheus.NewCounterVec( 75 prometheus.CounterOpts{ 76 Namespace: namespace, 77 Subsystem: subsystem, 78 Name: name, 79 Help: help, 80 }, labels) 81 prometheus.MustRegister(metric) 82 counterVecs[s] = metric 83 return metric 84 } 85 86 func NewHistogramVec(subsystem, name, help string, buckets []float64, labels ...string) *prometheus.HistogramVec { 87 histogramVecsMutex.Lock() 88 defer histogramVecsMutex.Unlock() 89 s := fmt.Sprintf("%s_%s", subsystem, name) 90 if metric, ok := histogramVecs[s]; ok { 91 return metric 92 } 93 metric := prometheus.NewHistogramVec( 94 prometheus.HistogramOpts{ 95 Namespace: namespace, 96 Subsystem: subsystem, 97 Name: name, 98 Help: help, 99 Buckets: buckets, 100 }, labels) 101 prometheus.MustRegister(metric) 102 histogramVecs[s] = metric 103 return metric 104 } 105 106 func NewGaugeVec(subsystem, name, help string, labels ...string) *prometheus.GaugeVec { 107 gaugeVecsMutex.Lock() 108 defer gaugeVecsMutex.Unlock() 109 s := fmt.Sprintf("%s_%s", subsystem, name) 110 if metric, ok := gaugeVecs[s]; ok { 111 return metric 112 } 113 metric := prometheus.NewGaugeVec( 114 prometheus.GaugeOpts{ 115 Namespace: namespace, 116 Subsystem: subsystem, 117 Name: name, 118 Help: help, 119 }, labels) 120 prometheus.MustRegister(metric) 121 gaugeVecs[s] = metric 122 return metric 123 } 124 125 func NewHistogram(subsystem, name, help string, buckets []float64) *prometheus.Histogram { 126 metric := prometheus.NewHistogram( 127 prometheus.HistogramOpts{ 128 Namespace: namespace, 129 Subsystem: subsystem, 130 Name: name, 131 Help: help, 132 Buckets: buckets, 133 }) 134 135 prometheus.MustRegister(metric) 136 return &metric 137 }