From 138b7ac88b4d3a8f6ef897f36f651266bd435f64 Mon Sep 17 00:00:00 2001 From: xginn8 Date: Wed, 20 Jun 2018 11:40:58 -0400 Subject: [PATCH 1/2] Convert uptime_in_seconds to start_time_seconds start_time is a more idiomatic way to store the process uptime, and is what is provided by the Prometheus library itself. Since this is a breaking change, I am happy to add this as a second metric if necessary --- exporter/redis.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/exporter/redis.go b/exporter/redis.go index 4ea14296..35c6820f 100644 --- a/exporter/redis.go +++ b/exporter/redis.go @@ -54,8 +54,7 @@ type scrapeResult struct { var ( metricMap = map[string]string{ // # Server - "uptime_in_seconds": "uptime_in_seconds", - "process_id": "process_id", + "process_id": "process_id", // # Clients "connected_clients": "connected_clients", @@ -133,6 +132,11 @@ func (e *Exporter) initGauges() { Name: "slave_info", Help: "Information about the Redis slave", }, []string{"addr", "alias", "master_host", "master_port", "read_only"}) + e.metrics["start_time_seconds"] = prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Namespace: e.namespace, + Name: "start_time_seconds", + Help: "Start time of the Redis instance since unix epoch in seconds.", + }, []string{"addr", "alias"}) e.metrics["master_link_up"] = prometheus.NewGaugeVec(prometheus.GaugeOpts{ Namespace: e.namespace, Name: "master_link_up", @@ -465,6 +469,14 @@ func (e *Exporter) extractInfoMetrics(info, addr string, alias string, scrapes c e.metricsMtx.RUnlock() continue } + if fieldKey == "uptime_in_seconds" { + if uptime, err := extractVal(fieldValue); err != nil { + e.metricsMtx.RLock() + e.metrics["start_time_seconds"].WithLabelValues(addr, alias).Set(float64(time.Now().Unix()) - uptime) + e.metricsMtx.RUnlock() + } + continue + } if slaveOffset, slaveIp, slaveState, ok := parseConnectedSlaveString(fieldKey, fieldValue); ok { e.metricsMtx.RLock() From 4ce20da09c753bec64be86a66fce1461dc948d6d Mon Sep 17 00:00:00 2001 From: xginn8 Date: Wed, 20 Jun 2018 16:48:36 -0400 Subject: [PATCH 2/2] Add a new metric rather than replacing --- exporter/redis.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exporter/redis.go b/exporter/redis.go index 35c6820f..518ae91b 100644 --- a/exporter/redis.go +++ b/exporter/redis.go @@ -54,7 +54,8 @@ type scrapeResult struct { var ( metricMap = map[string]string{ // # Server - "process_id": "process_id", + "uptime_in_seconds": "uptime_in_seconds", + "process_id": "process_id", // # Clients "connected_clients": "connected_clients", @@ -475,7 +476,6 @@ func (e *Exporter) extractInfoMetrics(info, addr string, alias string, scrapes c e.metrics["start_time_seconds"].WithLabelValues(addr, alias).Set(float64(time.Now().Unix()) - uptime) e.metricsMtx.RUnlock() } - continue } if slaveOffset, slaveIp, slaveState, ok := parseConnectedSlaveString(fieldKey, fieldValue); ok {