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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions