diff --git a/collector/cluster-settings.go b/collector/cluster-settings.go index fdf87fe..5e92e82 100644 --- a/collector/cluster-settings.go +++ b/collector/cluster-settings.go @@ -11,8 +11,9 @@ type ClusterSettingsCollector struct { client *Client logger *logrus.Logger - excludeExists *prometheus.Desc - maxShardsPerNode *prometheus.Desc + excludeExists *prometheus.Desc + maxShardsPerNode *prometheus.Desc + totalShardsPerNodeExists *prometheus.Desc } func NewClusterSettingsCollector(logger *logrus.Logger, client *Client, labels, labels_group []string, datepattern string, @@ -25,10 +26,13 @@ func NewClusterSettingsCollector(logger *logrus.Logger, client *Client, labels, prometheus.BuildFQName(namespace, "exclude", "exists"), "Exclude exists in cluster settings", labels, constLabels, ), + totalShardsPerNodeExists: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "total_shards_per_node", "exists"), + "total_shards_per_node exists in cluster settings", labels, constLabels, + ), maxShardsPerNode: prometheus.NewDesc( prometheus.BuildFQName(namespace, "clustersettings_stats", "max_shards_per_node"), - "Current maximum number of shards per node setting.", - nil, nil, + "Current maximum number of shards per node setting.", labels, constLabels, ), } } @@ -36,6 +40,7 @@ func NewClusterSettingsCollector(logger *logrus.Logger, client *Client, labels, func (c *ClusterSettingsCollector) Describe(ch chan<- *prometheus.Desc) { ch <- c.excludeExists ch <- c.maxShardsPerNode + ch <- c.totalShardsPerNodeExists } func (c *ClusterSettingsCollector) Collect(ch chan<- prometheus.Metric) { @@ -58,6 +63,20 @@ func (c *ClusterSettingsCollector) Collect(ch chan<- prometheus.Metric) { ch <- prometheus.MustNewConstMetric(c.excludeExists, prometheus.CounterValue, 0, "transient") } + path = "persistent.cluster.routing.allocation.total_shards_per_node" + if _, ok := walk(settings, path); ok { + ch <- prometheus.MustNewConstMetric(c.totalShardsPerNodeExists, prometheus.CounterValue, 1, "persistent") + } else { + ch <- prometheus.MustNewConstMetric(c.totalShardsPerNodeExists, prometheus.CounterValue, 0, "persistent") + } + + path = "transient.cluster.routing.allocation.total_shards_per_node" + if _, ok := walk(settings, path); ok { + ch <- prometheus.MustNewConstMetric(c.totalShardsPerNodeExists, prometheus.CounterValue, 1, "transient") + } else { + ch <- prometheus.MustNewConstMetric(c.totalShardsPerNodeExists, prometheus.CounterValue, 0, "transient") + } + path = "persistent.cluster.max_shards_per_node" if count, ok := walk(settings, path); ok { if v, ok := count.(string); ok { @@ -68,15 +87,15 @@ func (c *ClusterSettingsCollector) Collect(ch chan<- prometheus.Metric) { if v, ok := count_transient.(string); ok { maxShardsPerNodeTransient, err := strconv.ParseInt(v, 10, 64) if err == nil { - ch <- prometheus.MustNewConstMetric(c.maxShardsPerNode, prometheus.GaugeValue, float64(maxShardsPerNodeTransient)) + ch <- prometheus.MustNewConstMetric(c.maxShardsPerNode, prometheus.GaugeValue, float64(maxShardsPerNodeTransient), "transient") } else { - ch <- prometheus.MustNewConstMetric(c.maxShardsPerNode, prometheus.GaugeValue, float64(maxShardsPerNode)) + ch <- prometheus.MustNewConstMetric(c.maxShardsPerNode, prometheus.GaugeValue, float64(maxShardsPerNode), "persistent") } } else { - ch <- prometheus.MustNewConstMetric(c.maxShardsPerNode, prometheus.GaugeValue, float64(maxShardsPerNode)) + ch <- prometheus.MustNewConstMetric(c.maxShardsPerNode, prometheus.GaugeValue, float64(maxShardsPerNode), "persistent") } } else { - ch <- prometheus.MustNewConstMetric(c.maxShardsPerNode, prometheus.GaugeValue, float64(maxShardsPerNode)) + ch <- prometheus.MustNewConstMetric(c.maxShardsPerNode, prometheus.GaugeValue, float64(maxShardsPerNode), "persistent") } } else { c.logger.Errorf("got invalid %q value: %#v", path, count) @@ -85,7 +104,7 @@ func (c *ClusterSettingsCollector) Collect(ch chan<- prometheus.Metric) { c.logger.Errorf("got invalid %q value: %#v", path, count) } } else { - ch <- prometheus.MustNewConstMetric(c.maxShardsPerNode, prometheus.GaugeValue, 1000.0) + ch <- prometheus.MustNewConstMetric(c.maxShardsPerNode, prometheus.GaugeValue, 1000.0, "default") } }