Skip to content

Commit

Permalink
Merge pull request #105 from catawiki/replication
Browse files Browse the repository at this point in the history
Add replication metric
  • Loading branch information
oliver006 authored Oct 13, 2017
2 parents 601c174 + 86bdc2b commit 4d2a346
Showing 1 changed file with 39 additions and 2 deletions.
41 changes: 39 additions & 2 deletions exporter/redis.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,8 @@ var (
"cluster_stats_messages_received": "cluster_messages_received_total",
}

instanceInfoFields = map[string]bool{"redis_version": true, "redis_build_id": true, "redis_mode": true, "os": true}
instanceInfoFields = map[string]bool{"role": true, "redis_version": true, "redis_build_id": true, "redis_mode": true, "os": true}
slaveInfoFields = map[string]bool{"master_host": true, "master_port": true, "slave_read_only": true}
)

func (e *Exporter) initGauges() {
Expand All @@ -119,7 +120,17 @@ func (e *Exporter) initGauges() {
Namespace: e.namespace,
Name: "instance_info",
Help: "Information about the Redis instance",
}, []string{"addr", "alias", "redis_version", "redis_build_id", "redis_mode", "os"})
}, []string{"addr", "alias", "role", "redis_version", "redis_build_id", "redis_mode", "os"})
e.metrics["slave_info"] = prometheus.NewGaugeVec(prometheus.GaugeOpts{
Namespace: e.namespace,
Name: "slave_info",
Help: "Information about the Redis slave",
}, []string{"addr", "alias", "master_host", "master_port", "read_only"})
e.metrics["master_link_up"] = prometheus.NewGaugeVec(prometheus.GaugeOpts{
Namespace: e.namespace,
Name: "master_link_up",
Help: "Master link status on Redis slave",
}, []string{"addr", "alias"})
e.metrics["db_keys"] = prometheus.NewGaugeVec(prometheus.GaugeOpts{
Namespace: e.namespace,
Name: "db_keys",
Expand Down Expand Up @@ -328,6 +339,7 @@ func (e *Exporter) extractInfoMetrics(info, addr string, alias string, scrapes c
lines := strings.Split(info, "\r\n")

instanceInfo := map[string]string{}
slaveInfo := map[string]string{}
for _, line := range lines {
log.Debugf("info: %s", line)
if len(line) > 0 && line[0] == '#' {
Expand All @@ -348,6 +360,22 @@ func (e *Exporter) extractInfoMetrics(info, addr string, alias string, scrapes c
continue
}

if _, ok := slaveInfoFields[split[0]]; ok {
slaveInfo[split[0]] = split[1]
continue
}

if split[0] == "master_link_status" {
e.metricsMtx.RLock()
if split[1] == "up" {
e.metrics["master_link_up"].WithLabelValues(addr, alias).Set(1)
} else {
e.metrics["master_link_up"].WithLabelValues(addr, alias).Set(0)
}
e.metricsMtx.RUnlock()
continue
}

if len(split) != 2 || !includeMetric(split[0]) {
continue
}
Expand Down Expand Up @@ -427,11 +455,20 @@ func (e *Exporter) extractInfoMetrics(info, addr string, alias string, scrapes c
e.metricsMtx.RLock()
e.metrics["instance_info"].WithLabelValues(
addr, alias,
instanceInfo["role"],
instanceInfo["redis_version"],
instanceInfo["redis_build_id"],
instanceInfo["redis_mode"],
instanceInfo["os"],
).Set(1)
if instanceInfo["role"] == "slave" {
e.metrics["slave_info"].WithLabelValues(
addr, alias,
slaveInfo["master_host"],
slaveInfo["master_port"],
slaveInfo["slave_read_only"],
).Set(1)
}
e.metricsMtx.RUnlock()

return nil
Expand Down

0 comments on commit 4d2a346

Please sign in to comment.