mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-11-10 18:15:19 +00:00
d91bd688e7
* Rocksdb Metrics * Add rocksdb namespace for options * Adding help to the metrics * CR's fixes * CR's fixes * CR's fixes
167 lines
5.4 KiB
Go
167 lines
5.4 KiB
Go
//go:build rocksdb
|
|
// +build rocksdb
|
|
|
|
package opendb
|
|
|
|
import (
|
|
"github.com/go-kit/kit/metrics"
|
|
"github.com/go-kit/kit/metrics/prometheus"
|
|
stdprometheus "github.com/prometheus/client_golang/prometheus"
|
|
)
|
|
|
|
// rocksdbMetrics will be initialized in registerMetrics() if enableRocksdbMetrics flag set to true
|
|
var rocksdbMetrics *Metrics
|
|
|
|
// Metrics contains all rocksdb metrics which will be reported to prometheus
|
|
type Metrics struct {
|
|
// Keys
|
|
NumberKeysWritten metrics.Gauge
|
|
NumberKeysRead metrics.Gauge
|
|
NumberKeysUpdated metrics.Gauge
|
|
EstimateNumKeys metrics.Gauge
|
|
|
|
// Files
|
|
NumberFileOpens metrics.Gauge
|
|
NumberFileErrors metrics.Gauge
|
|
|
|
// Memory
|
|
BlockCacheUsage metrics.Gauge
|
|
EstimateTableReadersMem metrics.Gauge
|
|
CurSizeAllMemTables metrics.Gauge
|
|
BlockCachePinnedUsage metrics.Gauge
|
|
|
|
// Cache
|
|
BlockCacheMiss metrics.Gauge
|
|
BlockCacheHit metrics.Gauge
|
|
BlockCacheAdd metrics.Gauge
|
|
BlockCacheAddFailures metrics.Gauge
|
|
}
|
|
|
|
// registerMetrics registers metrics in prometheus and initializes rocksdbMetrics variable
|
|
func registerMetrics() {
|
|
if rocksdbMetrics != nil {
|
|
// metrics already registered
|
|
return
|
|
}
|
|
|
|
labels := make([]string, 0)
|
|
rocksdbMetrics = &Metrics{
|
|
// Keys
|
|
NumberKeysWritten: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
|
|
Namespace: "rocksdb",
|
|
Subsystem: "key",
|
|
Name: "number_keys_written",
|
|
Help: "",
|
|
}, labels),
|
|
NumberKeysRead: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
|
|
Namespace: "rocksdb",
|
|
Subsystem: "key",
|
|
Name: "number_keys_read",
|
|
Help: "",
|
|
}, labels),
|
|
NumberKeysUpdated: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
|
|
Namespace: "rocksdb",
|
|
Subsystem: "key",
|
|
Name: "number_keys_updated",
|
|
Help: "",
|
|
}, labels),
|
|
EstimateNumKeys: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
|
|
Namespace: "rocksdb",
|
|
Subsystem: "key",
|
|
Name: "estimate_num_keys",
|
|
Help: "estimated number of total keys in the active and unflushed immutable memtables and storage",
|
|
}, labels),
|
|
|
|
// Files
|
|
NumberFileOpens: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
|
|
Namespace: "rocksdb",
|
|
Subsystem: "file",
|
|
Name: "number_file_opens",
|
|
Help: "",
|
|
}, labels),
|
|
NumberFileErrors: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
|
|
Namespace: "rocksdb",
|
|
Subsystem: "file",
|
|
Name: "number_file_errors",
|
|
Help: "",
|
|
}, labels),
|
|
|
|
// Memory
|
|
BlockCacheUsage: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
|
|
Namespace: "rocksdb",
|
|
Subsystem: "memory",
|
|
Name: "block_cache_usage",
|
|
Help: "memory size for the entries residing in block cache",
|
|
}, labels),
|
|
EstimateTableReadersMem: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
|
|
Namespace: "rocksdb",
|
|
Subsystem: "memory",
|
|
Name: "estimate_table_readers_mem",
|
|
Help: "estimated memory used for reading SST tables, excluding memory used in block cache (e.g., filter and index blocks)",
|
|
}, labels),
|
|
CurSizeAllMemTables: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
|
|
Namespace: "rocksdb",
|
|
Subsystem: "memory",
|
|
Name: "cur_size_all_mem_tables",
|
|
Help: "approximate size of active and unflushed immutable memtables (bytes)",
|
|
}, labels),
|
|
BlockCachePinnedUsage: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
|
|
Namespace: "rocksdb",
|
|
Subsystem: "memory",
|
|
Name: "block_cache_pinned_usage",
|
|
Help: "returns the memory size for the entries being pinned",
|
|
}, labels),
|
|
|
|
// Cache
|
|
BlockCacheMiss: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
|
|
Namespace: "rocksdb",
|
|
Subsystem: "cache",
|
|
Name: "block_cache_miss",
|
|
Help: "block_cache_miss == block_cache_index_miss + block_cache_filter_miss + block_cache_data_miss",
|
|
}, labels),
|
|
BlockCacheHit: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
|
|
Namespace: "rocksdb",
|
|
Subsystem: "cache",
|
|
Name: "block_cache_hit",
|
|
Help: "block_cache_hit == block_cache_index_hit + block_cache_filter_hit + block_cache_data_hit",
|
|
}, labels),
|
|
BlockCacheAdd: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
|
|
Namespace: "rocksdb",
|
|
Subsystem: "cache",
|
|
Name: "block_cache_add",
|
|
Help: "number of blocks added to block cache",
|
|
}, labels),
|
|
BlockCacheAddFailures: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
|
|
Namespace: "rocksdb",
|
|
Subsystem: "cache",
|
|
Name: "block_cache_add_failures",
|
|
Help: "number of failures when adding blocks to block cache",
|
|
}, labels),
|
|
}
|
|
}
|
|
|
|
// report reports metrics to prometheus based on rocksdb props and stats
|
|
func (m *Metrics) report(props *properties, stats *stats) {
|
|
// Keys
|
|
m.NumberKeysWritten.Set(float64(stats.NumberKeysWritten))
|
|
m.NumberKeysRead.Set(float64(stats.NumberKeysRead))
|
|
m.NumberKeysUpdated.Set(float64(stats.NumberKeysUpdated))
|
|
m.EstimateNumKeys.Set(float64(props.EstimateNumKeys))
|
|
|
|
// Files
|
|
m.NumberFileOpens.Set(float64(stats.NumberFileOpens))
|
|
m.NumberFileErrors.Set(float64(stats.NumberFileErrors))
|
|
|
|
// Memory
|
|
m.BlockCacheUsage.Set(float64(props.BlockCacheUsage))
|
|
m.EstimateTableReadersMem.Set(float64(props.EstimateTableReadersMem))
|
|
m.CurSizeAllMemTables.Set(float64(props.CurSizeAllMemTables))
|
|
m.BlockCachePinnedUsage.Set(float64(props.BlockCachePinnedUsage))
|
|
|
|
// Cache
|
|
m.BlockCacheMiss.Set(float64(stats.BlockCacheMiss))
|
|
m.BlockCacheHit.Set(float64(stats.BlockCacheHit))
|
|
m.BlockCacheAdd.Set(float64(stats.BlockCacheAdd))
|
|
m.BlockCacheAddFailures.Set(float64(stats.BlockCacheAddFailures))
|
|
}
|