From 2bdef2dba73deafeaec9dbab18cb105b142fa6e6 Mon Sep 17 00:00:00 2001 From: Nishant Date: Fri, 13 Nov 2015 13:12:59 -0800 Subject: [PATCH] Add datasource and taskId to metrics emitted by peons This PR adds the datasource and taskId to the jvm and sys metrics emitted by the peons. fix spelling review comment review comment --- .../indexing/overlord/ForkingTaskRunner.java | 20 +++++++++ .../java/io/druid/query/DruidMetrics.java | 1 + .../druid/server/metrics/MetricsModule.java | 42 +++++++++++++++++++ .../druid/server/metrics/MonitorsConfig.java | 2 + 4 files changed, 65 insertions(+) diff --git a/indexing-service/src/main/java/io/druid/indexing/overlord/ForkingTaskRunner.java b/indexing-service/src/main/java/io/druid/indexing/overlord/ForkingTaskRunner.java index 53f7b7bdb210..3595a12b7f41 100644 --- a/indexing-service/src/main/java/io/druid/indexing/overlord/ForkingTaskRunner.java +++ b/indexing-service/src/main/java/io/druid/indexing/overlord/ForkingTaskRunner.java @@ -52,7 +52,9 @@ import io.druid.indexing.common.tasklogs.LogUtils; import io.druid.indexing.overlord.config.ForkingTaskRunnerConfig; import io.druid.indexing.worker.config.WorkerConfig; +import io.druid.query.DruidMetrics; import io.druid.server.DruidNode; +import io.druid.server.metrics.MonitorsConfig; import io.druid.tasklogs.TaskLogPusher; import io.druid.tasklogs.TaskLogStreamer; import org.apache.commons.io.FileUtils; @@ -296,6 +298,24 @@ public TaskStatus call() } } + // Add dataSource and taskId for metrics + command.add( + String.format( + "-D%s%s=%s", + MonitorsConfig.METRIC_DIMENSION_PREFIX, + DruidMetrics.DATASOURCE, + task.getDataSource() + ) + ); + command.add( + String.format( + "-D%s%s=%s", + MonitorsConfig.METRIC_DIMENSION_PREFIX, + DruidMetrics.TASK_ID, + task.getId() + ) + ); + command.add(String.format("-Ddruid.host=%s", childHost)); command.add(String.format("-Ddruid.port=%d", childPort)); diff --git a/processing/src/main/java/io/druid/query/DruidMetrics.java b/processing/src/main/java/io/druid/query/DruidMetrics.java index 58deed81f2d0..568835e4315f 100644 --- a/processing/src/main/java/io/druid/query/DruidMetrics.java +++ b/processing/src/main/java/io/druid/query/DruidMetrics.java @@ -36,6 +36,7 @@ public class DruidMetrics public final static String TYPE = "type"; public final static String INTERVAL = "interval"; public final static String ID = "id"; + public final static String TASK_ID = "taskId"; public final static String STATUS = "status"; // task metrics diff --git a/server/src/main/java/io/druid/server/metrics/MetricsModule.java b/server/src/main/java/io/druid/server/metrics/MetricsModule.java index 2d80a760d2e3..b4b43848e6c2 100644 --- a/server/src/main/java/io/druid/server/metrics/MetricsModule.java +++ b/server/src/main/java/io/druid/server/metrics/MetricsModule.java @@ -28,15 +28,21 @@ import com.google.inject.name.Names; import com.metamx.common.logger.Logger; import com.metamx.emitter.service.ServiceEmitter; +import com.metamx.metrics.JvmCpuMonitor; +import com.metamx.metrics.JvmMonitor; import com.metamx.metrics.Monitor; import com.metamx.metrics.MonitorScheduler; +import com.metamx.metrics.SysMonitor; import io.druid.concurrent.Execs; import io.druid.guice.DruidBinders; import io.druid.guice.JsonConfigProvider; import io.druid.guice.LazySingleton; import io.druid.guice.ManageLifecycle; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Properties; import java.util.Set; /** @@ -95,4 +101,40 @@ public MonitorScheduler getMonitorScheduler( monitors ); } + + @Provides + @ManageLifecycle + public JvmMonitor getJvmMonitor(Properties props) + { + return new JvmMonitor(getDimensions(props)); + } + + @Provides + @ManageLifecycle + public JvmCpuMonitor getJvmCpuMonitor(Properties props) + { + return new JvmCpuMonitor(getDimensions(props)); + } + + @Provides + @ManageLifecycle + public SysMonitor getSysMonitor(Properties props) + { + return new SysMonitor(getDimensions(props)); + } + + private Map getDimensions(Properties props) + { + Map dimensions = new HashMap<>(); + for (String property : props.stringPropertyNames()) { + if (property.startsWith(MonitorsConfig.METRIC_DIMENSION_PREFIX)) { + dimensions.put( + property.substring(MonitorsConfig.METRIC_DIMENSION_PREFIX.length()), + new String[]{props.getProperty(property)} + ); + } + } + return dimensions; + } + } diff --git a/server/src/main/java/io/druid/server/metrics/MonitorsConfig.java b/server/src/main/java/io/druid/server/metrics/MonitorsConfig.java index 53f8559ee695..11bddf4f8a99 100644 --- a/server/src/main/java/io/druid/server/metrics/MonitorsConfig.java +++ b/server/src/main/java/io/druid/server/metrics/MonitorsConfig.java @@ -28,6 +28,8 @@ */ public class MonitorsConfig { + public final static String METRIC_DIMENSION_PREFIX = "druid.metrics.emitter.dimension."; + @JsonProperty("monitors") @NotNull private List> monitors = Lists.newArrayList();