[Monitoring] Disable Monitoring Collection by Default (elastic/x-pack-elasticsearch#3962)
This adds a new setting, `xpack.monitoring.collection.enabled`, and disables it by default (`false`). Original commit: elastic/x-pack-elasticsearch@4b3a5a1161
This commit is contained in:
parent
828387a25a
commit
309adaf38e
|
@ -5,8 +5,11 @@
|
||||||
<titleabbrev>Monitoring Settings</titleabbrev>
|
<titleabbrev>Monitoring Settings</titleabbrev>
|
||||||
++++
|
++++
|
||||||
|
|
||||||
Monitoring is enabled by default when you install {xpack}. You can configure
|
By default when you install {xpack}, monitoring is enabled but data collection
|
||||||
these monitoring settings in the `elasticsearch.yml` file.
|
is disabled. To enable data collection, use the
|
||||||
|
`xpack.monitoring.collection.enabled` setting.
|
||||||
|
|
||||||
|
You can configure these monitoring settings in the `elasticsearch.yml` file.
|
||||||
|
|
||||||
To adjust how monitoring data is displayed in the monitoring UI, configure
|
To adjust how monitoring data is displayed in the monitoring UI, configure
|
||||||
{kibana-ref}/monitoring-settings-kb.html[`xpack.monitoring` settings] in
|
{kibana-ref}/monitoring-settings-kb.html[`xpack.monitoring` settings] in
|
||||||
|
@ -31,6 +34,13 @@ Set to `false` to disable {es} {monitoring} for Elasticsearch on the node.
|
||||||
The `xpack.monitoring.collection` settings control how data is collected from
|
The `xpack.monitoring.collection` settings control how data is collected from
|
||||||
your Elasticsearch nodes.
|
your Elasticsearch nodes.
|
||||||
|
|
||||||
|
`xpack.monitoring.collection.enabled`::
|
||||||
|
|
||||||
|
Enable the collection of monitoring data. Defaults to `false`. added[6.3.0]
|
||||||
|
+
|
||||||
|
You can update this setting through the
|
||||||
|
<<cluster-update-settings,Cluster Update Settings API>>.
|
||||||
|
|
||||||
`xpack.monitoring.collection.cluster.stats.timeout`::
|
`xpack.monitoring.collection.cluster.stats.timeout`::
|
||||||
|
|
||||||
Sets the timeout for collecting the cluster statistics. Defaults to `10s`.
|
Sets the timeout for collecting the cluster statistics. Defaults to `10s`.
|
||||||
|
@ -43,7 +53,8 @@ example `test*`. You can explicitly include or exclude indices by prepending
|
||||||
`+` to include the index, or `-` to exclude the index. For example, to include all indices that
|
`+` to include the index, or `-` to exclude the index. For example, to include all indices that
|
||||||
start with `test` except `test3`, you could specify `+test*,-test3`.
|
start with `test` except `test3`, you could specify `+test*,-test3`.
|
||||||
+
|
+
|
||||||
You can update this setting through the Cluster Update Settings API.
|
You can update this setting through the
|
||||||
|
<<cluster-update-settings,Cluster Update Settings API>>.
|
||||||
|
|
||||||
`xpack.monitoring.collection.index.stats.timeout`::
|
`xpack.monitoring.collection.index.stats.timeout`::
|
||||||
|
|
||||||
|
@ -67,8 +78,8 @@ Sets the timeout for collecting the recovery information. Defaults to `10s`.
|
||||||
Controls how often data samples are collected. Defaults to `10s`. If you
|
Controls how often data samples are collected. Defaults to `10s`. If you
|
||||||
modify the collection interval, set the `xpack.monitoring.min_interval_seconds`
|
modify the collection interval, set the `xpack.monitoring.min_interval_seconds`
|
||||||
option in `kibana.yml` to the same value. Set to `-1` to temporarily disable
|
option in `kibana.yml` to the same value. Set to `-1` to temporarily disable
|
||||||
data collection. You can update this setting through the Cluster Update
|
data collection. You can update this setting through the
|
||||||
Settings API.
|
<<cluster-update-settings,Cluster Update Settings API>>.
|
||||||
|
|
||||||
`xpack.monitoring.history.duration`::
|
`xpack.monitoring.history.duration`::
|
||||||
|
|
||||||
|
|
|
@ -170,6 +170,7 @@ public class Monitoring extends Plugin implements ActionPlugin {
|
||||||
List<Setting<?>> settings = new ArrayList<>();
|
List<Setting<?>> settings = new ArrayList<>();
|
||||||
settings.add(MonitoringField.HISTORY_DURATION);
|
settings.add(MonitoringField.HISTORY_DURATION);
|
||||||
settings.add(CLEAN_WATCHER_HISTORY);
|
settings.add(CLEAN_WATCHER_HISTORY);
|
||||||
|
settings.add(MonitoringService.ENABLED);
|
||||||
settings.add(MonitoringService.INTERVAL);
|
settings.add(MonitoringService.INTERVAL);
|
||||||
settings.add(Collector.INDICES);
|
settings.add(Collector.INDICES);
|
||||||
settings.add(ClusterStatsCollector.CLUSTER_STATS_TIMEOUT);
|
settings.add(ClusterStatsCollector.CLUSTER_STATS_TIMEOUT);
|
||||||
|
|
|
@ -41,7 +41,14 @@ public class MonitoringService extends AbstractLifecycleComponent {
|
||||||
/**
|
/**
|
||||||
* Minimum value for sampling interval (1 second)
|
* Minimum value for sampling interval (1 second)
|
||||||
*/
|
*/
|
||||||
static final TimeValue MIN_INTERVAL = TimeValue.timeValueSeconds(1L);
|
public static final TimeValue MIN_INTERVAL = TimeValue.timeValueSeconds(1L);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dynamically controls enabling or disabling the collection of Monitoring data.
|
||||||
|
*/
|
||||||
|
public static final Setting<Boolean> ENABLED =
|
||||||
|
Setting.boolSetting("xpack.monitoring.collection.enabled", false,
|
||||||
|
Setting.Property.Dynamic, Setting.Property.NodeScope);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sampling interval between two collections (default to 10s)
|
* Sampling interval between two collections (default to 10s)
|
||||||
|
@ -67,6 +74,7 @@ public class MonitoringService extends AbstractLifecycleComponent {
|
||||||
private final Set<Collector> collectors;
|
private final Set<Collector> collectors;
|
||||||
private final Exporters exporters;
|
private final Exporters exporters;
|
||||||
|
|
||||||
|
private volatile boolean enabled;
|
||||||
private volatile TimeValue interval;
|
private volatile TimeValue interval;
|
||||||
private volatile ThreadPool.Cancellable scheduler;
|
private volatile ThreadPool.Cancellable scheduler;
|
||||||
|
|
||||||
|
@ -77,11 +85,19 @@ public class MonitoringService extends AbstractLifecycleComponent {
|
||||||
this.threadPool = Objects.requireNonNull(threadPool);
|
this.threadPool = Objects.requireNonNull(threadPool);
|
||||||
this.collectors = Objects.requireNonNull(collectors);
|
this.collectors = Objects.requireNonNull(collectors);
|
||||||
this.exporters = Objects.requireNonNull(exporters);
|
this.exporters = Objects.requireNonNull(exporters);
|
||||||
|
this.enabled = ENABLED.get(settings);
|
||||||
this.interval = INTERVAL.get(settings);
|
this.interval = INTERVAL.get(settings);
|
||||||
|
|
||||||
|
clusterService.getClusterSettings().addSettingsUpdateConsumer(ENABLED, this::setMonitoringActive);
|
||||||
clusterService.getClusterSettings().addSettingsUpdateConsumer(INTERVAL, this::setInterval);
|
clusterService.getClusterSettings().addSettingsUpdateConsumer(INTERVAL, this::setInterval);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setInterval(TimeValue interval) {
|
void setMonitoringActive(final boolean enabled) {
|
||||||
|
this.enabled = enabled;
|
||||||
|
scheduleExecution();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setInterval(final TimeValue interval) {
|
||||||
this.interval = interval;
|
this.interval = interval;
|
||||||
scheduleExecution();
|
scheduleExecution();
|
||||||
}
|
}
|
||||||
|
@ -92,6 +108,7 @@ public class MonitoringService extends AbstractLifecycleComponent {
|
||||||
|
|
||||||
public boolean isMonitoringActive() {
|
public boolean isMonitoringActive() {
|
||||||
return isStarted()
|
return isStarted()
|
||||||
|
&& enabled
|
||||||
&& interval != null
|
&& interval != null
|
||||||
&& interval.millis() >= MIN_INTERVAL.millis();
|
&& interval.millis() >= MIN_INTERVAL.millis();
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,6 +73,15 @@ public class MonitoringServiceTests extends ESTestCase {
|
||||||
|
|
||||||
monitoringService.start();
|
monitoringService.start();
|
||||||
assertBusy(() -> assertTrue(monitoringService.isStarted()));
|
assertBusy(() -> assertTrue(monitoringService.isStarted()));
|
||||||
|
assertFalse(monitoringService.isMonitoringActive());
|
||||||
|
|
||||||
|
monitoringService.setMonitoringActive(true);
|
||||||
|
assertTrue(monitoringService.isMonitoringActive());
|
||||||
|
|
||||||
|
monitoringService.setInterval(TimeValue.MINUS_ONE);
|
||||||
|
assertFalse(monitoringService.isMonitoringActive());
|
||||||
|
|
||||||
|
monitoringService.setInterval(TimeValue.timeValueSeconds(10));
|
||||||
assertTrue(monitoringService.isMonitoringActive());
|
assertTrue(monitoringService.isMonitoringActive());
|
||||||
|
|
||||||
monitoringService.stop();
|
monitoringService.stop();
|
||||||
|
@ -89,7 +98,11 @@ public class MonitoringServiceTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testInterval() throws Exception {
|
public void testInterval() throws Exception {
|
||||||
Settings settings = Settings.builder().put(MonitoringService.INTERVAL.getKey(), TimeValue.MINUS_ONE).build();
|
final Settings settings =
|
||||||
|
Settings.builder()
|
||||||
|
.put(MonitoringService.ENABLED.getKey(), true)
|
||||||
|
.put(MonitoringService.INTERVAL.getKey(), TimeValue.MINUS_ONE)
|
||||||
|
.build();
|
||||||
|
|
||||||
CountingExporter exporter = new CountingExporter();
|
CountingExporter exporter = new CountingExporter();
|
||||||
monitoringService = new MonitoringService(settings, clusterService, threadPool, emptySet(), exporter);
|
monitoringService = new MonitoringService(settings, clusterService, threadPool, emptySet(), exporter);
|
||||||
|
@ -113,8 +126,12 @@ public class MonitoringServiceTests extends ESTestCase {
|
||||||
public void testSkipExecution() throws Exception {
|
public void testSkipExecution() throws Exception {
|
||||||
final CountDownLatch latch = new CountDownLatch(1);
|
final CountDownLatch latch = new CountDownLatch(1);
|
||||||
final BlockingExporter exporter = new BlockingExporter(latch);
|
final BlockingExporter exporter = new BlockingExporter(latch);
|
||||||
|
final Settings settings =
|
||||||
|
Settings.builder()
|
||||||
|
.put(MonitoringService.ENABLED.getKey(), true)
|
||||||
|
.put(MonitoringService.INTERVAL.getKey(), MonitoringService.MIN_INTERVAL)
|
||||||
|
.build();
|
||||||
|
|
||||||
Settings settings = Settings.builder().put(MonitoringService.INTERVAL.getKey(), MonitoringService.MIN_INTERVAL).build();
|
|
||||||
monitoringService = new MonitoringService(settings, clusterService, threadPool, emptySet(), exporter);
|
monitoringService = new MonitoringService(settings, clusterService, threadPool, emptySet(), exporter);
|
||||||
|
|
||||||
monitoringService.start();
|
monitoringService.start();
|
||||||
|
|
|
@ -27,22 +27,18 @@ import static org.hamcrest.Matchers.instanceOf;
|
||||||
|
|
||||||
@ClusterScope(scope = Scope.TEST, numDataNodes = 0, numClientNodes = 0, transportClientRatio = 0.0)
|
@ClusterScope(scope = Scope.TEST, numDataNodes = 0, numClientNodes = 0, transportClientRatio = 0.0)
|
||||||
public class MultiNodesStatsTests extends MonitoringIntegTestCase {
|
public class MultiNodesStatsTests extends MonitoringIntegTestCase {
|
||||||
public MultiNodesStatsTests() throws Exception {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Settings nodeSettings(int nodeOrdinal) {
|
protected Settings nodeSettings(int nodeOrdinal) {
|
||||||
return Settings.builder()
|
return Settings.builder()
|
||||||
.put(super.nodeSettings(nodeOrdinal))
|
.put(super.nodeSettings(nodeOrdinal))
|
||||||
.put(MonitoringService.INTERVAL.getKey(), "-1")
|
|
||||||
.put("xpack.monitoring.exporters.default_local.type", "local")
|
.put("xpack.monitoring.exporters.default_local.type", "local")
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
public void cleanup() throws Exception {
|
public void cleanup() throws Exception {
|
||||||
disableMonitoringInterval();
|
disableMonitoringCollection();
|
||||||
wipeMonitoringIndices();
|
wipeMonitoringIndices();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,7 +56,9 @@ public class MultiNodesStatsTests extends MonitoringIntegTestCase {
|
||||||
|
|
||||||
n = randomIntBetween(1, 2);
|
n = randomIntBetween(1, 2);
|
||||||
internalCluster().startNodes(n,
|
internalCluster().startNodes(n,
|
||||||
Settings.builder().put(Node.NODE_DATA_SETTING.getKey(), false).put(Node.NODE_MASTER_SETTING.getKey(), false)
|
Settings.builder()
|
||||||
|
.put(Node.NODE_DATA_SETTING.getKey(), false)
|
||||||
|
.put(Node.NODE_MASTER_SETTING.getKey(), false)
|
||||||
.put(Node.NODE_INGEST_SETTING.getKey(), false).build());
|
.put(Node.NODE_INGEST_SETTING.getKey(), false).build());
|
||||||
nodes += n;
|
nodes += n;
|
||||||
|
|
||||||
|
@ -77,7 +75,7 @@ public class MultiNodesStatsTests extends MonitoringIntegTestCase {
|
||||||
assertNoTimeout(client().admin().cluster().prepareHealth().setWaitForNodes(Integer.toString(nbNodes)).get());
|
assertNoTimeout(client().admin().cluster().prepareHealth().setWaitForNodes(Integer.toString(nbNodes)).get());
|
||||||
});
|
});
|
||||||
|
|
||||||
updateMonitoringInterval(3L, TimeUnit.SECONDS);
|
enableMonitoringCollection();
|
||||||
waitForMonitoringIndices();
|
waitForMonitoringIndices();
|
||||||
|
|
||||||
assertBusy(() -> {
|
assertBusy(() -> {
|
||||||
|
|
|
@ -27,10 +27,6 @@ public abstract class LocalExporterIntegTestCase extends MonitoringIntegTestCase
|
||||||
|
|
||||||
private static ThreadPool THREADPOOL;
|
private static ThreadPool THREADPOOL;
|
||||||
|
|
||||||
public LocalExporterIntegTestCase() throws Exception {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void setupThreadPool() {
|
public static void setupThreadPool() {
|
||||||
THREADPOOL = new TestThreadPool(LocalExporterIntegTestCase.class.getName());
|
THREADPOOL = new TestThreadPool(LocalExporterIntegTestCase.class.getName());
|
||||||
|
@ -45,7 +41,8 @@ public abstract class LocalExporterIntegTestCase extends MonitoringIntegTestCase
|
||||||
|
|
||||||
protected Settings localExporterSettings() {
|
protected Settings localExporterSettings() {
|
||||||
return Settings.builder()
|
return Settings.builder()
|
||||||
.put(MonitoringService.INTERVAL.getKey(), "-1")
|
.put(MonitoringService.ENABLED.getKey(), false)
|
||||||
|
.put(MonitoringService.INTERVAL.getKey(), "3s")
|
||||||
.put("xpack.monitoring.exporters." + exporterName + ".type", LocalExporter.TYPE)
|
.put("xpack.monitoring.exporters." + exporterName + ".type", LocalExporter.TYPE)
|
||||||
.put("xpack.monitoring.exporters." + exporterName + ".enabled", false)
|
.put("xpack.monitoring.exporters." + exporterName + ".enabled", false)
|
||||||
.put("xpack.monitoring.exporters." + exporterName + ".cluster_alerts.management.enabled", false)
|
.put("xpack.monitoring.exporters." + exporterName + ".cluster_alerts.management.enabled", false)
|
||||||
|
|
|
@ -56,26 +56,22 @@ import static org.elasticsearch.xpack.core.monitoring.exporter.MonitoringTemplat
|
||||||
import static org.elasticsearch.xpack.core.monitoring.exporter.MonitoringTemplateUtils.TEMPLATE_VERSION;
|
import static org.elasticsearch.xpack.core.monitoring.exporter.MonitoringTemplateUtils.TEMPLATE_VERSION;
|
||||||
import static org.hamcrest.Matchers.greaterThan;
|
import static org.hamcrest.Matchers.greaterThan;
|
||||||
import static org.hamcrest.Matchers.is;
|
import static org.hamcrest.Matchers.is;
|
||||||
|
import static org.hamcrest.Matchers.lessThanOrEqualTo;
|
||||||
|
|
||||||
@ESIntegTestCase.ClusterScope(scope = ESIntegTestCase.Scope.SUITE,
|
@ESIntegTestCase.ClusterScope(scope = ESIntegTestCase.Scope.SUITE,
|
||||||
numDataNodes = 1, numClientNodes = 0, transportClientRatio = 0.0, supportsDedicatedMasters = false)
|
numDataNodes = 1, numClientNodes = 0, transportClientRatio = 0.0, supportsDedicatedMasters = false)
|
||||||
public class LocalExporterIntegTests extends LocalExporterIntegTestCase {
|
public class LocalExporterIntegTests extends LocalExporterIntegTestCase {
|
||||||
private final String indexTimeFormat = randomFrom("YY", "YYYY", "YYYY.MM", "YYYY-MM", "MM.YYYY", "MM", null);
|
private final String indexTimeFormat = randomFrom("YY", "YYYY", "YYYY.MM", "YYYY-MM", "MM.YYYY", "MM", null);
|
||||||
|
|
||||||
public LocalExporterIntegTests() throws Exception {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void stopMonitoring() {
|
private void stopMonitoring() {
|
||||||
// Now disabling the monitoring service, so that no more collection are started
|
// Now disabling the monitoring service, so that no more collection are started
|
||||||
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(
|
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(
|
||||||
Settings.builder().putNull(MonitoringService.INTERVAL.getKey())
|
Settings.builder().putNull(MonitoringService.ENABLED.getKey())
|
||||||
.putNull("xpack.monitoring.exporters._local.enabled")
|
.putNull("xpack.monitoring.exporters._local.enabled")
|
||||||
.putNull("xpack.monitoring.exporters._local.cluster_alerts.management.enabled")
|
.putNull("xpack.monitoring.exporters._local.cluster_alerts.management.enabled")
|
||||||
.putNull("xpack.monitoring.exporters._local.index.name.time_format")));
|
.putNull("xpack.monitoring.exporters._local.index.name.time_format")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@AwaitsFix(bugUrl = "https://github.com/elastic/x-pack-elasticsearch/issues/3954")
|
|
||||||
public void testExport() throws Exception {
|
public void testExport() throws Exception {
|
||||||
try {
|
try {
|
||||||
if (randomBoolean()) {
|
if (randomBoolean()) {
|
||||||
|
@ -90,7 +86,7 @@ public class LocalExporterIntegTests extends LocalExporterIntegTestCase {
|
||||||
|
|
||||||
// start the monitoring service so that _xpack/monitoring/_bulk is not ignored
|
// start the monitoring service so that _xpack/monitoring/_bulk is not ignored
|
||||||
final Settings.Builder exporterSettings = Settings.builder()
|
final Settings.Builder exporterSettings = Settings.builder()
|
||||||
.put(MonitoringService.INTERVAL.getKey(), 3L, TimeUnit.SECONDS)
|
.put(MonitoringService.ENABLED.getKey(), true)
|
||||||
.put("xpack.monitoring.exporters._local.enabled", true)
|
.put("xpack.monitoring.exporters._local.enabled", true)
|
||||||
.put("xpack.monitoring.exporters._local.cluster_alerts.management.enabled", false);
|
.put("xpack.monitoring.exporters._local.cluster_alerts.management.enabled", false);
|
||||||
|
|
||||||
|
@ -119,7 +115,7 @@ public class LocalExporterIntegTests extends LocalExporterIntegTestCase {
|
||||||
ensureYellowAndNoInitializingShards(".monitoring-*");
|
ensureYellowAndNoInitializingShards(".monitoring-*");
|
||||||
|
|
||||||
SearchResponse response = client().prepareSearch(".monitoring-*").get();
|
SearchResponse response = client().prepareSearch(".monitoring-*").get();
|
||||||
assertEquals(nbDocs, response.getHits().getTotalHits());
|
assertThat((long)nbDocs, lessThanOrEqualTo(response.getHits().getTotalHits()));
|
||||||
});
|
});
|
||||||
|
|
||||||
checkMonitoringTemplates();
|
checkMonitoringTemplates();
|
||||||
|
|
|
@ -41,6 +41,7 @@ import org.elasticsearch.xpack.core.monitoring.exporter.MonitoringTemplateUtils;
|
||||||
import org.elasticsearch.xpack.core.monitoring.MonitoredSystem;
|
import org.elasticsearch.xpack.core.monitoring.MonitoredSystem;
|
||||||
import org.elasticsearch.xpack.core.monitoring.MonitoringFeatureSetUsage;
|
import org.elasticsearch.xpack.core.monitoring.MonitoringFeatureSetUsage;
|
||||||
import org.elasticsearch.xpack.monitoring.LocalStateMonitoring;
|
import org.elasticsearch.xpack.monitoring.LocalStateMonitoring;
|
||||||
|
import org.elasticsearch.xpack.monitoring.MonitoringService;
|
||||||
import org.elasticsearch.xpack.monitoring.collector.cluster.ClusterStatsMonitoringDoc;
|
import org.elasticsearch.xpack.monitoring.collector.cluster.ClusterStatsMonitoringDoc;
|
||||||
import org.elasticsearch.xpack.monitoring.collector.indices.IndexRecoveryMonitoringDoc;
|
import org.elasticsearch.xpack.monitoring.collector.indices.IndexRecoveryMonitoringDoc;
|
||||||
import org.elasticsearch.xpack.monitoring.collector.indices.IndexStatsMonitoringDoc;
|
import org.elasticsearch.xpack.monitoring.collector.indices.IndexStatsMonitoringDoc;
|
||||||
|
@ -79,14 +80,12 @@ import static org.hamcrest.Matchers.nullValue;
|
||||||
|
|
||||||
public class MonitoringIT extends ESSingleNodeTestCase {
|
public class MonitoringIT extends ESSingleNodeTestCase {
|
||||||
|
|
||||||
private final TimeValue collectionInterval = TimeValue.timeValueSeconds(3);
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Settings nodeSettings() {
|
protected Settings nodeSettings() {
|
||||||
return Settings.builder()
|
return Settings.builder()
|
||||||
.put(super.nodeSettings())
|
.put(super.nodeSettings())
|
||||||
.put(XPackSettings.MACHINE_LEARNING_ENABLED.getKey(), false)
|
.put(XPackSettings.MACHINE_LEARNING_ENABLED.getKey(), false)
|
||||||
.put("xpack.monitoring.collection.interval", "-1")
|
.put("xpack.monitoring.collection.interval", MonitoringService.MIN_INTERVAL)
|
||||||
.put("xpack.monitoring.exporters._local.type", "local")
|
.put("xpack.monitoring.exporters._local.type", "local")
|
||||||
.put("xpack.monitoring.exporters._local.enabled", false)
|
.put("xpack.monitoring.exporters._local.enabled", false)
|
||||||
.put("xpack.monitoring.exporters._local.cluster_alerts.management.enabled", false)
|
.put("xpack.monitoring.exporters._local.cluster_alerts.management.enabled", false)
|
||||||
|
@ -221,7 +220,7 @@ public class MonitoringIT extends ESSingleNodeTestCase {
|
||||||
final Map<String, Object> searchHit = toMap(hit);
|
final Map<String, Object> searchHit = toMap(hit);
|
||||||
final String type = (String) extractValue("_source.type", searchHit);
|
final String type = (String) extractValue("_source.type", searchHit);
|
||||||
|
|
||||||
assertMonitoringDoc(searchHit, MonitoredSystem.ES, type, collectionInterval);
|
assertMonitoringDoc(searchHit, MonitoredSystem.ES, type, MonitoringService.MIN_INTERVAL);
|
||||||
|
|
||||||
if (ClusterStatsMonitoringDoc.TYPE.equals(type)) {
|
if (ClusterStatsMonitoringDoc.TYPE.equals(type)) {
|
||||||
assertClusterStatsMonitoringDoc(searchHit, createAPMIndex);
|
assertClusterStatsMonitoringDoc(searchHit, createAPMIndex);
|
||||||
|
@ -499,7 +498,7 @@ public class MonitoringIT extends ESSingleNodeTestCase {
|
||||||
*/
|
*/
|
||||||
private void whenExportersAreReady(final CheckedRunnable<Exception> runnable) throws Exception {
|
private void whenExportersAreReady(final CheckedRunnable<Exception> runnable) throws Exception {
|
||||||
try {
|
try {
|
||||||
enableMonitoring(collectionInterval);
|
enableMonitoring();
|
||||||
runnable.run();
|
runnable.run();
|
||||||
} finally {
|
} finally {
|
||||||
disableMonitoring();
|
disableMonitoring();
|
||||||
|
@ -510,31 +509,22 @@ public class MonitoringIT extends ESSingleNodeTestCase {
|
||||||
* Enable the monitoring service and the Local exporter, waiting for some monitoring documents
|
* Enable the monitoring service and the Local exporter, waiting for some monitoring documents
|
||||||
* to be indexed before it returns.
|
* to be indexed before it returns.
|
||||||
*/
|
*/
|
||||||
public void enableMonitoring(final TimeValue interval) throws Exception {
|
public void enableMonitoring() throws Exception {
|
||||||
// delete anything that may happen to already exist
|
// delete anything that may happen to already exist
|
||||||
assertAcked(client().admin().indices().prepareDelete(".monitoring-*").get());
|
assertAcked(client().admin().indices().prepareDelete(".monitoring-*").get());
|
||||||
|
|
||||||
final XPackUsageResponse usageResponse = new XPackUsageRequestBuilder(client()).execute().get();
|
assertThat("Must be no enabled exporters before enabling monitoring", getMonitoringUsageExporters().isEmpty(), is(true));
|
||||||
final Optional<MonitoringFeatureSetUsage> monitoringUsage =
|
|
||||||
usageResponse.getUsages()
|
|
||||||
.stream()
|
|
||||||
.filter(usage -> usage instanceof MonitoringFeatureSetUsage)
|
|
||||||
.map(usage -> (MonitoringFeatureSetUsage)usage)
|
|
||||||
.findFirst();
|
|
||||||
assertThat("Monitoring feature set does not exist", monitoringUsage.isPresent(), is(true));
|
|
||||||
|
|
||||||
final Map<String, Object> exporters = monitoringUsage.get().getExporters();
|
|
||||||
|
|
||||||
assertThat("List of enabled exporters must be empty before enabling monitoring", exporters.isEmpty(), is(true));
|
|
||||||
|
|
||||||
final Settings settings = Settings.builder()
|
final Settings settings = Settings.builder()
|
||||||
.put("xpack.monitoring.collection.interval", interval.getStringRep())
|
.put("xpack.monitoring.collection.enabled", true)
|
||||||
.put("xpack.monitoring.exporters._local.enabled", true)
|
.put("xpack.monitoring.exporters._local.enabled", true)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings));
|
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings));
|
||||||
|
|
||||||
assertBusy(() -> {
|
assertBusy(() -> {
|
||||||
|
assertThat("[_local] exporter not enabled yet", getMonitoringUsageExporters().isEmpty(), is(false));
|
||||||
|
|
||||||
assertThat("No monitoring documents yet",
|
assertThat("No monitoring documents yet",
|
||||||
client().prepareSearch(".monitoring-es-" + TEMPLATE_VERSION + "-*")
|
client().prepareSearch(".monitoring-es-" + TEMPLATE_VERSION + "-*")
|
||||||
.setSize(0)
|
.setSize(0)
|
||||||
|
@ -549,26 +539,15 @@ public class MonitoringIT extends ESSingleNodeTestCase {
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public void disableMonitoring() throws Exception {
|
public void disableMonitoring() throws Exception {
|
||||||
final Settings settings = Settings.builder()
|
final Settings settings = Settings.builder()
|
||||||
.put("xpack.monitoring.collection.interval", (String) null)
|
.putNull("xpack.monitoring.collection.enabled")
|
||||||
.put("xpack.monitoring.exporters._local.enabled", (String) null)
|
.putNull("xpack.monitoring.exporters._local.enabled")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings));
|
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(settings));
|
||||||
|
|
||||||
assertBusy(() -> {
|
assertBusy(() -> {
|
||||||
try {
|
try {
|
||||||
final XPackUsageResponse usageResponse = new XPackUsageRequestBuilder(client()).execute().get();
|
assertThat("Exporters are not yet stopped", getMonitoringUsageExporters().isEmpty(), is(true));
|
||||||
final Optional<MonitoringFeatureSetUsage> monitoringUsage =
|
|
||||||
usageResponse.getUsages()
|
|
||||||
.stream()
|
|
||||||
.filter(usage -> usage instanceof MonitoringFeatureSetUsage)
|
|
||||||
.map(usage -> (MonitoringFeatureSetUsage)usage)
|
|
||||||
.findFirst();
|
|
||||||
assertThat("Monitoring feature set does not exist", monitoringUsage.isPresent(), is(true));
|
|
||||||
|
|
||||||
final Map<String, Object> exporters = monitoringUsage.get().getExporters();
|
|
||||||
|
|
||||||
assertThat("Exporters are not yet stopped", exporters.isEmpty(), is(true));
|
|
||||||
|
|
||||||
// now wait until Monitoring has actually stopped
|
// now wait until Monitoring has actually stopped
|
||||||
final NodesStatsResponse response = client().admin().cluster().prepareNodesStats().clear().setThreadPool(true).get();
|
final NodesStatsResponse response = client().admin().cluster().prepareNodesStats().clear().setThreadPool(true).get();
|
||||||
|
@ -592,6 +571,20 @@ public class MonitoringIT extends ESSingleNodeTestCase {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Map<String, Object> getMonitoringUsageExporters() throws Exception {
|
||||||
|
final XPackUsageResponse usageResponse = new XPackUsageRequestBuilder(client()).execute().get();
|
||||||
|
final Optional<MonitoringFeatureSetUsage> monitoringUsage =
|
||||||
|
usageResponse.getUsages()
|
||||||
|
.stream()
|
||||||
|
.filter(usage -> usage instanceof MonitoringFeatureSetUsage)
|
||||||
|
.map(usage -> (MonitoringFeatureSetUsage)usage)
|
||||||
|
.findFirst();
|
||||||
|
|
||||||
|
assertThat("Monitoring feature set does not exist", monitoringUsage.isPresent(), is(true));
|
||||||
|
|
||||||
|
return monitoringUsage.get().getExporters();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the {@link SearchHit} content as a {@link Map} object.
|
* Returns the {@link SearchHit} content as a {@link Map} object.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -12,7 +12,6 @@ import org.elasticsearch.common.Strings;
|
||||||
import org.elasticsearch.common.collect.Tuple;
|
import org.elasticsearch.common.collect.Tuple;
|
||||||
import org.elasticsearch.common.regex.Regex;
|
import org.elasticsearch.common.regex.Regex;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
|
||||||
import org.elasticsearch.common.util.concurrent.CountDown;
|
import org.elasticsearch.common.util.concurrent.CountDown;
|
||||||
import org.elasticsearch.common.xcontent.XContentType;
|
import org.elasticsearch.common.xcontent.XContentType;
|
||||||
import org.elasticsearch.index.IndexNotFoundException;
|
import org.elasticsearch.index.IndexNotFoundException;
|
||||||
|
@ -49,22 +48,11 @@ public abstract class MonitoringIntegTestCase extends ESIntegTestCase {
|
||||||
protected static final String MONITORING_INDICES_PREFIX = ".monitoring-";
|
protected static final String MONITORING_INDICES_PREFIX = ".monitoring-";
|
||||||
protected static final String ALL_MONITORING_INDICES = MONITORING_INDICES_PREFIX + "*";
|
protected static final String ALL_MONITORING_INDICES = MONITORING_INDICES_PREFIX + "*";
|
||||||
|
|
||||||
public MonitoringIntegTestCase() throws Exception {
|
|
||||||
// super();
|
|
||||||
// // The XPackPlugin is sometimes not loaded by the time the plugin components are loaded
|
|
||||||
// // so we do this to ensure that we wont get a NPE
|
|
||||||
// Settings settings = Settings.builder()
|
|
||||||
// .put("path.home", createTempDir())
|
|
||||||
// .build();
|
|
||||||
//
|
|
||||||
// // These tests do not load this plugin yet before spinning up some nodes
|
|
||||||
// new XPackPlugin(settings, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Settings nodeSettings(int nodeOrdinal) {
|
protected Settings nodeSettings(int nodeOrdinal) {
|
||||||
Settings.Builder builder = Settings.builder()
|
Settings.Builder builder = Settings.builder()
|
||||||
.put(super.nodeSettings(nodeOrdinal))
|
.put(super.nodeSettings(nodeOrdinal))
|
||||||
|
.put(MonitoringService.INTERVAL.getKey(), MonitoringService.MIN_INTERVAL)
|
||||||
// .put(XPackSettings.SECURITY_ENABLED.getKey(), false)
|
// .put(XPackSettings.SECURITY_ENABLED.getKey(), false)
|
||||||
// .put(XPackSettings.WATCHER_ENABLED.getKey(), false)
|
// .put(XPackSettings.WATCHER_ENABLED.getKey(), false)
|
||||||
// Disable native ML autodetect_process as the c++ controller won't be available
|
// Disable native ML autodetect_process as the c++ controller won't be available
|
||||||
|
@ -229,12 +217,14 @@ public abstract class MonitoringIntegTestCase extends ESIntegTestCase {
|
||||||
assertThat(client().admin().indices().prepareExists(indices).get().isExists(), is(true));
|
assertThat(client().admin().indices().prepareExists(indices).get().isExists(), is(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void disableMonitoringInterval() {
|
protected void enableMonitoringCollection() {
|
||||||
updateMonitoringInterval(TimeValue.MINUS_ONE.millis(), TimeUnit.MILLISECONDS);
|
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(
|
||||||
|
Settings.builder().put(MonitoringService.ENABLED.getKey(), true)));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateMonitoringInterval(long value, TimeUnit timeUnit) {
|
protected void disableMonitoringCollection() {
|
||||||
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(
|
assertAcked(client().admin().cluster().prepareUpdateSettings().setTransientSettings(
|
||||||
Settings.builder().put(MonitoringService.INTERVAL.getKey(), value, timeUnit)));
|
Settings.builder().putNull(MonitoringService.ENABLED.getKey())));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,7 +129,8 @@ public class XPackRestIT extends ESClientYamlSuiteTestCase {
|
||||||
XContentMapValues.extractRawValues("monitoring.enabled_exporters", exporters), hasSize(0));
|
XContentMapValues.extractRawValues("monitoring.enabled_exporters", exporters), hasSize(0));
|
||||||
|
|
||||||
final Map<String, Object> settings = new HashMap<>();
|
final Map<String, Object> settings = new HashMap<>();
|
||||||
settings.put("xpack.monitoring.collection.interval", "3s");
|
settings.put("xpack.monitoring.collection.enabled", true);
|
||||||
|
settings.put("xpack.monitoring.collection.interval", "1s");
|
||||||
settings.put("xpack.monitoring.exporters._local.enabled", true);
|
settings.put("xpack.monitoring.exporters._local.enabled", true);
|
||||||
|
|
||||||
awaitCallApi("cluster.put_settings", emptyMap(),
|
awaitCallApi("cluster.put_settings", emptyMap(),
|
||||||
|
@ -151,6 +152,7 @@ public class XPackRestIT extends ESClientYamlSuiteTestCase {
|
||||||
private void disableMonitoring() throws Exception {
|
private void disableMonitoring() throws Exception {
|
||||||
if (isMonitoringTest()) {
|
if (isMonitoringTest()) {
|
||||||
final Map<String, Object> settings = new HashMap<>();
|
final Map<String, Object> settings = new HashMap<>();
|
||||||
|
settings.put("xpack.monitoring.collection.enabled", null);
|
||||||
settings.put("xpack.monitoring.collection.interval", null);
|
settings.put("xpack.monitoring.collection.interval", null);
|
||||||
settings.put("xpack.monitoring.exporters._local.enabled", null);
|
settings.put("xpack.monitoring.exporters._local.enabled", null);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue