From 91cc07ce70b2d8b58863663a824d8b362421db84 Mon Sep 17 00:00:00 2001 From: ilyam8 Date: Mon, 26 Sep 2022 11:36:48 +0300 Subject: [PATCH] feat(redis): collect master link status --- modules/redis/README.md | 1 + modules/redis/charts.go | 13 +++++++++++++ modules/redis/collect_info.go | 13 +++++++++++++ 3 files changed, 27 insertions(+) diff --git a/modules/redis/README.md b/modules/redis/README.md index b3ac017bb..4a43d1c78 100644 --- a/modules/redis/README.md +++ b/modules/redis/README.md @@ -44,6 +44,7 @@ It collects information and statistics about the server executing the following ### Replication - Connected replicas in `replicas` +- Master link status in `status` - Time elapsed since the last interaction with master in `seconds` - Time elapsed since the link between master and slave is down in `seconds` diff --git a/modules/redis/charts.go b/modules/redis/charts.go index 7fcbb3f98..3305ffbce 100644 --- a/modules/redis/charts.go +++ b/modules/redis/charts.go @@ -19,6 +19,7 @@ const ( prioNet prioConnectedReplicas + prioMasterLinkStatus prioMasterLastIOSinceTime prioMasterLinkDownSinceTime @@ -331,6 +332,18 @@ var ( {ID: "connected_slaves", Name: "connected"}, }, } + masterLinkStatusChart = module.Chart{ + ID: "master_last_status", + Title: "Master link status", + Units: "status", + Fam: "replication", + Ctx: "redis.master_link_status", + Priority: prioMasterLinkStatus, + Dims: module.Dims{ + {ID: "master_link_status_up", Name: "up"}, + {ID: "master_link_status_down", Name: "down"}, + }, + } masterLastIOSinceTimeChart = module.Chart{ ID: "master_last_io_since_time", Title: "Time elapsed since the last interaction with master", diff --git a/modules/redis/collect_info.go b/modules/redis/collect_info.go index ef0a00e9a..fb5e46f37 100644 --- a/modules/redis/collect_info.go +++ b/modules/redis/collect_info.go @@ -80,6 +80,9 @@ func (r *Redis) collectInfo(mx map[string]int64, info string) { mx[field] = int64(time.Since(time.Unix(v, 0)).Seconds()) case field == "aof_enabled" && value == "1": r.addAOFChartsOnce.Do(r.addAOFCharts) + case field == "master_link_status": + mx["master_link_status_up"] = boolToInt(value == "up") + mx["master_link_status_down"] = boolToInt(value == "down") default: collectNumericValue(mx, field, value) } @@ -227,6 +230,9 @@ func (r *Redis) addAOFCharts() { } func (r *Redis) addReplSlaveCharts() { + if err := r.Charts().Add(masterLinkStatusChart.Copy()); err != nil { + r.Warningf("error on adding '%s' chart", masterLinkStatusChart.ID) + } if err := r.Charts().Add(masterLastIOSinceTimeChart.Copy()); err != nil { r.Warningf("error on adding '%s' chart", masterLastIOSinceTimeChart.ID) } @@ -243,3 +249,10 @@ func has(m map[string]int64, key string, keys ...string) bool { return ok && has(m, keys[0], keys[1:]...) } } + +func boolToInt(v bool) int64 { + if v { + return 1 + } + return 0 +}