Skip to content

Commit 06ce0ac

Browse files
nhuttranlukas-vlcek
nhuttran
authored andcommitted
Introduce indices filter
Signed-off-by: nhuttran <truong.nhut_tran.ext@nokia.com>
1 parent 1406142 commit 06ce0ac

File tree

5 files changed

+72
-1
lines changed

5 files changed

+72
-1
lines changed

README.md

+10
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,16 @@ For example to get stats for all cluster nodes from any node use settings:
139139
prometheus.nodes.filter: "_all"
140140
```
141141

142+
#### Indices filter
143+
144+
Prometheus exporter can be configured to filter indices statistics with indices starting with prefixes.
145+
Default value: `""`.
146+
147+
For example to filter indices statistics with indices starting with prefixes such as logs, alarms:
148+
```
149+
prometheus.indices_filter: "logs-*,alarms*"
150+
```
151+
142152
## Usage
143153

144154
Metrics are directly available at:

src/main/java/org/compuscene/metrics/prometheus/PrometheusSettings.java

+24
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public class PrometheusSettings {
3434
static String PROMETHEUS_CLUSTER_SETTINGS_KEY = "prometheus.cluster.settings";
3535
static String PROMETHEUS_INDICES_KEY = "prometheus.indices";
3636
static String PROMETHEUS_NODES_FILTER_KEY = "prometheus.nodes.filter";
37+
static String PROMETHEUS_INDICES_FILTER_KEY = "prometheus.indices_filter";
3738

3839
/**
3940
* This setting is used configure weather to expose cluster settings metrics or not. The default value is true.
@@ -59,9 +60,18 @@ public class PrometheusSettings {
5960
Setting.simpleString(PROMETHEUS_NODES_FILTER_KEY, "_local",
6061
Setting.Property.Dynamic, Setting.Property.NodeScope);
6162

63+
/**
64+
* This setting is used configure to filter indices statistics with indices starting with prefixes. The default value is "".
65+
* Can be configured in opensearch.yml file or update dynamically under key {@link #PROMETHEUS_INDICES_FILTER_KEY}.
66+
*/
67+
public static final Setting<String> PROMETHEUS_INDICES_FILTER =
68+
Setting.simpleString(PROMETHEUS_INDICES_FILTER_KEY, "",
69+
Setting.Property.Dynamic, Setting.Property.NodeScope);
70+
6271
private volatile boolean clusterSettings;
6372
private volatile boolean indices;
6473
private volatile String nodesFilter;
74+
private volatile String indicesFilter;
6575

6676
/**
6777
* A constructor.
@@ -72,9 +82,11 @@ public PrometheusSettings(Settings settings, ClusterSettings clusterSettings) {
7282
setPrometheusClusterSettings(PROMETHEUS_CLUSTER_SETTINGS.get(settings));
7383
setPrometheusIndices(PROMETHEUS_INDICES.get(settings));
7484
setPrometheusNodesFilter(PROMETHEUS_NODES_FILTER.get(settings));
85+
setPrometheusIndicesFilter(PROMETHEUS_INDICES_FILTER.get(settings));
7586
clusterSettings.addSettingsUpdateConsumer(PROMETHEUS_CLUSTER_SETTINGS, this::setPrometheusClusterSettings);
7687
clusterSettings.addSettingsUpdateConsumer(PROMETHEUS_INDICES, this::setPrometheusIndices);
7788
clusterSettings.addSettingsUpdateConsumer(PROMETHEUS_NODES_FILTER, this::setPrometheusNodesFilter);
89+
clusterSettings.addSettingsUpdateConsumer(PROMETHEUS_INDICES_FILTER, this::setPrometheusIndicesFilter);
7890
}
7991

8092
private void setPrometheusClusterSettings(boolean flag) {
@@ -87,6 +99,10 @@ private void setPrometheusIndices(boolean flag) {
8799

88100
private void setPrometheusNodesFilter(String filter) { this.nodesFilter = filter; }
89101

102+
private void setPrometheusIndicesFilter(String indicesFilter) {
103+
this.indicesFilter = indicesFilter;
104+
}
105+
90106
/**
91107
* Get value of settings key {@link #PROMETHEUS_CLUSTER_SETTINGS_KEY}.
92108
* @return boolean value of the key
@@ -108,4 +124,12 @@ public boolean getPrometheusIndices() {
108124
* @return boolean value of the key
109125
*/
110126
public String getNodesFilter() { return this.nodesFilter; }
127+
128+
/**
129+
* Get value of settings key {@link #PROMETHEUS_INDICES_FILTER_KEY}.
130+
* @return string value of the key
131+
*/
132+
public String getPrometheusIndicesFilter() {
133+
return this.indicesFilter;
134+
}
111135
}

src/main/java/org/opensearch/action/TransportNodePrometheusMetricsAction.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.opensearch.client.Client;
3838
import org.opensearch.client.Requests;
3939
import org.opensearch.common.Nullable;
40+
import org.opensearch.common.Strings;
4041
import org.opensearch.common.inject.Inject;
4142
import org.opensearch.common.settings.ClusterSettings;
4243
import org.opensearch.common.settings.Settings;
@@ -132,7 +133,7 @@ private AsyncAction(ActionListener<NodePrometheusMetricsResponse> listener) {
132133

133134
// Indices stats request is not "node-specific", it does not support any "_local" notion
134135
// it is broad-casted to all cluster nodes.
135-
this.indicesStatsRequest = isPrometheusIndices ? new IndicesStatsRequest() : null;
136+
this.indicesStatsRequest = isPrometheusIndices ? (new IndicesStatsRequest()).indices(Strings.splitStringByCommaToArray(prometheusSettings.getPrometheusIndicesFilter())) : null;
136137

137138
// Cluster settings are get via ClusterStateRequest (see elasticsearch RestClusterGetSettingsAction for details)
138139
// We prefer to send it to master node (hence local=false; it should be set by default but we want to be sure).

src/main/java/org/opensearch/plugin/prometheus/PrometheusExporterPlugin.java

+1
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ public List<Setting<?>> getSettings() {
7676
PrometheusSettings.PROMETHEUS_CLUSTER_SETTINGS,
7777
PrometheusSettings.PROMETHEUS_INDICES,
7878
PrometheusSettings.PROMETHEUS_NODES_FILTER,
79+
PrometheusSettings.PROMETHEUS_INDICES_FILTER,
7980
RestPrometheusMetricsAction.METRIC_PREFIX
8081
);
8182
return Collections.unmodifiableList(settings);

src/yamlRestTest/resources/rest-api-spec/test/50_10_nodes_filter.yml

+35
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
- match: {defaults.prometheus.cluster.settings: "true"}
1818
- match: {defaults.prometheus.indices: "true"}
1919
- match: {defaults.prometheus.nodes.filter: "_local"}
20+
- match: {defaults.prometheus.indices_filter: ""}
2021
- match: {defaults.prometheus.metric_name.prefix: "opensearch_"}
2122

2223

@@ -44,6 +45,16 @@
4445

4546
- match: {persistent: {prometheus.nodes.filter: "_all"}}
4647

48+
# Change indices filter to "logs*"
49+
- do:
50+
cluster.put_settings:
51+
body:
52+
persistent:
53+
prometheus.indices_filter: "logs*"
54+
flat_settings: true
55+
56+
- match: {persistent: {prometheus.indices_filter: "logs*"}}
57+
4758
# Verify in Prometheus metrics:
4859
- do:
4960
prometheus.metrics: {}
@@ -64,3 +75,27 @@
6475
persistent:
6576
prometheus.nodes.filter: null
6677
flat_settings: true
78+
79+
# Remove persistent settings
80+
- do:
81+
cluster.put_settings:
82+
body:
83+
persistent:
84+
prometheus.indices_filter: null
85+
flat_settings: true
86+
87+
# Remove persistent settings
88+
- do:
89+
cluster.put_settings:
90+
body:
91+
persistent:
92+
prometheus.indices_filter: null
93+
flat_settings: true
94+
95+
# Remove persistent settings
96+
- do:
97+
cluster.put_settings:
98+
body:
99+
persistent:
100+
prometheus.indices_filter: null
101+
flat_settings: true

0 commit comments

Comments
 (0)