diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java
index 66b1da23de91b18ebf9162842a2a5521e47f0fc8..de95b21d761abf08782dfaa65468f16045478384 100644
--- a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java
+++ b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java
@@ -34,6 +34,7 @@ import io.lettuce.core.resource.ClientResources;
 import io.micrometer.core.instrument.Clock;
 import io.micrometer.core.instrument.Meter.Id;
 import io.micrometer.core.instrument.Metrics;
+import io.micrometer.core.instrument.Tags;
 import io.micrometer.core.instrument.config.MeterFilter;
 import io.micrometer.core.instrument.distribution.DistributionStatisticConfig;
 import io.micrometer.datadog.DatadogConfig;
@@ -309,16 +310,21 @@ public class WhisperServerService extends Application<WhisperServerConfiguration
         }
       }, Clock.SYSTEM);
 
-      datadogMeterRegistry.config().meterFilter(new MeterFilter() {
-        @Override
-        public DistributionStatisticConfig configure(final Id id, final DistributionStatisticConfig config) {
-          return defaultDistributionStatisticConfig.merge(config);
-        }
-      })
+      datadogMeterRegistry.config().commonTags(
+          Tags.of(
+              "service", "chat",
+              "version", WhisperServerVersion.getServerVersion(),
+              "env", config.getDatadogConfiguration().getEnvironment()))
           .meterFilter(MeterFilter.denyNameStartsWith(MetricsRequestEventListener.REQUEST_COUNTER_NAME))
           .meterFilter(MeterFilter.denyNameStartsWith(MetricsRequestEventListener.ANDROID_REQUEST_COUNTER_NAME))
           .meterFilter(MeterFilter.denyNameStartsWith(MetricsRequestEventListener.DESKTOP_REQUEST_COUNTER_NAME))
-          .meterFilter(MeterFilter.denyNameStartsWith(MetricsRequestEventListener.IOS_REQUEST_COUNTER_NAME));
+          .meterFilter(MeterFilter.denyNameStartsWith(MetricsRequestEventListener.IOS_REQUEST_COUNTER_NAME))
+          .meterFilter(new MeterFilter() {
+            @Override
+            public DistributionStatisticConfig configure(final Id id, final DistributionStatisticConfig config) {
+              return defaultDistributionStatisticConfig.merge(config);
+            }
+          });
 
       Metrics.addRegistry(datadogMeterRegistry);
     }
diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/configuration/DatadogConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/DatadogConfiguration.java
index 6731a2bb10014e3bfe8de2d6f2b7f283de5dd601..3642f8d6d6251ad693fced44c49499f2258bfe87 100644
--- a/service/src/main/java/org/whispersystems/textsecuregcm/configuration/DatadogConfiguration.java
+++ b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/DatadogConfiguration.java
@@ -20,6 +20,10 @@ public class DatadogConfiguration {
   @NotNull
   private Duration step = Duration.ofSeconds(10);
 
+  @JsonProperty
+  @NotBlank
+  private String environment;
+
   public String getApiKey() {
     return apiKey;
   }
@@ -27,4 +31,8 @@ public class DatadogConfiguration {
   public Duration getStep() {
     return step;
   }
+
+  public String getEnvironment() {
+    return environment;
+  }
 }