Add configuration for Datadog UDP transport

This commit is contained in:
Chris Eager 2023-07-24 10:43:07 -05:00 committed by Chris Eager
parent 2d132128e1
commit f53743d287
2 changed files with 27 additions and 1 deletions

View File

@ -24,6 +24,9 @@ metrics:
- "service:chat" - "service:chat"
transport: transport:
apiKey: secret://datadog.apiKey apiKey: secret://datadog.apiKey
udpTransport:
statsdHost: localhost
port: 8125
excludesAttributes: excludesAttributes:
- m1_rate - m1_rate
- m5_rate - m5_rate

View File

@ -19,7 +19,9 @@ import io.dropwizard.util.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.List; import java.util.List;
import java.util.Optional;
import javax.validation.Valid; import javax.validation.Valid;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import org.coursera.metrics.datadog.DatadogReporter; import org.coursera.metrics.datadog.DatadogReporter;
import org.coursera.metrics.datadog.DatadogReporter.Expansion; import org.coursera.metrics.datadog.DatadogReporter.Expansion;
@ -27,6 +29,8 @@ import org.coursera.metrics.datadog.DefaultMetricNameFormatterFactory;
import org.coursera.metrics.datadog.DynamicTagsCallbackFactory; import org.coursera.metrics.datadog.DynamicTagsCallbackFactory;
import org.coursera.metrics.datadog.MetricNameFormatterFactory; import org.coursera.metrics.datadog.MetricNameFormatterFactory;
import org.coursera.metrics.datadog.transport.HttpTransport; import org.coursera.metrics.datadog.transport.HttpTransport;
import org.coursera.metrics.datadog.transport.Transport;
import org.coursera.metrics.datadog.transport.UdpTransport;
import org.whispersystems.textsecuregcm.WhisperServerVersion; import org.whispersystems.textsecuregcm.WhisperServerVersion;
import org.whispersystems.textsecuregcm.configuration.secrets.SecretString; import org.whispersystems.textsecuregcm.configuration.secrets.SecretString;
import org.whispersystems.textsecuregcm.util.HostnameUtil; import org.whispersystems.textsecuregcm.util.HostnameUtil;
@ -54,6 +58,11 @@ public class SignalDatadogReporterFactory extends BaseReporterFactory {
@JsonProperty("transport") @JsonProperty("transport")
private HttpTransportConfig httpTransportConfig; private HttpTransportConfig httpTransportConfig;
@Valid
@NotNull
@JsonProperty("udpTransport")
private UdpTransportConfig udpTransportConfig;
private static final EnumSet<Expansion> EXPANSIONS = EnumSet.of( private static final EnumSet<Expansion> EXPANSIONS = EnumSet.of(
Expansion.COUNT, Expansion.COUNT,
Expansion.MIN, Expansion.MIN,
@ -80,8 +89,12 @@ public class SignalDatadogReporterFactory extends BaseReporterFactory {
} }
} }
final boolean useUdpTransport = Optional.ofNullable(System.getenv("SIGNAL_USE_DATADOG_UDP_TRANSPORT")).isPresent();
final Transport transport =
useUdpTransport ? udpTransportConfig.udpTransport() : httpTransportConfig.httpTransport();
return DatadogReporter.forRegistry(registry) return DatadogReporter.forRegistry(registry)
.withTransport(httpTransportConfig.httpTransport()) .withTransport(transport)
.withHost(HostnameUtil.getLocalHostname()) .withHost(HostnameUtil.getLocalHostname())
.withTags(tagsWithVersion) .withTags(tagsWithVersion)
.withPrefix(prefix) .withPrefix(prefix)
@ -115,4 +128,14 @@ public class SignalDatadogReporterFactory extends BaseReporterFactory {
.build(); .build();
} }
} }
public record UdpTransportConfig(@NotNull String statsdHost, @Min(1) int port) {
public UdpTransport udpTransport() {
return new UdpTransport.Builder()
.withStatsdHost(statsdHost)
.withPort(port)
.build();
}
}
} }