Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Badger expvar metrics to Prometheus metrics. #5094

Merged
merged 6 commits into from
Apr 23, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 5 additions & 7 deletions dgraph/cmd/alpha/metrics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,11 @@ func TestMetrics(t *testing.T) {
// Go Runtime Metrics
"go_goroutines", "go_memstats_gc_cpu_fraction", "go_memstats_heap_alloc_bytes",
"go_memstats_heap_idle_bytes", "go_memstats_heap_inuse_bytes", "dgraph_latency_bucket",
// TODO: add support for the following Badger metrics, which is currently only available
// through /debug/vars. Consider manually add them as OpenCensus metrics, and then
// test them here

// "badger_disk_reads_total", "badger_disk_writes_total", "badger_gets_total",
// "badger_memtable_gets_total", "badger_puts_total", "badger_read_bytes",
// "badger_written_bytes",
// Badger Metrics
"badger_v2_disk_reads_total", "badger_v2_disk_writes_total", "badger_v2_gets_total",
"badger_v2_memtable_gets_total", "badger_v2_puts_total", "badger_v2_read_bytes",
"badger_v2_written_bytes",

// Dgraph Memory Metrics
"dgraph_memory_idle_bytes", "dgraph_memory_inuse_bytes", "dgraph_memory_proc_bytes",
Expand All @@ -61,7 +59,7 @@ func TestMetrics(t *testing.T) {

func extractMetrics(metrics string) (map[string]interface{}, error) {
lines := strings.Split(metrics, "\n")
metricRegex, err := regexp.Compile("(^[a-z_]+)")
metricRegex, err := regexp.Compile("(^[a-z0-9_]+)")
if err != nil {
return nil, err
}
Expand Down
65 changes: 65 additions & 0 deletions x/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,11 @@ func init() {

CheckfNoTrace(view.Register(allViews...))

prometheus.MustRegister(NewBadgerCollector())

pe, err := oc_prom.NewExporter(oc_prom.Options{
// DefaultRegisterer includes a ProcessCollector for process_* metrics, a GoCollector for
// go_* metrics, and the badger_* metrics.
Registry: prometheus.DefaultRegisterer.(*prometheus.Registry),
Namespace: "dgraph",
OnError: func(err error) { glog.Errorf("%v", err) },
Expand All @@ -234,6 +238,67 @@ func init() {
http.Handle("/debug/prometheus_metrics", pe)
}

// NewBadgerCollector returns a prometheus Collector for Badger metrics from expvar.
func NewBadgerCollector() prometheus.Collector {
return prometheus.NewExpvarCollector(map[string]*prometheus.Desc{
"badger_v2_disk_reads_total": prometheus.NewDesc(
"badger_v2_disk_reads_total",
"Number of cumulative reads by Badger",
nil, nil,
),
"badger_v2_disk_writes_total": prometheus.NewDesc(
"badger_v2_disk_writes_total",
"Number of cumulative writes by Badger",
nil, nil,
),
"badger_v2_read_bytes": prometheus.NewDesc(
"badger_v2_read_bytes",
"Number of cumulative bytes read by Badger",
nil, nil,
),
"badger_v2_written_bytes": prometheus.NewDesc(
"badger_v2_written_bytes",
"Number of cumulative bytes written by Badger",
nil, nil,
),
"badger_v2_lsm_level_gets_total": prometheus.NewDesc(
"badger_v2_lsm_level_gets_total",
"Total number of LSM gets",
[]string{"level"}, nil,
),
"badger_v2_lsm_bloom_hits_total": prometheus.NewDesc(
"badger_v2_lsm_bloom_hits_total",
"Total number of LSM bloom hits",
[]string{"level"}, nil,
),
"badger_v2_gets_total": prometheus.NewDesc(
"badger_v2_gets_total",
"Total number of gets",
nil, nil,
),
"badger_v2_puts_total": prometheus.NewDesc(
"badger_v2_puts_total",
"Total number of puts",
nil, nil,
),
"badger_v2_memtable_gets_total": prometheus.NewDesc(
"badger_v2_memtable_gets_total",
"Total number of memtable gets",
nil, nil,
),
"badger_v2_lsm_size": prometheus.NewDesc(
"badger_v2_lsm_size",
"Size of the LSM in bytes",
[]string{"dir"}, nil,
),
"badger_v2_vlog_size": prometheus.NewDesc(
"badger_v2_vlog_size",
"Size of the value log in bytes",
[]string{"dir"}, nil,
),
})
}

// MetricsContext returns a context with tags that are useful for
// distinguishing the state of the running system.
// This context will be used to derive other contexts.
Expand Down