diff --git a/prog/weaver/metrics.go b/prog/weaver/metrics.go index 660a590c..cb47b248 100644 --- a/prog/weaver/metrics.go +++ b/prog/weaver/metrics.go @@ -92,6 +92,17 @@ var metrics = []metric{ } ch <- intGauge(desc, count) }}, + {desc("weave_ipam_unreachable_percentage", "Percentage of IP addresses owned by unreachable peers."), + func(s WeaveStatus, desc *prometheus.Desc, ch chan<- prometheus.Metric) { + var totalUnreachable uint32 + for _, entry := range summariseIpamStats(s.IPAM) { + if !entry.reachable { + totalUnreachable += entry.ips + } + } + percentage := float64(totalUnreachable) * 100.0 / float64(s.IPAM.RangeNumIPs) + ch <- prometheus.MustNewConstMetric(desc, prometheus.GaugeValue, percentage) + }}, {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 4d46d779..a2b27371 100644 --- a/site/tasks/manage/metrics.md +++ b/site/tasks/manage/metrics.md @@ -21,6 +21,7 @@ exposed: * `weave_dns_entries` - Number of DNS entries. * `weave_flows` - Number of FastDP flows. * `weave_ipam_unreachable_count` - Number of unreachable peers that own IPAM addresses. +* `weave_ipam_unreachable_percentage` - Percentage of all IP addresses owned by unreachable peers. * `weave_ipam_pending_allocates` - Number of pending allocates. * `weave_ipam_pending_claims` - Number of pending claims.