From 1eb821134639e161cdf10421b03f428a46e1b9b8 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 4a06bcaa1d34..5db44641bbc8 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; @@ -297,6 +299,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();