Metrics idle timeout is now configurable (#2752)

Signed-off-by: Giuseppe Bertone <bertone.giuseppe@gmail.com>
pull/2746/head
Giuseppe Bertone 3 years ago committed by GitHub
parent 75324f3817
commit ce1c8ef22c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 18
      besu/src/main/java/org/hyperledger/besu/cli/options/unstable/MetricsCLIOptions.java
  2. 3
      besu/src/test/java/org/hyperledger/besu/cli/options/MetricsCLIOptionsTest.java
  3. 33
      metrics/core/src/main/java/org/hyperledger/besu/metrics/prometheus/MetricsConfiguration.java
  4. 2
      metrics/core/src/main/java/org/hyperledger/besu/metrics/prometheus/MetricsHttpService.java

@ -24,13 +24,22 @@ import picocli.CommandLine;
public class MetricsCLIOptions implements CLIOptions<MetricsConfiguration.Builder> { public class MetricsCLIOptions implements CLIOptions<MetricsConfiguration.Builder> {
private static final String TIMERS_ENABLED_FLAG = "--Xmetrics-timers-enabled"; private static final String TIMERS_ENABLED_FLAG = "--Xmetrics-timers-enabled";
private static final String IDLE_TIMEOUT_FLAG = "--Xmetrics-idle-timeout";
@CommandLine.Option( @CommandLine.Option(
names = TIMERS_ENABLED_FLAG, names = TIMERS_ENABLED_FLAG,
hidden = true, hidden = true,
defaultValue = "true", defaultValue = "true",
description = "Whether to enable timer metrics (default: ${DEFAULT-VALUE}).") description = "Whether to enable timer metrics (default: ${DEFAULT-VALUE}).")
private Boolean timersEnabled = MetricsConfiguration.DEFAULT_TIMERS_ENABLED; private Boolean timersEnabled = MetricsConfiguration.DEFAULT_METRICS_TIMERS_ENABLED;
@CommandLine.Option(
hidden = true,
names = {IDLE_TIMEOUT_FLAG},
paramLabel = "<INTEGER>",
description = "Timeout for metrics TCP connections, in seconds (default: ${DEFAULT-VALUE})",
arity = "1")
private int idleTimeout = MetricsConfiguration.DEFAULT_METRICS_IDLE_TIMEOUT_SECONDS;
private MetricsCLIOptions() {} private MetricsCLIOptions() {}
@ -41,16 +50,19 @@ public class MetricsCLIOptions implements CLIOptions<MetricsConfiguration.Builde
public static MetricsCLIOptions fromConfiguration(final MetricsConfiguration config) { public static MetricsCLIOptions fromConfiguration(final MetricsConfiguration config) {
final MetricsCLIOptions metricsOptions = create(); final MetricsCLIOptions metricsOptions = create();
metricsOptions.timersEnabled = config.isTimersEnabled(); metricsOptions.timersEnabled = config.isTimersEnabled();
metricsOptions.idleTimeout = config.getIdleTimeout();
return metricsOptions; return metricsOptions;
} }
@Override @Override
public MetricsConfiguration.Builder toDomainObject() { public MetricsConfiguration.Builder toDomainObject() {
return MetricsConfiguration.builder().timersEnabled(timersEnabled); return MetricsConfiguration.builder().timersEnabled(timersEnabled).idleTimeout(idleTimeout);
} }
@Override @Override
public List<String> getCLIOptions() { public List<String> getCLIOptions() {
return Arrays.asList(TIMERS_ENABLED_FLAG + "=" + timersEnabled.toString()); return Arrays.asList(
TIMERS_ENABLED_FLAG + "=" + timersEnabled.toString(),
IDLE_TIMEOUT_FLAG + "=" + idleTimeout);
} }
} }

@ -28,7 +28,8 @@ public class MetricsCLIOptionsTest
@Override @Override
MetricsConfiguration.Builder createCustomizedDomainObject() { MetricsConfiguration.Builder createCustomizedDomainObject() {
return MetricsConfiguration.builder() return MetricsConfiguration.builder()
.timersEnabled(!MetricsConfiguration.DEFAULT_TIMERS_ENABLED); .timersEnabled(!MetricsConfiguration.DEFAULT_METRICS_TIMERS_ENABLED)
.idleTimeout(MetricsConfiguration.DEFAULT_METRICS_IDLE_TIMEOUT_SECONDS);
} }
@Override @Override

@ -34,7 +34,8 @@ public class MetricsConfiguration {
private static final MetricsProtocol DEFAULT_METRICS_PROTOCOL = MetricsProtocol.PROMETHEUS; private static final MetricsProtocol DEFAULT_METRICS_PROTOCOL = MetricsProtocol.PROMETHEUS;
private static final String DEFAULT_METRICS_PUSH_HOST = "127.0.0.1"; private static final String DEFAULT_METRICS_PUSH_HOST = "127.0.0.1";
public static final int DEFAULT_METRICS_PUSH_PORT = 9001; public static final int DEFAULT_METRICS_PUSH_PORT = 9001;
public static final Boolean DEFAULT_TIMERS_ENABLED = true; public static final Boolean DEFAULT_METRICS_TIMERS_ENABLED = true;
public static final int DEFAULT_METRICS_IDLE_TIMEOUT_SECONDS = 60;
private final boolean enabled; private final boolean enabled;
private final MetricsProtocol protocol; private final MetricsProtocol protocol;
@ -49,6 +50,7 @@ public class MetricsConfiguration {
private final String prometheusJob; private final String prometheusJob;
private final List<String> hostsAllowlist; private final List<String> hostsAllowlist;
private final boolean timersEnabled; private final boolean timersEnabled;
private final int idleTimeout;
public static Builder builder() { public static Builder builder() {
return new Builder(); return new Builder();
@ -66,7 +68,8 @@ public class MetricsConfiguration {
final int pushInterval, final int pushInterval,
final String prometheusJob, final String prometheusJob,
final List<String> hostsAllowlist, final List<String> hostsAllowlist,
final boolean timersEnabled) { final boolean timersEnabled,
final int idleTimeout) {
this.enabled = enabled; this.enabled = enabled;
this.port = port; this.port = port;
this.protocol = protocol; this.protocol = protocol;
@ -79,6 +82,7 @@ public class MetricsConfiguration {
this.prometheusJob = prometheusJob; this.prometheusJob = prometheusJob;
this.hostsAllowlist = hostsAllowlist; this.hostsAllowlist = hostsAllowlist;
this.timersEnabled = timersEnabled; this.timersEnabled = timersEnabled;
this.idleTimeout = idleTimeout;
} }
public boolean isEnabled() { public boolean isEnabled() {
@ -143,6 +147,10 @@ public class MetricsConfiguration {
return timersEnabled; return timersEnabled;
} }
public int getIdleTimeout() {
return idleTimeout;
}
@Override @Override
public String toString() { public String toString() {
return MoreObjects.toStringHelper(this) return MoreObjects.toStringHelper(this)
@ -157,6 +165,8 @@ public class MetricsConfiguration {
.add("pushInterval", pushInterval) .add("pushInterval", pushInterval)
.add("prometheusJob", prometheusJob) .add("prometheusJob", prometheusJob)
.add("hostsAllowlist", hostsAllowlist) .add("hostsAllowlist", hostsAllowlist)
.add("timersEnabled", timersEnabled)
.add("idleTimeout", idleTimeout)
.toString(); .toString();
} }
@ -179,7 +189,9 @@ public class MetricsConfiguration {
&& Objects.equals(metricCategories, that.metricCategories) && Objects.equals(metricCategories, that.metricCategories)
&& Objects.equals(pushHost, that.pushHost) && Objects.equals(pushHost, that.pushHost)
&& Objects.equals(prometheusJob, that.prometheusJob) && Objects.equals(prometheusJob, that.prometheusJob)
&& Objects.equals(hostsAllowlist, that.hostsAllowlist); && Objects.equals(hostsAllowlist, that.hostsAllowlist)
&& timersEnabled == that.timersEnabled
&& idleTimeout == that.idleTimeout;
} }
@Override @Override
@ -195,7 +207,9 @@ public class MetricsConfiguration {
pushHost, pushHost,
pushInterval, pushInterval,
prometheusJob, prometheusJob,
hostsAllowlist); hostsAllowlist,
timersEnabled,
idleTimeout);
} }
public static class Builder { public static class Builder {
@ -210,7 +224,8 @@ public class MetricsConfiguration {
private int pushInterval = 15; private int pushInterval = 15;
private String prometheusJob = "besu-client"; private String prometheusJob = "besu-client";
private List<String> hostsAllowlist = Arrays.asList("localhost", "127.0.0.1"); private List<String> hostsAllowlist = Arrays.asList("localhost", "127.0.0.1");
private boolean timersEnabled = DEFAULT_TIMERS_ENABLED; private boolean timersEnabled = DEFAULT_METRICS_TIMERS_ENABLED;
private int idleTimeout = DEFAULT_METRICS_IDLE_TIMEOUT_SECONDS;
private Builder() {} private Builder() {}
@ -281,6 +296,11 @@ public class MetricsConfiguration {
return this; return this;
} }
public Builder idleTimeout(final int idleTimeout) {
this.idleTimeout = idleTimeout;
return this;
}
public MetricsConfiguration build() { public MetricsConfiguration build() {
return new MetricsConfiguration( return new MetricsConfiguration(
enabled, enabled,
@ -294,7 +314,8 @@ public class MetricsConfiguration {
pushInterval, pushInterval,
prometheusJob, prometheusJob,
hostsAllowlist, hostsAllowlist,
timersEnabled); timersEnabled,
idleTimeout);
} }
} }
} }

@ -84,7 +84,7 @@ public class MetricsHttpService implements MetricsService {
new HttpServerOptions() new HttpServerOptions()
.setHost(config.getHost()) .setHost(config.getHost())
.setPort(config.getPort()) .setPort(config.getPort())
.setIdleTimeout(60) .setIdleTimeout(config.getIdleTimeout())
.setHandle100ContinueAutomatically(true) .setHandle100ContinueAutomatically(true)
.setCompressionSupported(true)); .setCompressionSupported(true));

Loading…
Cancel
Save