diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java index 4d47e029f1cf1a5b75fe430ed5e811275a88d0a0..98b051d98e53e34a7f0303d3efdf113b5c593c95 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 2998de2e9275ee8f0719d9cd374ab60f6aa7c345..001351594e99cd01ecc821425149409eac39d8a1 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");