From cbd9681e3e3d51f7811c603495634d5583fb5c48 Mon Sep 17 00:00:00 2001 From: Jon Chambers <jon@signal.org> Date: Tue, 1 Jun 2021 12:10:44 -0400 Subject: [PATCH] Configure histograms and exclude high-cardinality metrics. --- .../textsecuregcm/WhisperServerService.java | 24 +++++++++++++++---- .../metrics/MetricsRequestEventListener.java | 24 +++++++++---------- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java index 4d47e029f..98b051d98 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java @@ -39,6 +39,8 @@ import io.dropwizard.setup.Bootstrap; import io.dropwizard.setup.Environment; import io.lettuce.core.resource.ClientResources; import io.micrometer.core.instrument.Clock; +import io.micrometer.core.instrument.Meter; +import io.micrometer.core.instrument.Meter.Id; import io.micrometer.core.instrument.Metrics; import io.micrometer.core.instrument.config.MeterFilter; import io.micrometer.core.instrument.distribution.DistributionStatisticConfig; @@ -122,6 +124,7 @@ import org.whispersystems.textsecuregcm.metrics.FreeMemoryGauge; import org.whispersystems.textsecuregcm.metrics.GarbageCollectionGauges; import org.whispersystems.textsecuregcm.metrics.MaxFileDescriptorGauge; import org.whispersystems.textsecuregcm.metrics.MetricsApplicationEventListener; +import org.whispersystems.textsecuregcm.metrics.MetricsRequestEventListener; import org.whispersystems.textsecuregcm.metrics.NetworkReceivedGauge; import org.whispersystems.textsecuregcm.metrics.NetworkSentGauge; import org.whispersystems.textsecuregcm.metrics.NstatCounters; @@ -244,8 +247,13 @@ public class WhisperServerService extends Application<WhisperServerConfiguration @Override public void run(WhisperServerConfiguration config, Environment environment) throws Exception { + SharedMetricRegistries.add(Constants.METRICS_NAME, environment.metrics()); + final DistributionStatisticConfig defaultDistributionStatisticConfig = DistributionStatisticConfig.builder() + .percentiles(.75, .95, .99, .999) + .build(); + final WavefrontConfig wavefrontConfig = new WavefrontConfig() { @Override public String get(final String key) { @@ -266,10 +274,7 @@ public class WhisperServerService extends Application<WhisperServerConfiguration Metrics.addRegistry(new WavefrontMeterRegistry(wavefrontConfig, Clock.SYSTEM) { @Override protected DistributionStatisticConfig defaultHistogramConfig() { - return DistributionStatisticConfig.builder() - .percentiles(.75, .95, .99, .999) - .build() - .merge(super.defaultHistogramConfig()); + return defaultDistributionStatisticConfig.merge(super.defaultHistogramConfig()); } }); @@ -286,6 +291,17 @@ public class WhisperServerService extends Application<WhisperServerConfiguration } }, Clock.SYSTEM); + datadogMeterRegistry.config().meterFilter(new MeterFilter() { + @Override + public DistributionStatisticConfig configure(final Id id, final DistributionStatisticConfig config) { + return defaultDistributionStatisticConfig.merge(config); + } + }) + .meterFilter(MeterFilter.denyNameStartsWith(MetricsRequestEventListener.REQUEST_COUNTER_NAME)) + .meterFilter(MeterFilter.denyNameStartsWith(MetricsRequestEventListener.ANDROID_REQUEST_COUNTER_NAME)) + .meterFilter(MeterFilter.denyNameStartsWith(MetricsRequestEventListener.DESKTOP_REQUEST_COUNTER_NAME)) + .meterFilter(MeterFilter.denyNameStartsWith(MetricsRequestEventListener.IOS_REQUEST_COUNTER_NAME)); + Metrics.addRegistry(datadogMeterRegistry); } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/MetricsRequestEventListener.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/MetricsRequestEventListener.java index 2998de2e9..001351594 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/MetricsRequestEventListener.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/MetricsRequestEventListener.java @@ -29,18 +29,18 @@ import java.util.regex.Pattern; /** * Gathers and reports request-level metrics. */ -class MetricsRequestEventListener implements RequestEventListener { - - static final String REQUEST_COUNTER_NAME = MetricRegistry.name(MetricsRequestEventListener.class, "request"); - static final String PATH_TAG = "path"; - static final String STATUS_CODE_TAG = "status"; - static final String TRAFFIC_SOURCE_TAG = "trafficSource"; - - static final String ANDROID_REQUEST_COUNTER_NAME = MetricRegistry.name(MetricsRequestEventListener.class, "androidRequest"); - static final String DESKTOP_REQUEST_COUNTER_NAME = MetricRegistry.name(MetricsRequestEventListener.class, "desktopRequest"); - static final String IOS_REQUEST_COUNTER_NAME = MetricRegistry.name(MetricsRequestEventListener.class, "iosRequest"); - static final String OS_TAG = "os"; - static final String SDK_TAG = "sdkVersion"; +public class MetricsRequestEventListener implements RequestEventListener { + + public static final String REQUEST_COUNTER_NAME = MetricRegistry.name(MetricsRequestEventListener.class, "request"); + public static final String ANDROID_REQUEST_COUNTER_NAME = MetricRegistry.name(MetricsRequestEventListener.class, "androidRequest"); + public static final String DESKTOP_REQUEST_COUNTER_NAME = MetricRegistry.name(MetricsRequestEventListener.class, "desktopRequest"); + public static final String IOS_REQUEST_COUNTER_NAME = MetricRegistry.name(MetricsRequestEventListener.class, "iosRequest"); + + static final String PATH_TAG = "path"; + static final String STATUS_CODE_TAG = "status"; + static final String TRAFFIC_SOURCE_TAG = "trafficSource"; + static final String OS_TAG = "os"; + static final String SDK_TAG = "sdkVersion"; private static final Set<String> ACCEPTABLE_DESKTOP_OS_STRINGS = Set.of("linux", "macos", "windows"); -- GitLab