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)`
See https://github.com/prometheus/docs/pull/2679/changes#r2627250204
We are debating if stateset, represented in OM 1.0 as:
Should be composite as histograms and summaries in 2.0 e.g.
or
Discussion notes
Pros & Cons for making it composite
Pros
Cons
state(metric, stateName)or true_states(metric)`