From ab1cbcbbf8688a11549294e175bc020b42664549 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Tue, 26 Sep 2017 12:50:10 -0300 Subject: [PATCH] prometheus: export count of unreachable peers (#3119) * prometheus: export count of unreachable peers * extracted part of printIPAMRanges --- prog/weaver/http.go | 37 +++++++++++++++++++----------------- prog/weaver/metrics.go | 10 ++++++++++ site/tasks/manage/metrics.md | 1 + 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/prog/weaver/http.go b/prog/weaver/http.go index ce59a843..14be735b 100644 --- a/prog/weaver/http.go +++ b/prog/weaver/http.go @@ -34,23 +34,7 @@ var rootTemplate = template.New("root").Funcs(map[string]interface{}{ }, "printIPAMRanges": func(router weave.NetworkRouterStatus, status ipam.Status) string { var buffer bytes.Buffer - - type stats struct { - ips uint32 - nickname string - reachable bool - } - - peerStats := make(map[string]*stats) - - for _, entry := range status.Entries { - s, found := peerStats[entry.Peer] - if !found { - s = &stats{nickname: entry.Nickname, reachable: entry.IsKnownPeer} - peerStats[entry.Peer] = s - } - s.ips += entry.Size - } + peerStats := summariseIpamStats(&status) printOwned := func(name string, nickName string, info string, ips uint32) { percentageRanges := float32(ips) * 100.0 / float32(status.RangeNumIPs) @@ -116,6 +100,25 @@ var rootTemplate = template.New("root").Funcs(map[string]interface{}{ "trimSuffix": strings.TrimSuffix, }) +type ipamStats struct { + ips uint32 + nickname string + reachable bool +} + +func summariseIpamStats(status *ipam.Status) map[string]*ipamStats { + peerStats := make(map[string]*ipamStats) + for _, entry := range status.Entries { + s, found := peerStats[entry.Peer] + if !found { + s = &ipamStats{nickname: entry.Nickname, reachable: entry.IsKnownPeer} + peerStats[entry.Peer] = s + } + s.ips += entry.Size + } + return peerStats +} + func countDNSEntries(entries []nameserver.EntryStatus) int { count := 0 for _, entry := range entries { diff --git a/prog/weaver/metrics.go b/prog/weaver/metrics.go index 76327c2c..660a590c 100644 --- a/prog/weaver/metrics.go +++ b/prog/weaver/metrics.go @@ -82,6 +82,16 @@ var metrics = []metric{ ch <- intGauge(desc, metrics.Flows) } }}, + {desc("weave_ipam_unreachable_count", "Number of unreachable peers."), + func(s WeaveStatus, desc *prometheus.Desc, ch chan<- prometheus.Metric) { + var count int + for _, entry := range summariseIpamStats(s.IPAM) { + if !entry.reachable { + count++ + } + } + ch <- intGauge(desc, count) + }}, {desc("weave_ipam_pending_allocates", "Number of pending allocates."), func(s WeaveStatus, desc *prometheus.Desc, ch chan<- prometheus.Metric) { if s.IPAM != nil { diff --git a/site/tasks/manage/metrics.md b/site/tasks/manage/metrics.md index 93cbbbe7..202bf2e4 100644 --- a/site/tasks/manage/metrics.md +++ b/site/tasks/manage/metrics.md @@ -20,6 +20,7 @@ exposed: * `weave_max_ips` - Size of IP address space used by allocator. * `weave_dns_entries` - Number of DNS entries. * `weave_flows` - Number of FastDP flows. +* `weave_ipam_unreachable_coun` - Number of unreachable peers. * `weave_ipam_pending_allocates` - Number of pending allocates. * `weave_ipam_pending_claims` - Number of pending claims.