[#966] node: Add path of the write_cache to metric labels

Signed-off-by: Alexander Chuprov <a.chuprov@yadro.com>
This commit is contained in:
Alexander Chuprov 2024-04-27 15:49:07 +03:00
parent 01baf41f9b
commit fa0bc8e1df
4 changed files with 40 additions and 27 deletions

View file

@ -143,6 +143,11 @@ func (e *StorageEngine) SealWriteCache(ctx context.Context, prm SealWriteCachePr
type writeCacheMetrics struct {
shardID string
metrics metrics.WriteCacheMetrics
path string
}
func (m *writeCacheMetrics) SetPath(path string) {
m.path = path
}
func (m *writeCacheMetrics) SetShardID(id string) {
@ -150,20 +155,20 @@ func (m *writeCacheMetrics) SetShardID(id string) {
}
func (m *writeCacheMetrics) Get(d time.Duration, success bool, st writecache.StorageType) {
m.metrics.AddMethodDuration(m.shardID, st.String(), "Get", success, d)
m.metrics.AddMethodDuration(m.shardID, m.path, st.String(), "Get", success, d)
}
func (m *writeCacheMetrics) Delete(d time.Duration, success bool, st writecache.StorageType) {
m.metrics.AddMethodDuration(m.shardID, st.String(), "Delete", success, d)
m.metrics.AddMethodDuration(m.shardID, m.path, st.String(), "Delete", success, d)
}
func (m *writeCacheMetrics) Put(d time.Duration, success bool, st writecache.StorageType) {
m.metrics.AddMethodDuration(m.shardID, st.String(), "Put", success, d)
m.metrics.AddMethodDuration(m.shardID, m.path, st.String(), "Put", success, d)
}
func (m *writeCacheMetrics) SetEstimateSize(db, fstree uint64) {
m.metrics.SetEstimateSize(m.shardID, writecache.StorageTypeDB.String(), db)
m.metrics.SetEstimateSize(m.shardID, writecache.StorageTypeFSTree.String(), fstree)
m.metrics.SetEstimateSize(m.shardID, m.path, writecache.StorageTypeDB.String(), db)
m.metrics.SetEstimateSize(m.shardID, m.path, writecache.StorageTypeFSTree.String(), fstree)
}
func (m *writeCacheMetrics) SetMode(mode mode.Mode) {
@ -171,18 +176,18 @@ func (m *writeCacheMetrics) SetMode(mode mode.Mode) {
}
func (m *writeCacheMetrics) SetActualCounters(db, fstree uint64) {
m.metrics.SetActualCount(m.shardID, writecache.StorageTypeDB.String(), db)
m.metrics.SetActualCount(m.shardID, writecache.StorageTypeFSTree.String(), fstree)
m.metrics.SetActualCount(m.shardID, m.path, writecache.StorageTypeDB.String(), db)
m.metrics.SetActualCount(m.shardID, m.path, writecache.StorageTypeFSTree.String(), fstree)
}
func (m *writeCacheMetrics) Flush(success bool, st writecache.StorageType) {
m.metrics.IncOperationCounter(m.shardID, st.String(), "Flush", metrics.NullBool{Bool: success, Valid: true})
m.metrics.IncOperationCounter(m.shardID, m.path, st.String(), "Flush", metrics.NullBool{Bool: success, Valid: true})
}
func (m *writeCacheMetrics) Evict(st writecache.StorageType) {
m.metrics.IncOperationCounter(m.shardID, st.String(), "Evict", metrics.NullBool{})
m.metrics.IncOperationCounter(m.shardID, m.path, st.String(), "Evict", metrics.NullBool{})
}
func (m *writeCacheMetrics) Close() {
m.metrics.Close(m.shardID)
m.metrics.Close(m.shardID, m.path)
}

View file

@ -182,6 +182,7 @@ func New(opts ...Option) *Shard {
writecache.WithReportErrorFunc(reportFunc),
writecache.WithBlobstor(bs),
writecache.WithMetabase(mb))...)
s.writeCache.GetMetrics().SetPath(s.writeCache.DumpInfo().Path)
}
if s.piloramaOpts != nil {

View file

@ -29,6 +29,7 @@ type Metrics interface {
SetEstimateSize(db, fstree uint64)
SetMode(m mode.Mode)
SetActualCounters(db, fstree uint64)
SetPath(path string)
Close()
}
@ -38,6 +39,8 @@ type metricsStub struct{}
func (metricsStub) SetShardID(string) {}
func (metricsStub) SetPath(string) {}
func (metricsStub) Get(time.Duration, bool, StorageType) {}
func (metricsStub) Delete(time.Duration, bool, StorageType) {}

View file

@ -9,12 +9,12 @@ import (
)
type WriteCacheMetrics interface {
AddMethodDuration(shardID, storageType, method string, success bool, d time.Duration)
SetActualCount(shardID, storageType string, count uint64)
SetEstimateSize(shardID, storageType string, size uint64)
AddMethodDuration(shardID, path, storageType, method string, success bool, d time.Duration)
SetActualCount(shardID, path, storageType string, count uint64)
SetEstimateSize(shardID, path, storageType string, size uint64)
SetMode(shardID, mode string)
IncOperationCounter(shardID, storageType, operation string, success NullBool)
Close(shardID string)
IncOperationCounter(shardID, path, storageType, operation string, success NullBool)
Close(shardID, path string)
}
type writeCacheMetrics struct {
@ -41,35 +41,38 @@ func newWriteCacheMetrics() *writeCacheMetrics {
Subsystem: writeCacheSubsystem,
Name: "operations_total",
Help: "The number of writecache operations processed",
}, []string{shardIDLabel, storageLabel, successLabel, operationLabel}),
actualCount: newWCGaugeVec("actual_objects_total", "Actual objects count in writecache", []string{shardIDLabel, storageLabel}),
estimatedSize: newWCGaugeVec("estimated_size_bytes", "Estimated writecache size", []string{shardIDLabel, storageLabel}),
}, []string{shardIDLabel, storageLabel, successLabel, operationLabel, pathLabel}),
actualCount: newWCGaugeVec("actual_objects_total", "Actual objects count in writecache", []string{shardIDLabel, storageLabel, pathLabel}),
estimatedSize: newWCGaugeVec("estimated_size_bytes", "Estimated writecache size", []string{shardIDLabel, storageLabel, pathLabel}),
mode: newShardIDMode(writeCacheSubsystem, "mode_info", "Writecache mode value"),
}
}
func (m *writeCacheMetrics) AddMethodDuration(shardID, storageType, method string, success bool, d time.Duration) {
func (m *writeCacheMetrics) AddMethodDuration(shardID, path, storageType, method string, success bool, d time.Duration) {
m.methodDuration.With(
prometheus.Labels{
shardIDLabel: shardID,
successLabel: strconv.FormatBool(success),
storageLabel: storageType,
methodLabel: method,
pathLabel: path,
},
).Observe(d.Seconds())
}
func (m *writeCacheMetrics) SetActualCount(shardID, storageType string, count uint64) {
func (m *writeCacheMetrics) SetActualCount(shardID, path, storageType string, count uint64) {
m.actualCount.With(prometheus.Labels{
shardIDLabel: shardID,
storageLabel: storageType,
pathLabel: path,
}).Set(float64(count))
}
func (m *writeCacheMetrics) SetEstimateSize(shardID, storageType string, size uint64) {
func (m *writeCacheMetrics) SetEstimateSize(shardID, path, storageType string, size uint64) {
m.estimatedSize.With(prometheus.Labels{
shardIDLabel: shardID,
storageLabel: storageType,
pathLabel: path,
}).Set(float64(size))
}
@ -77,21 +80,22 @@ func (m *writeCacheMetrics) SetMode(shardID string, mode string) {
m.mode.SetMode(shardID, mode)
}
func (m *writeCacheMetrics) IncOperationCounter(shardID, storageType, operation string, success NullBool) {
func (m *writeCacheMetrics) IncOperationCounter(shardID, path, storageType, operation string, success NullBool) {
m.operationCounter.With(prometheus.Labels{
shardIDLabel: shardID,
storageLabel: storageType,
operationLabel: operation,
successLabel: success.String(),
pathLabel: path,
}).Inc()
}
func (m *writeCacheMetrics) Close(shardID string) {
func (m *writeCacheMetrics) Close(shardID, path string) {
m.mode.Delete(shardID)
m.methodDuration.DeletePartialMatch(prometheus.Labels{shardIDLabel: shardID})
m.operationCounter.DeletePartialMatch(prometheus.Labels{shardIDLabel: shardID})
m.actualCount.DeletePartialMatch(prometheus.Labels{shardIDLabel: shardID})
m.estimatedSize.DeletePartialMatch(prometheus.Labels{shardIDLabel: shardID})
m.methodDuration.DeletePartialMatch(prometheus.Labels{shardIDLabel: shardID, pathLabel: path})
m.operationCounter.DeletePartialMatch(prometheus.Labels{shardIDLabel: shardID, pathLabel: path})
m.actualCount.DeletePartialMatch(prometheus.Labels{shardIDLabel: shardID, pathLabel: path})
m.estimatedSize.DeletePartialMatch(prometheus.Labels{shardIDLabel: shardID, pathLabel: path})
}
func newWCGaugeVec(name, help string, labels []string) *prometheus.GaugeVec {