register metrics

Signed-off-by: jsvisa <delweng@gmail.com>
This commit is contained in:
jsvisa 2025-05-23 12:44:49 +08:00
parent 34fe4861fd
commit 410f569c9d
2 changed files with 40 additions and 34 deletions

View file

@ -294,37 +294,7 @@ func New(file string, cache int, handles int, namespace string, readonly bool) (
return nil, err
}
db.db = innerDB
db.compTimeMeter = metrics.GetOrRegisterMeter(namespace+"compact/time", nil)
db.compReadMeter = metrics.GetOrRegisterMeter(namespace+"compact/input", nil)
db.compWriteMeter = metrics.GetOrRegisterMeter(namespace+"compact/output", nil)
db.diskSizeGauge = metrics.GetOrRegisterGauge(namespace+"disk/size", nil)
db.diskReadMeter = metrics.GetOrRegisterMeter(namespace+"disk/read", nil)
db.diskWriteMeter = metrics.GetOrRegisterMeter(namespace+"disk/write", nil)
db.writeDelayMeter = metrics.GetOrRegisterMeter(namespace+"compact/writedelay/duration", nil)
db.writeDelayNMeter = metrics.GetOrRegisterMeter(namespace+"compact/writedelay/counter", nil)
db.memCompGauge = metrics.GetOrRegisterGauge(namespace+"compact/memory", nil)
db.level0CompGauge = metrics.GetOrRegisterGauge(namespace+"compact/level0", nil)
db.nonlevel0CompGauge = metrics.GetOrRegisterGauge(namespace+"compact/nonlevel0", nil)
db.seekCompGauge = metrics.GetOrRegisterGauge(namespace+"compact/seek", nil)
db.manualMemAllocGauge = metrics.GetOrRegisterGauge(namespace+"memory/manualalloc", nil)
db.liveMemTablesGauge = metrics.GetOrRegisterGauge(namespace+"table/live", nil)
db.zombieMemTablesGauge = metrics.GetOrRegisterGauge(namespace+"table/zombie", nil)
db.blockCacheHitGauge = metrics.GetOrRegisterGauge(namespace+"cache/block/hit", nil)
db.blockCacheMissGauge = metrics.GetOrRegisterGauge(namespace+"cache/block/miss", nil)
db.tableCacheHitGauge = metrics.GetOrRegisterGauge(namespace+"cache/table/hit", nil)
db.tableCacheMissGauge = metrics.GetOrRegisterGauge(namespace+"cache/table/miss", nil)
db.filterHitGauge = metrics.GetOrRegisterGauge(namespace+"filter/hit", nil)
db.filterMissGauge = metrics.GetOrRegisterGauge(namespace+"filter/miss", nil)
db.estimatedCompDebtGauge = metrics.GetOrRegisterGauge(namespace+"compact/estimateDebt", nil)
db.liveCompGauge = metrics.GetOrRegisterGauge(namespace+"compact/live/count", nil)
db.liveCompSizeGauge = metrics.GetOrRegisterGauge(namespace+"compact/live/size", nil)
db.readExistedCount = metrics.GetOrRegisterCounter(namespace+"read/existed/count", nil)
db.readNotfoundCount = metrics.GetOrRegisterCounter(namespace+"read/notfound/count", nil)
db.writeCount = metrics.GetOrRegisterCounter(namespace+"write/count", nil)
db.readExistedTime = metrics.NewRegisteredResettingTimer(namespace+"read/existed/duration", nil)
db.readNotfoundTime = metrics.NewRegisteredResettingTimer(namespace+"read/notfound/duration", nil)
db.writeTime = metrics.NewRegisteredResettingTimer(namespace+"write/duration", nil)
db.registerMetrics(namespace)
// Start up the metrics gathering and return
go db.meter(metricsGatheringInterval, namespace)
@ -521,6 +491,40 @@ func (d *Database) SyncKeyValue() error {
return d.db.Apply(b, pebble.Sync)
}
// registerMetrics registers the metrics for the database.
func (d *Database) registerMetrics(namespace string) {
d.compTimeMeter = metrics.GetOrRegisterMeter(namespace+"compact/time", nil)
d.compReadMeter = metrics.GetOrRegisterMeter(namespace+"compact/input", nil)
d.compWriteMeter = metrics.GetOrRegisterMeter(namespace+"compact/output", nil)
d.diskSizeGauge = metrics.GetOrRegisterGauge(namespace+"disk/size", nil)
d.diskReadMeter = metrics.GetOrRegisterMeter(namespace+"disk/read", nil)
d.diskWriteMeter = metrics.GetOrRegisterMeter(namespace+"disk/write", nil)
d.writeDelayMeter = metrics.GetOrRegisterMeter(namespace+"compact/writedelay/duration", nil)
d.writeDelayNMeter = metrics.GetOrRegisterMeter(namespace+"compact/writedelay/counter", nil)
d.memCompGauge = metrics.GetOrRegisterGauge(namespace+"compact/memory", nil)
d.level0CompGauge = metrics.GetOrRegisterGauge(namespace+"compact/level0", nil)
d.nonlevel0CompGauge = metrics.GetOrRegisterGauge(namespace+"compact/nonlevel0", nil)
d.seekCompGauge = metrics.GetOrRegisterGauge(namespace+"compact/seek", nil)
d.manualMemAllocGauge = metrics.GetOrRegisterGauge(namespace+"memory/manualalloc", nil)
d.liveMemTablesGauge = metrics.GetOrRegisterGauge(namespace+"table/live", nil)
d.zombieMemTablesGauge = metrics.GetOrRegisterGauge(namespace+"table/zombie", nil)
d.blockCacheHitGauge = metrics.GetOrRegisterGauge(namespace+"cache/block/hit", nil)
d.blockCacheMissGauge = metrics.GetOrRegisterGauge(namespace+"cache/block/miss", nil)
d.tableCacheHitGauge = metrics.GetOrRegisterGauge(namespace+"cache/table/hit", nil)
d.tableCacheMissGauge = metrics.GetOrRegisterGauge(namespace+"cache/table/miss", nil)
d.filterHitGauge = metrics.GetOrRegisterGauge(namespace+"filter/hit", nil)
d.filterMissGauge = metrics.GetOrRegisterGauge(namespace+"filter/miss", nil)
d.estimatedCompDebtGauge = metrics.GetOrRegisterGauge(namespace+"compact/estimateDebt", nil)
d.liveCompGauge = metrics.GetOrRegisterGauge(namespace+"compact/live/count", nil)
d.liveCompSizeGauge = metrics.GetOrRegisterGauge(namespace+"compact/live/size", nil)
d.readExistedCount = metrics.GetOrRegisterCounter(namespace+"read/existed/count", nil)
d.readNotfoundCount = metrics.GetOrRegisterCounter(namespace+"read/notfound/count", nil)
d.writeCount = metrics.GetOrRegisterCounter(namespace+"write/count", nil)
d.readExistedTime = metrics.NewRegisteredResettingTimer(namespace+"read/existed/duration", nil)
d.readNotfoundTime = metrics.NewRegisteredResettingTimer(namespace+"read/notfound/duration", nil)
d.writeTime = metrics.NewRegisteredResettingTimer(namespace+"write/duration", nil)
}
// meter periodically retrieves internal pebble counters and reports them to
// the metrics subsystem.
func (d *Database) meter(refresh time.Duration, namespace string) {

View file

@ -29,15 +29,17 @@ import (
func TestPebbleDB(t *testing.T) {
t.Run("DatabaseSuite", func(t *testing.T) {
dbtest.TestDatabaseSuite(t, func() ethdb.KeyValueStore {
db, err := pebble.Open("", &pebble.Options{
idb, err := pebble.Open("", &pebble.Options{
FS: vfs.NewMem(),
})
if err != nil {
t.Fatal(err)
}
return &Database{
db: db,
db := &Database{
db: idb,
}
db.registerMetrics("")
return db
})
})
}