You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ds...@apache.org on 2015/10/12 15:02:47 UTC

ambari git commit: AMBARI-13336 Flume agent specific metrics not showing up as graphs (dsen)

Repository: ambari
Updated Branches:
  refs/heads/trunk aef3af9b3 -> 633242cce


AMBARI-13336 Flume agent specific metrics not showing up as graphs (dsen)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/633242cc
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/633242cc
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/633242cc

Branch: refs/heads/trunk
Commit: 633242ccebf45b9516debefde04f146f6a173fed
Parents: aef3af9
Author: Dmytro Sen <ds...@apache.org>
Authored: Mon Oct 12 16:02:34 2015 +0300
Committer: Dmytro Sen <ds...@apache.org>
Committed: Mon Oct 12 16:02:34 2015 +0300

----------------------------------------------------------------------
 .../timeline/cache/TimelineMetricsCache.java    |  2 +-
 .../sink/flume/FlumeTimelineMetricsSink.java    | 21 +++--
 .../flume/FlumeTimelineMetricsSinkTest.java     |  2 +-
 .../internal/AbstractPropertyProvider.java      | 11 ++-
 .../metrics/timeline/AMSPropertyProvider.java   | 14 +++-
 .../FLUME/1.4.0.2.0/metrics.json                | 81 ++++++++++----------
 6 files changed, 75 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/633242cc/ambari-metrics/ambari-metrics-common/src/main/java/org/apache/hadoop/metrics2/sink/timeline/cache/TimelineMetricsCache.java
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-common/src/main/java/org/apache/hadoop/metrics2/sink/timeline/cache/TimelineMetricsCache.java b/ambari-metrics/ambari-metrics-common/src/main/java/org/apache/hadoop/metrics2/sink/timeline/cache/TimelineMetricsCache.java
index 224b490..77a5499 100644
--- a/ambari-metrics/ambari-metrics-common/src/main/java/org/apache/hadoop/metrics2/sink/timeline/cache/TimelineMetricsCache.java
+++ b/ambari-metrics/ambari-metrics-common/src/main/java/org/apache/hadoop/metrics2/sink/timeline/cache/TimelineMetricsCache.java
@@ -78,7 +78,7 @@ public class TimelineMetricsCache {
   }
 
   // TODO: Change to ConcurentHashMap with weighted eviction
