Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions docs/reference/monitoring/configuring-monitoring.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@ indices. You can also adjust how monitoring data is displayed.

. To collect monitoring data about your {es} cluster:

.. Verify that the `xpack.monitoring.enabled` and
`xpack.monitoring.collection.enabled` settings are `true` on each node in the
cluster. By default, data collection is disabled. For more information, see
<<monitoring-settings>>.
.. Verify that the `xpack.monitoring.enabled`,
`xpack.monitoring.collection.enabled`, and
`xpack.monitoring.elasticsearch.collection.enabled` settings are `true` on each
node in the cluster. By default xpack.monitoring.collection.enabled is disabled
(`false`), and that overrides xpack.monitoring.elasticsearch.collection.enabled,
which defaults to being enabled (`true`). Both settings can be set dynamically
at runtime. For more information, see <<monitoring-settings>>.

.. Optional: Specify which indices you want to monitor.
+
Expand Down
10 changes: 10 additions & 0 deletions docs/reference/monitoring/pause-export.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,16 @@ monitoring data from other sources such as {kib}, Beats, and Logstash is ignored
You can update this setting by using the
{ref}/cluster-update-settings.html[Cluster Update Settings API].

If you want to collect data from sources such as {kib}, Beats, and Logstash but
not collect data about your {es} cluster, you can disable data collection
just for {es}:

[source,yaml]
---------------------------------------------------
xpack.monitoring.collection.enabled: true
xpack.monitoring.elasticsearch.collection.enabled: false
---------------------------------------------------

If you want to separately disable a specific exporter, you can specify the
`enabled` setting (which defaults to `true`) per exporter. For example:

Expand Down
11 changes: 11 additions & 0 deletions docs/reference/settings/monitoring-settings.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,17 @@ option in `kibana.yml` to the same value.
You can update this setting through the
<<cluster-update-settings,Cluster Update Settings API>>.

`xpack.monitoring.elasticsearch.collection.enabled`::

Controls whether statistics about your {es} cluster should be collected. Defaults to `true`.
This is different from xpack.monitoring.collection.enabled, which allows you to enable or disable
all monitoring collection. However, this setting simply disables the collection of Elasticsearch
data while still allowing other data (e.g., Kibana, Logstash, Beats, or APM Server monitoring data)
to pass through this cluster.
+
You can update this setting through the
<<cluster-update-settings,Cluster Update Settings API>>.

`xpack.monitoring.collection.cluster.stats.timeout`::

Sets the timeout for collecting the cluster statistics. Defaults to `10s`.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ public List<Setting<?>> getSettings() {
settings.add(MonitoringField.HISTORY_DURATION);
settings.add(CLEAN_WATCHER_HISTORY);
settings.add(MonitoringService.ENABLED);
settings.add(MonitoringService.ELASTICSEARCH_COLLECTION_ENABLED);
settings.add(MonitoringService.INTERVAL);
settings.add(Collector.INDICES);
settings.add(ClusterStatsCollector.CLUSTER_STATS_TIMEOUT);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,21 @@ public class MonitoringService extends AbstractLifecycleComponent {
*/
public static final TimeValue MIN_INTERVAL = TimeValue.timeValueSeconds(1L);

/*
* Dynamically controls enabling or disabling the collection of Monitoring data only from Elasticsearch.
* <p>
* This should only be used while transitioning to Metricbeat-based data collection for Elasticsearch with
* {@linkplain #ENABLED} set to {@code true}. By setting this to {@code false} and that value to {@code true},
* Kibana, Logstash, Beats, and APM Server can all continue to report their stats through this cluster until they
* are transitioned to being monitored by Metricbeat as well.
*/
public static final Setting<Boolean> ELASTICSEARCH_COLLECTION_ENABLED =
Setting.boolSetting("xpack.monitoring.elasticsearch.collection.enabled", true,
Setting.Property.Dynamic, Setting.Property.NodeScope);

/**
* Dynamically controls enabling or disabling the collection of Monitoring data.
* Dynamically controls enabling or disabling the collection of Monitoring data from Elasticsearch as well as other products
* in the stack.
*/
public static final Setting<Boolean> ENABLED =
Setting.boolSetting("xpack.monitoring.collection.enabled", false,
Expand All @@ -68,6 +81,7 @@ public class MonitoringService extends AbstractLifecycleComponent {
private final Set<Collector> collectors;
private final Exporters exporters;

private volatile boolean elasticsearchCollectionEnabled;
private volatile boolean enabled;
private volatile TimeValue interval;
private volatile ThreadPool.Cancellable scheduler;
Expand All @@ -79,13 +93,21 @@ public class MonitoringService extends AbstractLifecycleComponent {
this.threadPool = Objects.requireNonNull(threadPool);
this.collectors = Objects.requireNonNull(collectors);
this.exporters = Objects.requireNonNull(exporters);
this.elasticsearchCollectionEnabled = ELASTICSEARCH_COLLECTION_ENABLED.get(settings);
this.enabled = ENABLED.get(settings);
this.interval = INTERVAL.get(settings);

clusterService.getClusterSettings()
.addSettingsUpdateConsumer(ELASTICSEARCH_COLLECTION_ENABLED, this::setElasticsearchCollectionEnabled);
clusterService.getClusterSettings().addSettingsUpdateConsumer(ENABLED, this::setMonitoringActive);
clusterService.getClusterSettings().addSettingsUpdateConsumer(INTERVAL, this::setInterval);
}

void setElasticsearchCollectionEnabled(final boolean enabled) {
this.elasticsearchCollectionEnabled = enabled;
scheduleExecution();
}

void setMonitoringActive(final boolean enabled) {
this.enabled = enabled;
scheduleExecution();
Expand All @@ -104,6 +126,14 @@ public boolean isMonitoringActive() {
return isStarted() && enabled;
}

boolean isElasticsearchCollectionEnabled() {
return this.elasticsearchCollectionEnabled;
}

boolean shouldScheduleExecution() {
return isElasticsearchCollectionEnabled() && isMonitoringActive();
}

private String threadPoolName() {
return ThreadPool.Names.GENERIC;
}
Expand Down Expand Up @@ -155,7 +185,7 @@ void scheduleExecution() {
if (scheduler != null) {
cancelExecution();
}
if (isMonitoringActive()) {
if (shouldScheduleExecution()) {
scheduler = threadPool.scheduleWithFixedDelay(monitor, interval, threadPoolName());
}
}
Expand Down Expand Up @@ -188,7 +218,7 @@ class MonitoringExecution extends AbstractRunnable implements Closeable {

@Override
public void doRun() {
if (isMonitoringActive() == false) {
if (shouldScheduleExecution() == false) {
logger.debug("monitoring execution is skipped");
return;
}
Expand Down Expand Up @@ -223,7 +253,7 @@ protected void doRun() throws Exception {
new ParameterizedMessage("monitoring collector [{}] failed to collect data", collector.name()), e);
}
}
if (isMonitoringActive()) {
if (shouldScheduleExecution()) {
exporters.export(results, ActionListener.wrap(r -> semaphore.release(), this::onFailure));
} else {
semaphore.release();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,4 +182,4 @@ public void testDoCollect() throws Exception {
assertThat(recoveries.shardRecoveryStates().size(), equalTo(nbRecoveries));
}
}
}
}