[ https://issues.apache.org/jira/browse/FLINK-4245?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15608751#comment-15608751 ]
ASF GitHub Bot commented on FLINK-4245: --------------------------------------- Github user StephanEwen commented on a diff in the pull request: https://github.com/apache/flink/pull/2418#discussion_r85146695 --- Diff: flink-metrics/flink-metrics-jmx/src/main/java/org/apache/flink/metrics/jmx/JMXReporter.java --- @@ -206,27 +211,24 @@ public void notifyOfRemovedMetric(Metric metric, String metricName, MetricGroup // Utilities // ------------------------------------------------------------------------ - static String generateJmxName(String metricName, String[] scopeComponents) { - final StringBuilder nameBuilder = new StringBuilder(128); - nameBuilder.append(PREFIX); - - for (int x = 0; x < scopeComponents.length; x++) { - // write keyX= - nameBuilder.append(KEY_PREFIX); - nameBuilder.append(x); - nameBuilder.append("="); - - // write scope component - nameBuilder.append(replaceInvalidChars(scopeComponents[x])); - nameBuilder.append(","); + static Hashtable<String, String> generateJmxTable(Map<String, String> variables) { + Hashtable<String, String> ht = new Hashtable<>(variables.size()); + for (Map.Entry<String, String> variable : variables.entrySet()) { + ht.put(replaceInvalidChars(variable.getKey()), replaceInvalidChars(variable.getValue())); } + return ht; + } - // write the name - nameBuilder.append("name=").append(replaceInvalidChars(metricName)); - - return nameBuilder.toString(); + static String generateJmxDomain(String metricName, MetricGroup group) { + CharacterFilter filter = new CharacterFilter() { --- End diff -- I think this can be a single instance reused across all calls to "generateJmxDomain" in the JMX reporter. > Metric naming improvements > -------------------------- > > Key: FLINK-4245 > URL: https://issues.apache.org/jira/browse/FLINK-4245 > Project: Flink > Issue Type: Improvement > Components: Metrics > Reporter: Stephan Ewen > > A metric currently has two parts to it: > - The name of that particular metric > - The "scope" (or namespace), defined by the group that contains the metric. > A metric group actually always implicitly has a map of naming "tags", like: > - taskmanager_host : <some-hostname> > - taskmanager_id : <id> > - task_name : "map() -> filter()" > We derive the scope from that map, following the defined scope formats. > For JMX (and some users that use JMX), it would be natural to expose that map > of tags. Some users reconstruct that map by parsing the metric scope. JMX, we > can expose a metric like: > - domain: "taskmanager.task.operator.io" > - name: "numRecordsIn" > - tags: { "hostname" -> "localhost", "operator_name" -> "map() at > X.java:123", ... } > For many other reporters, the formatted scope makes a lot of sense, since > they think only in terms of (scope, metric-name). > We may even have the formatted scope in JMX as well (in the domain), if we > want to go that route. > [~jgrier] and [~Zentol] - what do you think about that? > [~mdaxini] Does that match your use of the metrics? -- This message was sent by Atlassian JIRA (v6.3.4#6332)