@@ -171,6 +171,13 @@ type filesystemIODeviceMetric struct {
171
171
Labels func (cluster string , node NodeStatsNodeResponse , device string ) []string
172
172
}
173
173
174
+ type indexingPressureMetric struct {
175
+ Type prometheus.ValueType
176
+ Desc * prometheus.Desc
177
+ Value func (indexingPressureMem NodestatsIndexingPressureMemoryResponse ) float64
178
+ Labels func (cluster string , node NodeStatsNodeResponse ) []string
179
+ }
180
+
174
181
// Nodes information struct
175
182
type Nodes struct {
176
183
logger log.Logger
@@ -188,6 +195,7 @@ type Nodes struct {
188
195
threadPoolMetrics []* threadPoolMetric
189
196
filesystemDataMetrics []* filesystemDataMetric
190
197
filesystemIODeviceMetrics []* filesystemIODeviceMetric
198
+ indexingPressureMetrics []* indexingPressureMetric
191
199
}
192
200
193
201
// NewNodes defines Nodes Prometheus metrics
@@ -1781,6 +1789,176 @@ func NewNodes(logger log.Logger, client *http.Client, url *url.URL, all bool, no
1781
1789
Labels : defaultFilesystemIODeviceLabelValues ,
1782
1790
},
1783
1791
},
1792
+ indexingPressureMetrics : []* indexingPressureMetric {
1793
+ {
1794
+ Type : prometheus .GaugeValue ,
1795
+ Desc : prometheus .NewDesc (
1796
+ prometheus .BuildFQName (namespace , "indexing_pressure" , "current_combined_coordinating_and_primary_in_bytes" ),
1797
+ "Memory consumed, in bytes, by indexing requests in the coordinating or primary stage." ,
1798
+ defaultNodeLabels , nil ,
1799
+ ),
1800
+ Value : func (indexingPressureMem NodestatsIndexingPressureMemoryResponse ) float64 {
1801
+ return float64 (indexingPressureMem .Current .CombinedCoordinatingAndPrimaryInBytes )
1802
+ },
1803
+ Labels : defaultNodeLabelValues ,
1804
+ },
1805
+ {
1806
+ Type : prometheus .GaugeValue ,
1807
+ Desc : prometheus .NewDesc (
1808
+ prometheus .BuildFQName (namespace , "indexing_pressure" , "current_coordinating_in_bytes" ),
1809
+ "Memory consumed, in bytes, by indexing requests in the coordinating stage." ,
1810
+ defaultNodeLabels , nil ,
1811
+ ),
1812
+ Value : func (indexingPressureMem NodestatsIndexingPressureMemoryResponse ) float64 {
1813
+ return float64 (indexingPressureMem .Current .CoordinatingInBytes )
1814
+ },
1815
+ Labels : defaultNodeLabelValues ,
1816
+ },
1817
+ {
1818
+ Type : prometheus .GaugeValue ,
1819
+ Desc : prometheus .NewDesc (
1820
+ prometheus .BuildFQName (namespace , "indexing_pressure" , "current_primary_in_bytes" ),
1821
+ "Memory consumed, in bytes, by indexing requests in the primary stage." ,
1822
+ defaultNodeLabels , nil ,
1823
+ ),
1824
+ Value : func (indexingPressureMem NodestatsIndexingPressureMemoryResponse ) float64 {
1825
+ return float64 (indexingPressureMem .Current .PrimaryInBytes )
1826
+ },
1827
+ Labels : defaultNodeLabelValues ,
1828
+ },
1829
+ {
1830
+ Type : prometheus .GaugeValue ,
1831
+ Desc : prometheus .NewDesc (
1832
+ prometheus .BuildFQName (namespace , "indexing_pressure" , "current_replica_in_bytes" ),
1833
+ "Memory consumed, in bytes, by indexing requests in the replica stage." ,
1834
+ defaultNodeLabels , nil ,
1835
+ ),
1836
+ Value : func (indexingPressureMem NodestatsIndexingPressureMemoryResponse ) float64 {
1837
+ return float64 (indexingPressureMem .Current .ReplicaInBytes )
1838
+ },
1839
+ Labels : defaultNodeLabelValues ,
1840
+ },
1841
+ {
1842
+ Type : prometheus .GaugeValue ,
1843
+ Desc : prometheus .NewDesc (
1844
+ prometheus .BuildFQName (namespace , "indexing_pressure" , "current_all_in_bytes" ),
1845
+ "Memory consumed, in bytes, by indexing requests in the coordinating, primary, or replica stage." ,
1846
+ defaultNodeLabels , nil ,
1847
+ ),
1848
+ Value : func (indexingPressureMem NodestatsIndexingPressureMemoryResponse ) float64 {
1849
+ return float64 (indexingPressureMem .Current .ReplicaInBytes )
1850
+ },
1851
+ Labels : defaultNodeLabelValues ,
1852
+ },
1853
+ {
1854
+ Type : prometheus .CounterValue ,
1855
+ Desc : prometheus .NewDesc (
1856
+ prometheus .BuildFQName (namespace , "indexing_pressure" , "total_combined_coordinating_and_primary_in_bytes" ),
1857
+ "Memory consumed, in bytes, by indexing requests in the coordinating or primary stage." ,
1858
+ defaultNodeLabels , nil ,
1859
+ ),
1860
+ Value : func (indexingPressureMem NodestatsIndexingPressureMemoryResponse ) float64 {
1861
+ return float64 (indexingPressureMem .Total .CombinedCoordinatingAndPrimaryInBytes )
1862
+ },
1863
+ Labels : defaultNodeLabelValues ,
1864
+ },
1865
+ {
1866
+ Type : prometheus .CounterValue ,
1867
+ Desc : prometheus .NewDesc (
1868
+ prometheus .BuildFQName (namespace , "indexing_pressure" , "total_coordinating_in_bytes" ),
1869
+ "Memory consumed, in bytes, by indexing requests in the coordinating stage." ,
1870
+ defaultNodeLabels , nil ,
1871
+ ),
1872
+ Value : func (indexingPressureMem NodestatsIndexingPressureMemoryResponse ) float64 {
1873
+ return float64 (indexingPressureMem .Total .CoordinatingInBytes )
1874
+ },
1875
+ Labels : defaultNodeLabelValues ,
1876
+ },
1877
+ {
1878
+ Type : prometheus .CounterValue ,
1879
+ Desc : prometheus .NewDesc (
1880
+ prometheus .BuildFQName (namespace , "indexing_pressure" , "total_primary_in_bytes" ),
1881
+ "Memory consumed, in bytes, by indexing requests in the primary stage." ,
1882
+ defaultNodeLabels , nil ,
1883
+ ),
1884
+ Value : func (indexingPressureMem NodestatsIndexingPressureMemoryResponse ) float64 {
1885
+ return float64 (indexingPressureMem .Total .PrimaryInBytes )
1886
+ },
1887
+ Labels : defaultNodeLabelValues ,
1888
+ },
1889
+ {
1890
+ Type : prometheus .CounterValue ,
1891
+ Desc : prometheus .NewDesc (
1892
+ prometheus .BuildFQName (namespace , "indexing_pressure" , "total_replica_in_bytes" ),
1893
+ "Memory consumed, in bytes, by indexing requests in the replica stage." ,
1894
+ defaultNodeLabels , nil ,
1895
+ ),
1896
+ Value : func (indexingPressureMem NodestatsIndexingPressureMemoryResponse ) float64 {
1897
+ return float64 (indexingPressureMem .Total .ReplicaInBytes )
1898
+ },
1899
+ Labels : defaultNodeLabelValues ,
1900
+ },
1901
+ {
1902
+ Type : prometheus .CounterValue ,
1903
+ Desc : prometheus .NewDesc (
1904
+ prometheus .BuildFQName (namespace , "indexing_pressure" , "total_all_in_bytes" ),
1905
+ "Memory consumed, in bytes, by indexing requests in the coordinating, primary, or replica stage." ,
1906
+ defaultNodeLabels , nil ,
1907
+ ),
1908
+ Value : func (indexingPressureMem NodestatsIndexingPressureMemoryResponse ) float64 {
1909
+ return float64 (indexingPressureMem .Total .AllInBytes )
1910
+ },
1911
+ Labels : defaultNodeLabelValues ,
1912
+ },
1913
+ {
1914
+ Type : prometheus .CounterValue ,
1915
+ Desc : prometheus .NewDesc (
1916
+ prometheus .BuildFQName (namespace , "indexing_pressure" , "total_coordinating_rejections" ),
1917
+ "Number of indexing requests rejected in the coordinating stage." ,
1918
+ defaultNodeLabels , nil ,
1919
+ ),
1920
+ Value : func (indexingPressureMem NodestatsIndexingPressureMemoryResponse ) float64 {
1921
+ return float64 (indexingPressureMem .Total .CoordinatingRejections )
1922
+ },
1923
+ Labels : defaultNodeLabelValues ,
1924
+ },
1925
+ {
1926
+ Type : prometheus .CounterValue ,
1927
+ Desc : prometheus .NewDesc (
1928
+ prometheus .BuildFQName (namespace , "indexing_pressure" , "total_primary_rejections" ),
1929
+ "Number of indexing requests rejected in the primary stage." ,
1930
+ defaultNodeLabels , nil ,
1931
+ ),
1932
+ Value : func (indexingPressureMem NodestatsIndexingPressureMemoryResponse ) float64 {
1933
+ return float64 (indexingPressureMem .Total .PrimaryRejections )
1934
+ },
1935
+ Labels : defaultNodeLabelValues ,
1936
+ },
1937
+ {
1938
+ Type : prometheus .CounterValue ,
1939
+ Desc : prometheus .NewDesc (
1940
+ prometheus .BuildFQName (namespace , "indexing_pressure" , "total_replica_rejections" ),
1941
+ "Number of indexing requests rejected in the replica stage." ,
1942
+ defaultNodeLabels , nil ,
1943
+ ),
1944
+ Value : func (indexingPressureMem NodestatsIndexingPressureMemoryResponse ) float64 {
1945
+ return float64 (indexingPressureMem .Total .ReplicaRejections )
1946
+ },
1947
+ Labels : defaultNodeLabelValues ,
1948
+ },
1949
+ {
1950
+ Type : prometheus .CounterValue ,
1951
+ Desc : prometheus .NewDesc (
1952
+ prometheus .BuildFQName (namespace , "indexing_pressure" , "limit_in_bytes" ),
1953
+ "Configured memory limit, in bytes, for the indexing requests. Replica requests have an automatic limit that is 1.5x this value." ,
1954
+ defaultNodeLabels , nil ,
1955
+ ),
1956
+ Value : func (indexingPressureMem NodestatsIndexingPressureMemoryResponse ) float64 {
1957
+ return float64 (indexingPressureMem .LimitInBytes )
1958
+ },
1959
+ Labels : defaultNodeLabelValues ,
1960
+ },
1961
+ },
1784
1962
}
1785
1963
}
1786
1964
@@ -1801,6 +1979,9 @@ func (c *Nodes) Describe(ch chan<- *prometheus.Desc) {
1801
1979
for _ , metric := range c .filesystemIODeviceMetrics {
1802
1980
ch <- metric .Desc
1803
1981
}
1982
+ for _ , metric := range c .indexingPressureMetrics {
1983
+ ch <- metric .Desc
1984
+ }
1804
1985
ch <- c .up .Desc ()
1805
1986
ch <- c .totalScrapes .Desc ()
1806
1987
ch <- c .jsonParseFailures .Desc ()
@@ -1955,5 +2136,18 @@ func (c *Nodes) Collect(ch chan<- prometheus.Metric) {
1955
2136
}
1956
2137
}
1957
2138
2139
+ // indexing_pressure Stats https://github.com/prometheus-community/elasticsearch_exporter/issues/638
2140
+ // https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-indexing-pressure.html
2141
+ for _ , indexingPressureMem := range node .IndexingPressure {
2142
+ for _ , metric := range c .indexingPressureMetrics {
2143
+ ch <- prometheus .MustNewConstMetric (
2144
+ metric .Desc ,
2145
+ metric .Type ,
2146
+ metric .Value (indexingPressureMem ),
2147
+ metric .Labels (nodeStatsResp .ClusterName , node )... ,
2148
+ )
2149
+ }
2150
+ }
2151
+
1958
2152
}
1959
2153
}
0 commit comments