Skip to content

PrometheusReporter set incorrect tags #118

@ayanyuk-syberry

Description

@ayanyuk-syberry

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

.labelNames(collectionToStringArray(finalTags.keySet()))

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions