Expose store metrics with milliseconds bucketing (#1179)

As the current upper 10000 microseconds(10ms) bucket may be too low for
`management.store.persistence.duration` metric
This commit is contained in:
Yury Gargay 2023-09-28 08:54:49 +02:00 committed by GitHub
parent c08a96770e
commit 830dee1771
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -11,37 +11,54 @@ import (
// StoreMetrics represents all metrics related to the FileStore // StoreMetrics represents all metrics related to the FileStore
type StoreMetrics struct { type StoreMetrics struct {
globalLockAcquisitionDuration syncint64.Histogram globalLockAcquisitionDurationMicro syncint64.Histogram
persistenceDuration syncint64.Histogram globalLockAcquisitionDurationMs syncint64.Histogram
persistenceDurationMicro syncint64.Histogram
persistenceDurationMs syncint64.Histogram
ctx context.Context ctx context.Context
} }
// NewStoreMetrics creates an instance of StoreMetrics // NewStoreMetrics creates an instance of StoreMetrics
func NewStoreMetrics(ctx context.Context, meter metric.Meter) (*StoreMetrics, error) { func NewStoreMetrics(ctx context.Context, meter metric.Meter) (*StoreMetrics, error) {
globalLockAcquisitionDuration, err := meter.SyncInt64().Histogram("management.store.global.lock.acquisition.duration.micro", globalLockAcquisitionDurationMicro, err := meter.SyncInt64().Histogram("management.store.global.lock.acquisition.duration.micro",
instrument.WithUnit("microseconds"))
if err != nil {
return nil, err
}
persistenceDuration, err := meter.SyncInt64().Histogram("management.store.persistence.duration.micro",
instrument.WithUnit("microseconds")) instrument.WithUnit("microseconds"))
if err != nil { if err != nil {
return nil, err return nil, err
} }
globalLockAcquisitionDurationMs, err := meter.SyncInt64().Histogram("management.store.global.lock.acquisition.duration.ms")
if err != nil {
return nil, err
}
persistenceDurationMicro, err := meter.SyncInt64().Histogram("management.store.persistence.duration.micro",
instrument.WithUnit("microseconds"))
if err != nil {
return nil, err
}
persistenceDurationMs, err := meter.SyncInt64().Histogram("management.store.persistence.duration.ms")
if err != nil {
return nil, err
}
return &StoreMetrics{ return &StoreMetrics{
globalLockAcquisitionDuration: globalLockAcquisitionDuration, globalLockAcquisitionDurationMicro: globalLockAcquisitionDurationMicro,
persistenceDuration: persistenceDuration, globalLockAcquisitionDurationMs: globalLockAcquisitionDurationMs,
persistenceDurationMicro: persistenceDurationMicro,
persistenceDurationMs: persistenceDurationMs,
ctx: ctx, ctx: ctx,
}, nil }, nil
} }
// CountGlobalLockAcquisitionDuration counts the duration of the global lock acquisition // CountGlobalLockAcquisitionDuration counts the duration of the global lock acquisition
func (metrics *StoreMetrics) CountGlobalLockAcquisitionDuration(duration time.Duration) { func (metrics *StoreMetrics) CountGlobalLockAcquisitionDuration(duration time.Duration) {
metrics.globalLockAcquisitionDuration.Record(metrics.ctx, duration.Microseconds()) metrics.globalLockAcquisitionDurationMicro.Record(metrics.ctx, duration.Microseconds())
metrics.globalLockAcquisitionDurationMs.Record(metrics.ctx, duration.Milliseconds())
} }
// CountPersistenceDuration counts the duration of a store persistence operation // CountPersistenceDuration counts the duration of a store persistence operation
func (metrics *StoreMetrics) CountPersistenceDuration(duration time.Duration) { func (metrics *StoreMetrics) CountPersistenceDuration(duration time.Duration) {
metrics.persistenceDuration.Record(metrics.ctx, duration.Microseconds()) metrics.persistenceDurationMicro.Record(metrics.ctx, duration.Microseconds())
metrics.persistenceDurationMs.Record(metrics.ctx, duration.Milliseconds())
} }