PrometheusReporter set incorrect tags
PrometheusReporter set incorrect tags when tags map returns keyset and values not in same order as it stored in map e.g.
CollectorRegistry registry = CollectorRegistry.defaultRegistry;
HTTPServer httpServer = new HTTPServer(new InetSocketAddress(9098), registry);
PrometheusReporter reporter = PrometheusReporter.builder().registry(registry).build();
Map<String, String> tags = new HashMap<>();
tags.put("WorkflowType", "WorkflowType");
tags.put("Domain", "Domain");
tags.put("TaskList", "TaskList");
Scope scope = new RootScopeBuilder().reporter(reporter)
.reportEvery(Duration.ofSeconds(1));
Counter counter = scope.tagged(tags).counter("counter");
while (true) {
counter.inc(1);
Thread.sleep(500);
}
if check metrics on localhost:9098 it looks like this
HELP test_metric test_metric summary TYPE test_metric summary HELP counter_total counter counter TYPE counter_total counter counter_total{WorkflowType="Domain",TaskList="WorkflowType",Domain="TaskList",} 50.0 HELP counter_created counter counter TYPE counter_created gauge counter_created{WorkflowType="Domain",TaskList="WorkflowType",Domain="TaskList",} 1.678364275361E9
tags for counter are incorrect. It looks like the problem is here https://github.com/uber-java/tally/blob/4a7bba5e3add45f5a1b7afd95d1c07bd33acd685/prometheus/src/main/java/com/uber/m3/tally/experimental/prometheus/PrometheusReporter.java#L144
scope.tagged() put tags in immutableMap and immutable map returns keyset in order ("WorkflowType", "TaskList", "Domain") but values() order is ["Domain","WorkflowType","TaskList"]
Could you please have a look? Thanks in advance.
versions: com.uber.m3:tally-core:0.13.0 com.uber.m3:tally-prometheus:0.13.0 io.prometheus:simpleclient:0.16.0 io.prometheus:simpleclient_httpserver:0.16.0
@SokolAndrey @justinjc could you please check this out?