Skip to content

Commit c5a9c27

Browse files
Kubernetes: Datadog Constant Tags (#15213)
* adding option for constant tags to be sent to datadog for split environments * removing unnecessary space * Adding tests on envconfig * clean test * adding empty string test for constant tags * format files * remove public class from test class Co-authored-by: Guy Feldman <[email protected]>
1 parent fc0bda7 commit c5a9c27

File tree

8 files changed

+43
-4
lines changed

8 files changed

+43
-4
lines changed

airbyte-config/config-models/src/main/java/io/airbyte/config/Configs.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,12 @@ public interface Configs {
461461
*/
462462
String getDDDogStatsDPort();
463463

464+
/**
465+
* Set constant tags to be attached to all metrics. Useful for distinguishing between environments.
466+
* Example: airbyte_instance:dev,k8s-cluster:aws-dev
467+
*/
468+
List<String> getDDConstantTags();
469+
464470
/**
465471
* Define whether to publish tracking events to Segment or log-only. Airbyte internal use.
466472
*/

airbyte-config/config-models/src/main/java/io/airbyte/config/EnvConfigs.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public class EnvConfigs implements Configs {
9999
private static final String CONTAINER_ORCHESTRATOR_IMAGE = "CONTAINER_ORCHESTRATOR_IMAGE";
100100
private static final String DD_AGENT_HOST = "DD_AGENT_HOST";
101101
private static final String DD_DOGSTATSD_PORT = "DD_DOGSTATSD_PORT";
102-
102+
public static final String DD_CONSTANT_TAGS = "DD_CONSTANT_TAGS";
103103
public static final String STATE_STORAGE_S3_BUCKET_NAME = "STATE_STORAGE_S3_BUCKET_NAME";
104104
public static final String STATE_STORAGE_S3_REGION = "STATE_STORAGE_S3_REGION";
105105
public static final String STATE_STORAGE_S3_ACCESS_KEY = "STATE_STORAGE_S3_ACCESS_KEY";
@@ -796,6 +796,15 @@ public String getDDDogStatsDPort() {
796796
return getEnvOrDefault(DD_DOGSTATSD_PORT, "");
797797
}
798798

799+
@Override
800+
public List<String> getDDConstantTags() {
801+
String tagsString = getEnvOrDefault(DD_CONSTANT_TAGS, "");
802+
return Splitter.on(",")
803+
.splitToStream(tagsString)
804+
.filter(s -> !s.trim().isBlank())
805+
.collect(Collectors.toList());
806+
}
807+
799808
@Override
800809
public TrackingStrategy getTrackingStrategy() {
801810
return getEnvOrDefault(TRACKING_STRATEGY, TrackingStrategy.LOGGING, s -> {

airbyte-config/config-models/src/test/java/io/airbyte/config/EnvConfigsTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,20 @@ void testPublishMetrics() {
356356
assertFalse(config.getPublishMetrics());
357357
}
358358

359+
@Test
360+
@DisplayName("Should parse constant tags")
361+
void testDDConstantTags() {
362+
assertEquals(List.of(), config.getDDConstantTags());
363+
364+
envMap.put(EnvConfigs.DD_CONSTANT_TAGS, " ");
365+
assertEquals(List.of(), config.getDDConstantTags());
366+
367+
envMap.put(EnvConfigs.DD_CONSTANT_TAGS, "airbyte_instance:dev,k8s-cluster:eks-dev");
368+
List<String> expected = List.of("airbyte_instance:dev", "k8s-cluster:eks-dev");
369+
assertEquals(expected, config.getDDConstantTags());
370+
assertEquals(2, config.getDDConstantTags().size());
371+
}
372+
359373
@Nested
360374
@DisplayName("CheckJobResourceSettings")
361375
class CheckJobResourceSettings {

airbyte-metrics/metrics-lib/src/main/java/io/airbyte/metrics/lib/DatadogClientConfiguration.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package io.airbyte.metrics.lib;
66

77
import io.airbyte.config.Configs;
8+
import java.util.List;
89
import lombok.AllArgsConstructor;
910

1011
/**
@@ -17,10 +18,13 @@ public class DatadogClientConfiguration {
1718
public final String ddPort;
1819
public final boolean publish;
1920

21+
public final List<String> constantTags;
22+
2023
public DatadogClientConfiguration(final Configs configs) {
2124
this.ddAgentHost = configs.getDDAgentHost();
2225
this.ddPort = configs.getDDDogStatsDPort();
2326
this.publish = configs.getPublishMetrics();
27+
this.constantTags = configs.getDDConstantTags();
2428
}
2529

2630
}

airbyte-metrics/metrics-lib/src/main/java/io/airbyte/metrics/lib/DogStatsDMetricClient.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ public void initialize(final MetricEmittingApp app, final DatadogClientConfigura
5555
.prefix(app.getApplicationName())
5656
.hostname(config.ddAgentHost)
5757
.port(Integer.parseInt(config.ddPort))
58+
.constantTags(config.constantTags.toArray(new String[0]))
5859
.build();
5960
}
6061

airbyte-metrics/metrics-lib/src/main/java/io/airbyte/metrics/lib/DogStatsDMetricSingleton.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public synchronized static void initialize(final MetricEmittingApp app, final Da
4646
.prefix(app.getApplicationName())
4747
.hostname(config.ddAgentHost)
4848
.port(Integer.parseInt(config.ddPort))
49+
.constantTags(config.constantTags.toArray(new String[0]))
4950
.build();
5051
}
5152

airbyte-metrics/metrics-lib/src/test/java/io/airbyte/metrics/lib/DogStatsDMetricClientTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
package io.airbyte.metrics.lib;
66

7+
import java.util.Collections;
78
import org.junit.jupiter.api.AfterEach;
89
import org.junit.jupiter.api.Assertions;
910
import org.junit.jupiter.api.BeforeEach;
@@ -17,7 +18,7 @@ class DogStatsDMetricClientTest {
1718
@BeforeEach
1819
void setUp() {
1920
dogStatsDMetricClient = new DogStatsDMetricClient();
20-
dogStatsDMetricClient.initialize(MetricEmittingApps.WORKER, new DatadogClientConfiguration("localhost", "1000", false));
21+
dogStatsDMetricClient.initialize(MetricEmittingApps.WORKER, new DatadogClientConfiguration("localhost", "1000", false, Collections.emptyList()));
2122
}
2223

2324
@AfterEach

airbyte-metrics/metrics-lib/src/test/java/io/airbyte/metrics/lib/DogStatsDMetricSingletonTest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
package io.airbyte.metrics.lib;
66

7+
import java.util.Collections;
78
import org.junit.jupiter.api.AfterEach;
89
import org.junit.jupiter.api.Assertions;
910
import org.junit.jupiter.api.DisplayName;
@@ -20,7 +21,8 @@ void tearDown() {
2021
@DisplayName("there should be no exception if we attempt to emit metrics while publish is false")
2122
void testPublishTrueNoEmitError() {
2223
Assertions.assertDoesNotThrow(() -> {
23-
DogStatsDMetricSingleton.initialize(MetricEmittingApps.WORKER, new DatadogClientConfiguration("localhost", "1000", false));
24+
DogStatsDMetricSingleton.initialize(MetricEmittingApps.WORKER,
25+
new DatadogClientConfiguration("localhost", "1000", false, Collections.emptyList()));
2426
DogStatsDMetricSingleton.gauge(OssMetricsRegistry.KUBE_POD_PROCESS_CREATE_TIME_MILLISECS, 1);
2527
});
2628
}
@@ -29,7 +31,8 @@ void testPublishTrueNoEmitError() {
2931
@DisplayName("there should be no exception if we attempt to emit metrics while publish is true")
3032
void testPublishFalseNoEmitError() {
3133
Assertions.assertDoesNotThrow(() -> {
32-
DogStatsDMetricSingleton.initialize(MetricEmittingApps.WORKER, new DatadogClientConfiguration("localhost", "1000", true));
34+
DogStatsDMetricSingleton.initialize(MetricEmittingApps.WORKER,
35+
new DatadogClientConfiguration("localhost", "1000", true, Collections.emptyList()));
3336
DogStatsDMetricSingleton.gauge(OssMetricsRegistry.KUBE_POD_PROCESS_CREATE_TIME_MILLISECS, 1);
3437
});
3538
}

0 commit comments

Comments
 (0)