diff --git a/service/pom.xml b/service/pom.xml index d15272975..ecfe85989 100644 --- a/service/pom.xml +++ b/service/pom.xml @@ -86,6 +86,18 @@ 1.5.2 + + io.micrometer + micrometer-registry-signalfx + 1.5.3 + + + + com.signalfx.public + signalfx-codahale + 1.0.4 + + org.coursera dropwizard-metrics-datadog diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java index cd875e59b..897c1f4e9 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java @@ -42,8 +42,6 @@ import io.dropwizard.db.PooledDataSourceFactory; import io.dropwizard.jdbi3.JdbiFactory; import io.dropwizard.setup.Bootstrap; import io.dropwizard.setup.Environment; -import io.lettuce.core.RedisURI; -import io.lettuce.core.cluster.RedisClusterClient; import io.micrometer.core.instrument.Clock; import io.micrometer.core.instrument.ImmutableTag; import io.micrometer.core.instrument.Meter; @@ -52,6 +50,8 @@ import io.micrometer.core.instrument.Tag; import io.micrometer.core.instrument.distribution.DistributionStatisticConfig; import io.micrometer.datadog.DatadogConfig; import io.micrometer.datadog.DatadogMeterRegistry; +import io.micrometer.signalfx.SignalFxConfig; +import io.micrometer.signalfx.SignalFxMeterRegistry; import io.micrometer.wavefront.WavefrontConfig; import io.micrometer.wavefront.WavefrontMeterRegistry; import org.bouncycastle.jce.provider.BouncyCastleProvider; @@ -173,7 +173,6 @@ import java.util.EnumSet; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.stream.Collectors; import static com.codahale.metrics.MetricRegistry.name; @@ -223,6 +222,7 @@ public class WhisperServerService extends Application micrometerConfigurationByName = config.getMicrometerConfiguration(); @@ -261,8 +261,6 @@ public class WhisperServerService extends Application getConventionTags(@Nonnull Meter.Id id) { + final List tags = super.getConventionTags(id); + tags.add(new ImmutableTag("environment", micrometerSignalfxConfig.getEnvironment())); + return tags; + } + + @Override + protected DistributionStatisticConfig defaultHistogramConfig() { + return DistributionStatisticConfig.builder() + .percentiles(.75, .95, .99, .999) + .build() + .merge(super.defaultHistogramConfig()); + } + }); + } + environment.getObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); environment.getObjectMapper().setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE); environment.getObjectMapper().setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/SignalSignalfxReporterFactory.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/SignalSignalfxReporterFactory.java new file mode 100644 index 000000000..c44c8eb6d --- /dev/null +++ b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/SignalSignalfxReporterFactory.java @@ -0,0 +1,33 @@ +package org.whispersystems.textsecuregcm.metrics; + +import com.amazonaws.util.EC2MetadataUtils; +import com.codahale.metrics.MetricRegistry; +import com.codahale.metrics.ScheduledReporter; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.signalfx.codahale.reporter.SignalFxReporter; +import com.signalfx.metrics.auth.StaticAuthToken; +import io.dropwizard.metrics.BaseReporterFactory; + +import javax.validation.constraints.NotEmpty; + +@JsonTypeName("signalsignalfx") +public class SignalSignalfxReporterFactory extends BaseReporterFactory { + + @JsonProperty + @NotEmpty + private String authToken = null; + + @JsonProperty + @NotEmpty + private String environment = null; + + public ScheduledReporter build(MetricRegistry registry) { + return new SignalFxReporter.Builder(registry, new StaticAuthToken(authToken), EC2MetadataUtils.getInstanceId()) + .addDimension("environment", environment) + .setFilter(getFilter()) + .setDurationUnit(getDurationUnit()) + .setRateUnit(getRateUnit()) + .build(); + } +} diff --git a/service/src/main/resources/META-INF/services/io.dropwizard.metrics.ReporterFactory b/service/src/main/resources/META-INF/services/io.dropwizard.metrics.ReporterFactory index be127b6fd..1a5808380 100644 --- a/service/src/main/resources/META-INF/services/io.dropwizard.metrics.ReporterFactory +++ b/service/src/main/resources/META-INF/services/io.dropwizard.metrics.ReporterFactory @@ -1,2 +1,3 @@ org.whispersystems.textsecuregcm.metrics.JsonMetricsReporterFactory org.whispersystems.textsecuregcm.metrics.SignalDatadogReporterFactory +org.whispersystems.textsecuregcm.metrics.SignalSignalfxReporterFactory