mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-20 11:48:07 +01:00
Add support for reporting metrics to signalfx (#129)
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user