Skip to content

OM 2.0: Should stateset be represented in a Complex/Composite format? #310

@bwplotka

Description

@bwplotka

See https://github.com/prometheus/docs/pull/2679/changes#r2627250204

We are debating if stateset, represented in OM 1.0 as:

# TYPE foo stateset
foo{entity="controller",foo="a"} 1.0
foo{entity="controller",foo="bb"} 0.0
foo{entity="controller",foo="ccc"} 0.0
foo{entity="replica",foo="a"} 1.0
foo{entity="replica",foo="bb"} 0.0
foo{entity="replica",foo="ccc"} 1.0

Should be composite as histograms and summaries in 2.0 e.g.

# TYPE foo stateset
foo{entity="controller"} {states:["a":1, "bb":0, "ccc":0]}
foo{entity="replica"} {states:["a":1, "bb":0, "ccc":1]}

or

# TYPE foo stateset
foo{entity="controller"} {true:["a"], false:["bb", "ccc"]}
foo{entity="replica"} {true:["a", "ccc"], false:["bb"]}

Discussion notes

  • Otel does not have it, but some prev discussions happened to add statesets
  • ENUM is subcase
  • We don't know much about UX and usage to make clear decisions
  • Ensure integer not float for composite
  • for stateset ST not relevant/useful here as those are gauges

Pros & Cons for making it composite

Pros

  • We make it efficiency/reliable to parse (label matching to realize if it's same "sample"). Efficiency of stateset is actually a blocker for using them instead of gauges. There's a potential to reduce cardinality for large number of states.
  • Consistency with summaries and histograms
  • We don't need to have an extra rule around interleaving.

Cons

  • Readability maybe impaired (long lines) - but it's the same as histograms/summaries.
  • What you see what you query is violated unless we plan to implement composite/native stateset eventually (and change PromQL). Even if we plan, we don't know how it will look like, so it's unlikely we will figure out the right format, unless we do UX research on potential PromQL functions like state(metric, stateName) or true_states(metric)`

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    Status

    For 2.0?

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions