From cd2f52f814890b73eb27f3435685fffe1723ef2d Mon Sep 17 00:00:00 2001 From: Jun Rao Date: Tue, 27 Jan 2015 08:16:14 -0800 Subject: [PATCH 1/3] fix metric name by adding tags as scope --- core/src/main/scala/kafka/metrics/KafkaMetricsGroup.scala | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/src/main/scala/kafka/metrics/KafkaMetricsGroup.scala b/core/src/main/scala/kafka/metrics/KafkaMetricsGroup.scala index e9e4918..a94d816 100644 --- a/core/src/main/scala/kafka/metrics/KafkaMetricsGroup.scala +++ b/core/src/main/scala/kafka/metrics/KafkaMetricsGroup.scala @@ -61,9 +61,16 @@ trait KafkaMetricsGroup extends Logging { nameBuilder.append(name) } - KafkaMetricsGroup.toMBeanName(tags).map(mbeanName => nameBuilder.append(",").append(mbeanName)) + var scope: String = null + val tagsName = KafkaMetricsGroup.toMBeanName(tags) + tagsName match { + case Some(t) => + nameBuilder.append(",").append(t) + scope = t + case None => + } - new MetricName(group, typeName, name, null, nameBuilder.toString()) + new MetricName(group, typeName, name, scope, nameBuilder.toString()) } def newGauge[T](name: String, metric: Gauge[T], tags: scala.collection.Map[String, String] = Map.empty) = -- 1.8.5.2 (Apple Git-48) From 3676e0a92797caebed9d9153609c6cbc95250720 Mon Sep 17 00:00:00 2001 From: Jun Rao Date: Tue, 27 Jan 2015 13:52:31 -0800 Subject: [PATCH 2/3] replace dot with $ in scope --- core/src/main/scala/kafka/metrics/KafkaMetricsGroup.scala | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/src/main/scala/kafka/metrics/KafkaMetricsGroup.scala b/core/src/main/scala/kafka/metrics/KafkaMetricsGroup.scala index a94d816..3547694 100644 --- a/core/src/main/scala/kafka/metrics/KafkaMetricsGroup.scala +++ b/core/src/main/scala/kafka/metrics/KafkaMetricsGroup.scala @@ -64,9 +64,10 @@ trait KafkaMetricsGroup extends Logging { var scope: String = null val tagsName = KafkaMetricsGroup.toMBeanName(tags) tagsName match { - case Some(t) => - nameBuilder.append(",").append(t) - scope = t + case Some(tn) => + nameBuilder.append(",").append(tn) + // Since dot is commonly used for representing hierarchies, replace dot in tag values with $ + scope = tn.replaceAll("\\.", "\\$"); case None => } -- 1.8.5.2 (Apple Git-48) From a83fc964ddd680cc0ed8a11f4b97786242c3b610 Mon Sep 17 00:00:00 2001 From: Jun Rao Date: Wed, 28 Jan 2015 09:17:28 -0800 Subject: [PATCH 3/3] use the dot convention in scope --- .../scala/kafka/metrics/KafkaMetricsGroup.scala | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/core/src/main/scala/kafka/metrics/KafkaMetricsGroup.scala b/core/src/main/scala/kafka/metrics/KafkaMetricsGroup.scala index 3547694..017f1ec 100644 --- a/core/src/main/scala/kafka/metrics/KafkaMetricsGroup.scala +++ b/core/src/main/scala/kafka/metrics/KafkaMetricsGroup.scala @@ -61,13 +61,11 @@ trait KafkaMetricsGroup extends Logging { nameBuilder.append(name) } - var scope: String = null + val scope: String = KafkaMetricsGroup.toScope(tags).getOrElse(null) val tagsName = KafkaMetricsGroup.toMBeanName(tags) tagsName match { case Some(tn) => nameBuilder.append(",").append(tn) - // Since dot is commonly used for representing hierarchies, replace dot in tag values with $ - scope = tn.replaceAll("\\.", "\\$"); case None => } @@ -168,6 +166,23 @@ object KafkaMetricsGroup extends KafkaMetricsGroup with Logging { } } + private def toScope(tags: collection.Map[String, String]): Option[String] = { + val filteredTags = tags + .filter { case (tagKey, tagValue) => tagValue != ""} + if (filteredTags.nonEmpty) { + // convert dot to _ since jmx reporters typically use dot to represent hierarchy + val tagsString = filteredTags + .toList.sortWith((t1, t2) => t1._1 < t2._1) + .map { case (key, value) => "%s.%s".format(key, value.replaceAll("\\.", "_"))} + .mkString(".") + + Some(tagsString) + } + else { + None + } + } + def removeAllConsumerMetrics(clientId: String) { FetchRequestAndResponseStatsRegistry.removeConsumerFetchRequestAndResponseStats(clientId) ConsumerTopicStatsRegistry.removeConsumerTopicStat(clientId) -- 1.8.5.2 (Apple Git-48)