-  class TimelineMetricHolder extends LinkedHashMap<String, TimelineMetricWrapper> {
+  class TimelineMetricHolder extends LinkedHashMap<String, TimelineMetricWrapper> {//
     private static final long serialVersionUID = 1L;
     private boolean gotOverflow = false;
     // To avoid duplication at the end of the buffer and beginning of the next

http://git-wip-us.apache.org/repos/asf/ambari/blob/633242cc/ambari-metrics/ambari-metrics-flume-sink/src/main/java/org/apache/hadoop/metrics2/sink/flume/FlumeTimelineMetricsSink.java
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-flume-sink/src/main/java/org/apache/hadoop/metrics2/sink/flume/FlumeTimelineMetricsSink.java b/ambari-metrics/ambari-metrics-flume-sink/src/main/java/org/apache/hadoop/metrics2/sink/flume/FlumeTimelineMetricsSink.java
index 1d4c739..530c8c1 100644
--- a/ambari-metrics/ambari-metrics-flume-sink/src/main/java/org/apache/hadoop/metrics2/sink/flume/FlumeTimelineMetricsSink.java
+++ b/ambari-metrics/ambari-metrics-flume-sink/src/main/java/org/apache/hadoop/metrics2/sink/flume/FlumeTimelineMetricsSink.java
@@ -36,6 +36,7 @@ import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -46,7 +47,10 @@ import java.util.concurrent.TimeUnit;
 
 public class FlumeTimelineMetricsSink extends AbstractTimelineMetricsSink implements MonitorService {
   private String collectorUri;
-  private TimelineMetricsCache metricsCache;
+  // Key - component(instance_id)
+  private Map<String, TimelineMetricsCache> metricsCaches;
+  private int maxRowCacheSize;
+  private int metricsSendInterval;
   private ScheduledExecutorService scheduledExecutorService;
   private long pollFrequency;
   private String hostname;
@@ -83,11 +87,11 @@ public class FlumeTimelineMetricsSink extends AbstractTimelineMetricsSink implem
     Configuration configuration = new Configuration("/flume-metrics2.properties");
     timeoutSeconds = Integer.parseInt(configuration.getProperty(METRICS_POST_TIMEOUT_SECONDS,
         String.valueOf(DEFAULT_POST_TIMEOUT_SECONDS)));
-    int maxRowCacheSize = Integer.parseInt(configuration.getProperty(MAX_METRIC_ROW_CACHE_SIZE,
+    maxRowCacheSize = Integer.parseInt(configuration.getProperty(MAX_METRIC_ROW_CACHE_SIZE,
         String.valueOf(TimelineMetricsCache.MAX_RECS_PER_NAME_DEFAULT)));
-    int metricsSendInterval = Integer.parseInt(configuration.getProperty(METRICS_SEND_INTERVAL,
+    metricsSendInterval = Integer.parseInt(configuration.getProperty(METRICS_SEND_INTERVAL,
         String.valueOf(TimelineMetricsCache.MAX_EVICTION_TIME_MILLIS)));
-    metricsCache = new TimelineMetricsCache(maxRowCacheSize, metricsSendInterval);
+    metricsCaches = new HashMap<String, TimelineMetricsCache>();
     String collectorHostname = configuration.getProperty(COLLECTOR_HOST_PROPERTY);
     String port = configuration.getProperty(COLLECTOR_PORT_PROPERTY);
     collectorUri = "http://" + collectorHostname + ":" + port + "/ws/v1/timeline/metrics";
@@ -111,8 +115,9 @@ public class FlumeTimelineMetricsSink extends AbstractTimelineMetricsSink implem
     this.pollFrequency = pollFrequency;
   }
 
-  public void setMetricsCache(TimelineMetricsCache metricsCache) {
-    this.metricsCache = metricsCache;
+  //Test hepler method
+  protected void setMetricsCaches(Map<String, TimelineMetricsCache> metricsCaches) {
+    this.metricsCaches = metricsCaches;
   }
 
   /**
@@ -144,6 +149,10 @@ public class FlumeTimelineMetricsSink extends AbstractTimelineMetricsSink implem
 
     private void processComponentAttributes(long currentTimeMillis, String component, Map<String, String> attributeMap) throws IOException {
       List<TimelineMetric> metricList = new ArrayList<TimelineMetric>();
+      if (!metricsCaches.containsKey(component)) {
+        metricsCaches.put(component, new TimelineMetricsCache(maxRowCacheSize, metricsSendInterval));
+      }
+      TimelineMetricsCache metricsCache = metricsCaches.get(component);
       for (String attributeName : attributeMap.keySet()) {
         String attributeValue = attributeMap.get(attributeName);
         if (NumberUtils.isNumber(attributeValue)) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/633242cc/ambari-metrics/ambari-metrics-flume-sink/src/test/java/org/apache/hadoop/metrics2/sink/flume/FlumeTimelineMetricsSinkTest.java
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-flume-sink/src/test/java/org/apache/hadoop/metrics2/sink/flume/FlumeTimelineMetricsSinkTest.java b/ambari-metrics/ambari-metrics-flume-sink/src/test/java/org/apache/hadoop/metrics2/sink/flume/FlumeTimelineMetricsSinkTest.java
index 647e026..fa1ca21 100644
--- a/ambari-metrics/ambari-metrics-flume-sink/src/test/java/org/apache/hadoop/metrics2/sink/flume/FlumeTimelineMetricsSinkTest.java
+++ b/ambari-metrics/ambari-metrics-flume-sink/src/test/java/org/apache/hadoop/metrics2/sink/flume/FlumeTimelineMetricsSinkTest.java
@@ -65,7 +65,7 @@ public class FlumeTimelineMetricsSinkTest {
 
   private TimelineMetricsCache getTimelineMetricsCache(FlumeTimelineMetricsSink flumeTimelineMetricsSink) {
     TimelineMetricsCache timelineMetricsCache = EasyMock.createNiceMock(TimelineMetricsCache.class);
-    flumeTimelineMetricsSink.setMetricsCache(timelineMetricsCache);
+    flumeTimelineMetricsSink.setMetricsCaches(Collections.singletonMap("SINK",timelineMetricsCache));
     EasyMock.expect(timelineMetricsCache.getTimelineMetric("key1"))
         .andReturn(new TimelineMetric()).once();
     timelineMetricsCache.putTimelineMetric(EasyMock.anyObject(TimelineMetric.class));

http://git-wip-us.apache.org/repos/asf/ambari/blob/633242cc/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractPropertyProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractPropertyProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractPropertyProvider.java
index f265c4f..4a0c44f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractPropertyProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractPropertyProvider.java
@@ -181,6 +181,8 @@ public abstract class AbstractPropertyProvider extends BaseProvider implements P
     // find the argument in the property id
     int argStart = propertyId.indexOf(argName);
 
+    String value = val == null ? "" : val;
+
     if (argStart > -1) {
       // get the string segment starting with the given argument
       String argSegment = propertyId.substring(argStart);
@@ -212,15 +214,18 @@ public abstract class AbstractPropertyProvider extends BaseProvider implements P
           }
 
           try {
-            val = invokeArgumentMethod(val, methodName, argList, paramTypes);
+            value = invokeArgumentMethod(value, methodName, argList, paramTypes);
           } catch (Exception e) {
             throw new IllegalArgumentException("Can't apply method " + methodName + " for argument " +
                 argName + " in " + propertyId, e);
           }
         }
+        if (value.equals(val)) {
+          return propertyId;
+        }
       }
       // Do the substitution
-      return propertyId.replace(argName, val);
+      return propertyId.replace(argName, value);
     }
     throw new IllegalArgumentException("Can't substitute " + val + "  for argument " + argName + " in " + propertyId);
   }
@@ -368,7 +373,7 @@ public abstract class AbstractPropertyProvider extends BaseProvider implements P
    * Get value from the given metric.
    *
    * @param metric      the metric
-   * @param isTemporal  indicates whether or not this a temporal metric
+   * @param temporalInfo  indicates whether or not this a temporal metric
    *
    * @return a range of temporal data or a point in time value if not temporal
    */

http://git-wip-us.apache.org/repos/asf/ambari/blob/633242cc/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProvider.java
index 55b7349..f221dce 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/AMSPropertyProvider.java
@@ -399,13 +399,19 @@ public abstract class AMSPropertyProvider extends MetricsPropertyProvider {
               if (metricsMap.containsKey(propertyId)){
                 if (containsArguments(propertyId)) {
                   int i = 1;
-                  for (String param : parameterList) {
-                    propertyId = substituteArgument(propertyId, "$" + i, param);
-                    ++i;
+                  //if nothing to substitute in metric name, then
+                  //substitute $1 with an instanceId
+                  if (!parameterList.isEmpty())  {
+                    for (String param : parameterList) {
+                      propertyId = substituteArgument(propertyId, "$" + i, param);
+                      ++i;
+                    }
+                  } else {
+                    propertyId = substituteArgument(propertyId, "$1", metric.getInstanceId());
                   }
                 }
                 Object value = getValue(metric, temporalInfo);
-                if (value != null) {
+                if (value != null && !containsArguments(propertyId)) {
                   resource.setProperty(propertyId, value);
                 }
               }

http://git-wip-us.apache.org/repos/asf/ambari/blob/633242cc/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/metrics.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/metrics.json b/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/metrics.json
index b0990ba..611a1b7 100644
--- a/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/metrics.json
+++ b/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/metrics.json
@@ -218,205 +218,204 @@
         "type": "ganglia",
         "metrics": {
           "default": {
-            "metrics/flume/flume/CHANNEL/ChannelCapacity": {
+              "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/ChannelCapacity": {
               "metric": "ChannelCapacity",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/CHANNEL/StartTime": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/StartTime": {
               "metric": "StartTime",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/CHANNEL/EventTakeAttemptCount": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventTakeAttemptCount": {
               "metric": "EventTakeAttemptCount",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/CHANNEL/EventTakeSuccessCount": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventTakeSuccessCount": {
               "metric": "EventTakeSuccessCount",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/CHANNEL/EventPutAttemptCount": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventPutAttemptCount": {
               "metric": "EventPutAttemptCount",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/CHANNEL/StopTime": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/StopTime": {
               "metric": "StopTime",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/CHANNEL/ChannelFillPercentage": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/ChannelFillPercentage": {
               "metric": "ChannelFillPercentage",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/CHANNEL/ChannelSize": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/ChannelSize": {
               "metric": "ChannelSize",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/CHANNEL/EventPutSuccessCount": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventPutSuccessCount": {
               "metric": "EventPutSuccessCount",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SINK/ConnectionCreatedCount": {
+            "metrics/flume/flume/SINK/$1.replaceAll(\"^SINK\.\",\"\")/ConnectionCreatedCount": {
               "metric": "ConnectionCreatedCount",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SINK/BatchCompleteCount": {
+            "metrics/flume/flume/SINK/$1.replaceAll(\"^SINK\.\",\"\")/BatchCompleteCount": {
               "metric": "BatchCompleteCount",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SINK/EventDrainSuccessCount": {
+            "metrics/flume/flume/SINK/$1.replaceAll(\"^SINK\.\",\"\")/EventDrainSuccessCount": {
               "metric": "EventDrainSuccessCount",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SINK/StartTime": {
+            "metrics/flume/flume/SINK/$1.replaceAll(\"^SINK\.\",\"\")/StartTime": {
               "metric": "StartTime",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SINK/EventDrainAttemptCount": {
+            "metrics/flume/flume/SINK/$1.replaceAll(\"^SINK\.\",\"\")/EventDrainAttemptCount": {
               "metric": "EventDrainAttemptCount",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SINK/ConnectionFailedCount": {
+            "metrics/flume/flume/SINK/$1.replaceAll(\"^SINK\.\",\"\")/ConnectionFailedCount": {
               "metric": "ConnectionFailedCount",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SINK/BatchUnderflowCount": {
+            "metrics/flume/flume/SINK/$1.replaceAll(\"^SINK\.\",\"\")/BatchUnderflowCount": {
               "metric": "BatchUnderflowCount",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SINK/ConnectionClosedCount": {
+            "metrics/flume/flume/SINK/$1.replaceAll(\"^SINK\.\",\"\")/ConnectionClosedCount": {
               "metric": "ConnectionClosedCount",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SINK/StopTime": {
+            "metrics/flume/flume/SINK/$1.replaceAll(\"^SINK\.\",\"\")/StopTime": {
               "metric": "StopTime",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SINK/BatchEmptyCount": {
+            "metrics/flume/flume/SINK/$1.replaceAll(\"^SINK\.\",\"\")/BatchEmptyCount": {
               "metric": "BatchEmptyCount",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SOURCE/AppendBatchReceivedCount": {
+            "metrics/flume/flume/SOURCE/$1.replaceAll(\"^SOURCE\.\",\"\")/AppendBatchReceivedCount": {
               "metric": "AppendBatchReceivedCount",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SOURCE/AppendAcceptedCount": {
+            "metrics/flume/flume/SOURCE/$1.replaceAll(\"^SOURCE\.\",\"\")/AppendAcceptedCount": {
               "metric": "AppendAcceptedCount",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SOURCE/StartTime": {
+            "metrics/flume/flume/SOURCE/$1.replaceAll(\"^SOURCE\.\",\"\")/StartTime": {
               "metric": "StartTime",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SOURCE/OpenConnectionCount": {
+            "metrics/flume/flume/SOURCE/$1.replaceAll(\"^SOURCE\.\",\"\")/OpenConnectionCount": {
               "metric": "OpenConnectionCount",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SOURCE/AppendBatchAcceptedCount": {
+            "metrics/flume/flume/SOURCE/$1.replaceAll(\"^SOURCE\.\",\"\")/AppendBatchAcceptedCount": {
               "metric": "AppendBatchAcceptedCount",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SOURCE/AppendReceivedCount": {
+            "metrics/flume/flume/SOURCE/$1.replaceAll(\"^SOURCE\.\",\"\")/AppendReceivedCount": {
               "metric": "AppendReceivedCount",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SOURCE/EventReceivedCount": {
+            "metrics/flume/flume/SOURCE/$1.replaceAll(\"^SOURCE\.\",\"\")/EventReceivedCount": {
               "metric": "EventReceivedCount",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SOURCE/StopTime": {
+            "metrics/flume/flume/SOURCE/$1.replaceAll(\"^SOURCE\.\",\"\")/StopTime": {
               "metric": "StopTime",
               "pointInTime": true,
               "temporal": true
             },
-            "metrics/flume/flume/SOURCE/EventAcceptedCount": {
+            "metrics/flume/flume/SOURCE/$1.replaceAll(\"^SOURCE\.\",\"\")/EventAcceptedCount": {
               "metric": "EventAcceptedCount",
               "pointInTime": true,
               "temporal": true
             },
 
-            "metrics/flume/flume/CHANNEL/EventTakeSuccessCount/rate/avg": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventTakeSuccessCount/rate/avg": {
               "metric": "EventTakeSuccessCount._rate._avg",
               "pointInTime": false,
               "temporal": true
             },
-            "metrics/flume/flume/CHANNEL/EventTakeSuccessCount/rate/max": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventTakeSuccessCount/rate/max": {
               "metric": "EventTakeSuccessCount._rate._max",
               "pointInTime": false,
               "temporal": true
             },
-            "metrics/flume/flume/CHANNEL/EventTakeSuccessCount/rate/min": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventTakeSuccessCount/rate/min": {
               "metric": "EventTakeSuccessCount._rate._min",
               "pointInTime": false,
               "temporal": true
             },
-            "metrics/flume/flume/CHANNEL/EventTakeSuccessCount/rate/sum": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventTakeSuccessCount/rate/sum": {
               "metric": "EventTakeSuccessCount._rate._sum",
               "pointInTime": false,
               "temporal": true
             },
-
-            "metrics/flume/flume/CHANNEL/EventPutSuccessCount/rate/avg": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventPutSuccessCount/rate/avg": {
               "metric": "EventPutSuccessCount._rate._avg",
               "pointInTime": false,
               "temporal": true
             },
-            "metrics/flume/flume/CHANNEL/EventPutSuccessCount/rate/max": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventPutSuccessCount/rate/max": {
               "metric": "EventPutSuccessCount._rate._max",
               "pointInTime": false,
               "temporal": true
             },
-            "metrics/flume/flume/CHANNEL/EventPutSuccessCount/rate/min": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventPutSuccessCount/rate/min": {
               "metric": "EventPutSuccessCount._rate._min",
               "pointInTime": false,
               "temporal": true
             },
-            "metrics/flume/flume/CHANNEL/EventPutSuccessCount/rate/sum": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventPutSuccessCount/rate/sum": {
               "metric": "EventPutSuccessCount._rate._sum",
               "pointInTime": false,
               "temporal": true
             },
 
-            "metrics/flume/flume/CHANNEL/ChannelSize/rate/avg": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/ChannelSize/rate/avg": {
               "metric": "ChannelSize._rate._avg",
               "pointInTime": false,
               "temporal": true
             },
-            "metrics/flume/flume/CHANNEL/ChannelSize/rate/max": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/ChannelSize/rate/max": {
               "metric": "ChannelSize._rate._max",
               "pointInTime": false,
               "temporal": true
             },
-            "metrics/flume/flume/CHANNEL/ChannelSize/rate/min": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/ChannelSize/rate/min": {
               "metric": "ChannelSize._rate._min",
               "pointInTime": false,
               "temporal": true
             },
-            "metrics/flume/flume/CHANNEL/ChannelSize/rate/sum": {
+            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/ChannelSize/rate/sum": {
               "metric": "ChannelSize._rate._sum",
               "pointInTime": false,
               "temporal": true