Skip to content

Commit 97559c2

Browse files
committed
Labels for Metrics
1 parent a5c7088 commit 97559c2

File tree

11 files changed

+104
-74
lines changed

11 files changed

+104
-74
lines changed

clients/java/dkv-client/src/test/resources/dkv_config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ pprof : false
1010
repl-master-addr : ""
1111
repl-poll-interval : "2s"
1212
role : ""
13+
cluster-name : "test"
1314
statsd-addr : ""
1415
vbucket : "default"
1516
log-level : "warn"
@@ -31,4 +32,3 @@ discovery-service:
3132
discovery-service-addr: "multi:///127.0.0.1:8001,127.0.0.1:8002,127.0.0.1:8003"
3233
push-status-interval: 1
3334
poll-cluster-info-interval: 1
34-

clients/java/dkv-client/src/test/resources/standalone_config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ db-engine : "rocksdb"
22
db-engine-ini : ""
33
block-cache-size : 3221225472
44
root-folder : "/tmp/dkvsrv"
5+
cluster-name : "test"
56
dc-id : "dc1"
67
diskless : false
78
pprof : false

cmd/dkvsrv/main.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,12 +341,18 @@ func setFlagsForNexusDirs() {
341341
}
342342

343343
func setupStats() {
344+
//default tags.
345+
tags := []stats.Tag{stats.NewTag("cluster-name", config.ClusterName)}
346+
if config.NodeName != "" {
347+
tags = append(tags, stats.NewTag("node-name", config.NodeName))
348+
}
349+
344350
if config.StatsdAddr != "" {
345-
statsCli = stats.NewStatsDClient(config.StatsdAddr, "dkv.")
351+
statsCli = stats.NewStatsDClient(config.StatsdAddr, "dkv.", tags...)
346352
} else {
347353
statsCli = stats.NewNoOpClient()
348354
}
349-
promRegistry = stats.NewPromethousRegistry()
355+
promRegistry = stats.NewPromethousRegistry(tags)
350356
statsStreamer = stats.NewStatStreamer()
351357
statAggregatorRegistry = aggregate.NewStatAggregatorRegistry()
352358
go statsStreamer.Run()

dkvsrv.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11

22
node-name : "" #Name of the current Node Name
3+
cluster-name : "dkv" # Cluster Identifier, used for reporting all/tags
4+
35
listen-addr : "0.0.0.0:8080" #listen address
46
http-listen-addr : "0.0.0.0:8081" # http listen address
57
role : "none" #Role of the node - master|slave|standalone
@@ -19,6 +21,7 @@ dc-id : "default" # DC / Availability zone identifier
1921
vbucket : "default" # vBucket identifier
2022
database : "default" # Database identifier
2123

24+
2225
discovery-service:
2326
server:
2427
status-ttl: 300

internal/master/service.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,18 @@ type dkvServiceStat struct {
4949

5050
func newDKVServiceStat(registry prometheus.Registerer) *dkvServiceStat {
5151
RequestLatency := prometheus.NewSummaryVec(prometheus.SummaryOpts{
52-
Namespace: stats.Namespace,
53-
Name: "latency",
54-
Help: "Latency statistics for dkv service",
55-
Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001},
56-
MaxAge: 10 * time.Second,
52+
Namespace: stats.Namespace,
53+
Name: "latency",
54+
Help: "Latency statistics for dkv service",
55+
Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001},
56+
MaxAge: 10 * time.Second,
57+
ConstLabels: stats.ConstLabels,
5758
}, []string{"Ops"})
5859
ResponseError := prometheus.NewCounterVec(prometheus.CounterOpts{
59-
Namespace: stats.Namespace,
60-
Name: "error",
61-
Help: "Error count for storage operations",
60+
Namespace: stats.Namespace,
61+
Name: "error",
62+
Help: "Error count for storage operations",
63+
ConstLabels: stats.ConstLabels,
6264
}, []string{"Ops"})
6365
registry.MustRegister(RequestLatency, ResponseError)
6466
return &dkvServiceStat{RequestLatency, ResponseError}

internal/opts/config.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@ import (
1818
type Config struct {
1919

2020
// region level configuration.
21-
DisklessMode bool `mapstructure:"diskless" desc:"Enables badger diskless mode where data is stored entirely in memory. "`
2221
NodeName string `mapstructure:"node-name" desc:"Node Name"`
22+
ClusterName string `mapstructure:"cluster-name" desc:"Cluster Name"`
23+
DisklessMode bool `mapstructure:"diskless" desc:"Enables badger diskless mode where data is stored entirely in memory. "`
2324
DbEngine string `mapstructure:"db-engine" desc:"Underlying DB engine for storing data - badger|rocksdb"`
2425
DbEngineIni string `mapstructure:"db-engine-ini" desc:"An .ini file for configuring the underlying storage engine. Refer badger.ini or rocks.ini for more details."`
2526
DbRole string `mapstructure:"role" desc:"Role of the node - master|slave|standalone|discovery"`

internal/slave/service.go

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,25 +83,29 @@ type stat struct {
8383

8484
func newStat(registry prometheus.Registerer) *stat {
8585
replicationLag := prometheus.NewGauge(prometheus.GaugeOpts{
86-
Namespace: stats.Namespace,
87-
Name: "slave_replication_lag",
88-
Help: "replication lag of the slave",
86+
Namespace: stats.Namespace,
87+
Name: "slave_replication_lag",
88+
Help: "replication lag of the slave",
89+
ConstLabels: stats.ConstLabels,
8990
})
9091
replicationDelay := prometheus.NewGauge(prometheus.GaugeOpts{
91-
Namespace: stats.Namespace,
92-
Name: "slave_replication_delay",
93-
Help: "replication delay of the slave",
92+
Namespace: stats.Namespace,
93+
Name: "slave_replication_delay",
94+
Help: "replication delay of the slave",
95+
ConstLabels: stats.ConstLabels,
9496
})
9597
replicationStatus := prometheus.NewSummaryVec(prometheus.SummaryOpts{
96-
Namespace: stats.Namespace,
97-
Name: "slave_replication_status",
98-
Help: "replication status of the slave",
99-
MaxAge: 5 * time.Second,
98+
Namespace: stats.Namespace,
99+
Name: "slave_replication_status",
100+
Help: "replication status of the slave",
101+
MaxAge: 5 * time.Second,
102+
ConstLabels: stats.ConstLabels,
100103
}, []string{"masterAddr"})
101104
replicationSpeed := prometheus.NewHistogram(prometheus.HistogramOpts{
102-
Namespace: stats.Namespace,
103-
Name: "slave_replication_speed",
104-
Help: "replication speed of the slave",
105+
Namespace: stats.Namespace,
106+
Name: "slave_replication_speed",
107+
Help: "replication speed of the slave",
108+
ConstLabels: stats.ConstLabels,
105109
})
106110
registry.MustRegister(replicationLag, replicationDelay, replicationSpeed, replicationStatus)
107111
return &stat{

internal/stats/prometheus.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import (
99

1010
type promethousRegistry struct{}
1111

12+
var ConstLabels prometheus.Labels
13+
1214
func (*promethousRegistry) Register(c prometheus.Collector) error {
1315
return prometheus.DefaultRegisterer.Register(c)
1416
}
@@ -29,7 +31,11 @@ func (*promethousRegistry) Unregister(c prometheus.Collector) bool {
2931
return prometheus.DefaultRegisterer.Unregister(c)
3032
}
3133

32-
func NewPromethousRegistry() prometheus.Registerer {
34+
func NewPromethousRegistry(tags []Tag) prometheus.Registerer {
35+
ConstLabels = map[string]string{}
36+
for _, tag := range tags {
37+
ConstLabels[tag.key] = tag.val
38+
}
3339
return &promethousRegistry{}
3440
}
3541

@@ -44,6 +50,7 @@ func (*noopClient) Unregister(collector prometheus.Collector) bool {
4450
}
4551

4652
func NewPromethousNoopRegistry() prometheus.Registerer {
53+
ConstLabels = map[string]string{}
4754
return &noopClient{}
4855
}
4956

internal/storage/badger/metrics.go

Lines changed: 32 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,79 +1,82 @@
11
package badger
22

3-
import "github.com/prometheus/client_golang/prometheus"
3+
import (
4+
"github.com/flipkart-incubator/dkv/internal/stats"
5+
"github.com/prometheus/client_golang/prometheus"
6+
)
47

58
// NewBadgerCollector returns a prometheus Collector for Badger metrics from expvar.
69
func (bdb *badgerDB) metricsCollector() {
710
collector := prometheus.NewExpvarCollector(map[string]*prometheus.Desc{
811
"badger_v3_disk_reads_total": prometheus.NewDesc(
9-
"badger_disk_reads_total",
12+
prometheus.BuildFQName(stats.Namespace, "badger", "disk_reads_total"),
1013
"Number of cumulative reads by Badger",
11-
nil, nil,
14+
nil, stats.ConstLabels,
1215
),
1316
"badger_v3_disk_writes_total": prometheus.NewDesc(
14-
"badger_disk_writes_total",
17+
prometheus.BuildFQName(stats.Namespace, "badger", "disk_writes_total"),
1518
"Number of cumulative writes by Badger",
16-
nil, nil,
19+
nil, stats.ConstLabels,
1720
),
1821
"badger_v3_read_bytes": prometheus.NewDesc(
19-
"badger_read_bytes",
22+
prometheus.BuildFQName(stats.Namespace, "badger", "read_bytes"),
2023
"Number of cumulative bytes read by Badger",
21-
nil, nil,
24+
nil, stats.ConstLabels,
2225
),
2326
"badger_v3_written_bytes": prometheus.NewDesc(
24-
"badger_written_bytes",
27+
prometheus.BuildFQName(stats.Namespace, "badger", "written_bytes"),
2528
"Number of cumulative bytes written by Badger",
26-
nil, nil,
29+
nil, stats.ConstLabels,
2730
),
2831
"badger_v3_lsm_level_gets_total": prometheus.NewDesc(
29-
"badger_lsm_level_gets_total",
32+
prometheus.BuildFQName(stats.Namespace, "badger", "lsm_level_gets_total"),
3033
"Total number of LSM gets",
31-
[]string{"level"}, nil,
34+
[]string{"level"}, stats.ConstLabels,
3235
),
3336
"badger_v3_lsm_bloom_hits_total": prometheus.NewDesc(
34-
"badger_lsm_bloom_hits_total",
37+
prometheus.BuildFQName(stats.Namespace, "badger", "lsm_bloom_hits_total"),
3538
"Total number of LSM bloom hits",
36-
[]string{"level"}, nil,
39+
[]string{"level"}, stats.ConstLabels,
3740
),
3841
"badger_v3_gets_total": prometheus.NewDesc(
39-
"badger_gets_total",
42+
prometheus.BuildFQName(stats.Namespace, "badger", "gets_total"),
4043
"Total number of gets",
41-
nil, nil,
44+
nil, stats.ConstLabels,
4245
),
4346
"badger_v3_puts_total": prometheus.NewDesc(
44-
"badger_puts_total",
47+
prometheus.BuildFQName(stats.Namespace, "badger", "puts_total"),
4548
"Total number of puts",
46-
nil, nil,
49+
nil, stats.ConstLabels,
4750
),
4851
"badger_v3_blocked_puts_total": prometheus.NewDesc(
49-
"badger_blocked_puts_total",
52+
prometheus.BuildFQName(stats.Namespace, "badger", "blocked_puts_total"),
5053
"Total number of blocked puts",
51-
nil, nil,
54+
nil, stats.ConstLabels,
5255
),
5356
"badger_v3_memtable_gets_total": prometheus.NewDesc(
54-
"badger_memtable_gets_total",
57+
prometheus.BuildFQName(stats.Namespace, "badger", "memtable_gets_total"),
5558
"Total number of memtable gets",
56-
nil, nil,
59+
nil, stats.ConstLabels,
5760
),
5861
"badger_v3_lsm_size_bytes": prometheus.NewDesc(
59-
"badger_lsm_size_bytes",
62+
prometheus.BuildFQName(stats.Namespace, "badger", "lsm_size_bytes"),
6063
"Size of the LSM in bytes",
61-
[]string{"dir"}, nil,
64+
[]string{"dir"}, stats.ConstLabels,
6265
),
6366
"badger_v3_vlog_size_bytes": prometheus.NewDesc(
64-
"badger_vlog_size_bytes",
67+
prometheus.BuildFQName(stats.Namespace, "badger", "vlog_size_bytes"),
6568
"Size of the value log in bytes",
66-
[]string{"dir"}, nil,
69+
[]string{"dir"}, stats.ConstLabels,
6770
),
6871
"badger_v3_pending_writes_total": prometheus.NewDesc(
69-
"badger_pending_writes_total",
72+
prometheus.BuildFQName(stats.Namespace, "badger", "pending_writes_total"),
7073
"Total number of pending writes",
71-
[]string{"dir"}, nil,
74+
[]string{"dir"}, stats.ConstLabels,
7275
),
7376
"badger_v3_compactions_current": prometheus.NewDesc(
74-
"badger_compactions_current",
77+
prometheus.BuildFQName(stats.Namespace, "badger", "compactions_current"),
7578
"Number of tables being actively compacted",
76-
nil, nil,
79+
nil, stats.ConstLabels,
7780
),
7881
})
7982

internal/storage/rocksdb/metrics.go

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package rocksdb
22

33
import (
4+
"github.com/flipkart-incubator/dkv/internal/stats"
45
"github.com/flipkart-incubator/gorocksdb"
56
"github.com/prometheus/client_golang/prometheus"
67
"go.uber.org/zap"
@@ -18,29 +19,29 @@ type rocksDBCollector struct {
1819
func newRocksDBCollector(rdb *rocksDB) *rocksDBCollector {
1920
return &rocksDBCollector{
2021
memTableTotalGauge: prometheus.NewDesc(
21-
prometheus.BuildFQName("rocksdb", "", "memory_usage_memtable_total"),
22+
prometheus.BuildFQName(stats.Namespace, "rocksdb", "memory_usage_memtable_total"),
2223
"Rocksdb MemTableTotal estimates memory usage of all mem-tables",
23-
nil, nil),
24+
nil, stats.ConstLabels),
2425
memTableUnflushedGauge: prometheus.NewDesc(
25-
prometheus.BuildFQName("rocksdb", "", "memory_usage_memtable_unflushed"),
26+
prometheus.BuildFQName(stats.Namespace, "rocksdb", "memory_usage_memtable_unflushed"),
2627
"Rocksdb MemTableUnflushed estimates memory usage of unflushed mem-tables",
27-
nil, nil),
28+
nil, stats.ConstLabels),
2829
memTableReadersTotalGauge: prometheus.NewDesc(
29-
prometheus.BuildFQName("rocksdb", "", "memory_usage_memtable_readers_total"),
30+
prometheus.BuildFQName(stats.Namespace, "rocksdb", "memory_usage_memtable_readers_total"),
3031
"Rocksdb MemTableReadersTotal memory usage of table readers (indexes and bloom filters)",
31-
nil, nil),
32+
nil, stats.ConstLabels),
3233
cacheTotalGauge: prometheus.NewDesc(
33-
prometheus.BuildFQName("rocksdb", "", "memory_usage_cache_total"),
34+
prometheus.BuildFQName(stats.Namespace, "rocksdb", "memory_usage_cache_total"),
3435
"Rocksdb CacheTotal memory usage of cache",
35-
nil, nil),
36+
nil, stats.ConstLabels),
3637
db: rdb.db,
3738
lgr: rdb.opts.lgr,
3839
}
3940

4041
}
4142

42-
//Each and every collector must implement the Describe function.
43-
//It essentially writes all descriptors to the prometheus desc channel.
43+
// Each and every collector must implement the Describe function.
44+
// It essentially writes all descriptors to the prometheus desc channel.
4445
func (collector *rocksDBCollector) Describe(ch chan<- *prometheus.Desc) {
4546
//Update this section with the each metric you create for a given collector
4647
ch <- collector.memTableTotalGauge
@@ -49,7 +50,7 @@ func (collector *rocksDBCollector) Describe(ch chan<- *prometheus.Desc) {
4950
ch <- collector.cacheTotalGauge
5051
}
5152

52-
//Collect implements required collect function for all promehteus collectors
53+
// Collect implements required collect function for all promehteus collectors
5354
func (collector *rocksDBCollector) Collect(ch chan<- prometheus.Metric) {
5455
memoryUsage, err := gorocksdb.GetApproximateMemoryUsageByType([]*gorocksdb.DB{collector.db}, nil)
5556
if err != nil {

0 commit comments

Comments
 (0)