Add support for reporting metrics to signalfx (#129)
This commit is contained in:
parent
38293efe75
commit
ea00224e7f
|
@ -86,6 +86,18 @@
|
|||
<version>1.5.2</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.micrometer</groupId>
|
||||
<artifactId>micrometer-registry-signalfx</artifactId>
|
||||
<version>1.5.3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.signalfx.public</groupId>
|
||||
<artifactId>signalfx-codahale</artifactId>
|
||||
<version>1.0.4</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.coursera</groupId>
|
||||
<artifactId>dropwizard-metrics-datadog</artifactId>
|
||||
|
|
|
@ -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<WhisperServerConfiguration
|
|||
public void run(WhisperServerConfiguration config, Environment environment)
|
||||
throws Exception
|
||||
{
|
||||
final String instanceId = EC2MetadataUtils.getInstanceId();
|
||||
SharedMetricRegistries.add(Constants.METRICS_NAME, environment.metrics());
|
||||
|
||||
final Map<String, MicrometerConfiguration> micrometerConfigurationByName = config.getMicrometerConfiguration();
|
||||
|
@ -261,8 +261,6 @@ public class WhisperServerService extends Application<WhisperServerConfiguration
|
|||
|
||||
{
|
||||
final MicrometerConfiguration micrometerDatadogConfig = micrometerConfigurationByName.get("datadog");
|
||||
|
||||
final String instanceId = EC2MetadataUtils.getInstanceId();
|
||||
Metrics.addRegistry(new DatadogMeterRegistry(new DatadogConfig() {
|
||||
@Override
|
||||
public String get(final String key) {
|
||||
|
@ -296,6 +294,41 @@ public class WhisperServerService extends Application<WhisperServerConfiguration
|
|||
});
|
||||
}
|
||||
|
||||
{
|
||||
final MicrometerConfiguration micrometerSignalfxConfig = micrometerConfigurationByName.get("signalfx");
|
||||
Metrics.addRegistry(new SignalFxMeterRegistry(new SignalFxConfig() {
|
||||
@Override
|
||||
public String get(String key) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String accessToken() {
|
||||
return micrometerSignalfxConfig.getApiKey();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String source() {
|
||||
return instanceId;
|
||||
}
|
||||
}, Clock.SYSTEM) {
|
||||
@Override
|
||||
protected List<Tag> getConventionTags(@Nonnull Meter.Id id) {
|
||||
final List<Tag> 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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -1,2 +1,3 @@
|
|||
org.whispersystems.textsecuregcm.metrics.JsonMetricsReporterFactory
|
||||
org.whispersystems.textsecuregcm.metrics.SignalDatadogReporterFactory
|
||||
org.whispersystems.textsecuregcm.metrics.SignalSignalfxReporterFactory
|
||||
|
|
Loading…
Reference in New Issue