diff options
author | Sami Hiltunen <shiltunen@gitlab.com> | 2020-05-28 17:33:50 +0300 |
---|---|---|
committer | Sami Hiltunen <shiltunen@gitlab.com> | 2020-06-09 15:46:38 +0300 |
commit | 0d5e6b09284f377c703bd96eb77c735f260b9ab4 (patch) | |
tree | ed1c16e6da471f9a390e2d41645dbea26b8e85dc | |
parent | 97dcd53c020d3d6d123530ac1a41140b950dd607 (diff) |
export prometheus metric for read-only mode
Exports a Prometheus metrics showing whether a virtual storage is in
read-only mode or not.
-rw-r--r-- | internal/praefect/metrics/prometheus.go | 8 | ||||
-rw-r--r-- | internal/praefect/metrics/util.go | 11 | ||||
-rw-r--r-- | internal/praefect/nodes/local_elector.go | 2 | ||||
-rw-r--r-- | internal/praefect/nodes/sql_elector.go | 1 |
4 files changed, 22 insertions, 0 deletions
diff --git a/internal/praefect/metrics/prometheus.go b/internal/praefect/metrics/prometheus.go index 87dee00ca..8a6917f0f 100644 --- a/internal/praefect/metrics/prometheus.go +++ b/internal/praefect/metrics/prometheus.go @@ -111,6 +111,13 @@ var PrimaryGauge = prometheus.NewGaugeVec( }, []string{"virtual_storage", "gitaly_storage"}, ) +var ReadOnlyGauge = prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "gitaly_praefect_read_only_mode", + Help: "Shows whether a virtual storage is in read-only mode.", + }, []string{"virtual_storage"}, +) + var NodeLastHealthcheckGauge = prometheus.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "gitaly", @@ -142,6 +149,7 @@ func init() { prometheus.MustRegister( MethodTypeCounter, PrimaryGauge, + ReadOnlyGauge, ChecksumMismatchCounter, NodeLastHealthcheckGauge, ReadDistribution, diff --git a/internal/praefect/metrics/util.go b/internal/praefect/metrics/util.go new file mode 100644 index 000000000..804804454 --- /dev/null +++ b/internal/praefect/metrics/util.go @@ -0,0 +1,11 @@ +package metrics + +// BoolAsFloat is a utility for converting a boolean value to a float64 +// for Prometheus. Returns 1 if bool is true, else 0. +func BoolAsFloat(b bool) float64 { + if b { + return 1 + } + + return 0 +} diff --git a/internal/praefect/nodes/local_elector.go b/internal/praefect/nodes/local_elector.go index 04711f760..badff8768 100644 --- a/internal/praefect/nodes/local_elector.go +++ b/internal/praefect/nodes/local_elector.go @@ -151,6 +151,8 @@ func (s *localElector) checkNodes(ctx context.Context) error { s.primaryNode = newPrimary s.isReadOnly = s.readOnlyAfterFailover + metrics.ReadOnlyGauge.WithLabelValues(s.shardName).Set(metrics.BoolAsFloat(s.isReadOnly)) + return nil } diff --git a/internal/praefect/nodes/sql_elector.go b/internal/praefect/nodes/sql_elector.go index e747b5265..cc652f4b7 100644 --- a/internal/praefect/nodes/sql_elector.go +++ b/internal/praefect/nodes/sql_elector.go @@ -529,6 +529,7 @@ func (s *sqlElector) lookupPrimary() (*sqlCandidate, bool, error) { var primaryNode *sqlCandidate if primaryName != "" { primaryNode = s.lookupNodeByName(primaryName) + metrics.ReadOnlyGauge.WithLabelValues(s.shardName).Set(metrics.BoolAsFloat(readOnly)) } return primaryNode, readOnly, nil |