-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Closed as not planned
Labels
kind/featureCategorizes issue or PR as related to a new feature.Categorizes issue or PR as related to a new feature.lifecycle/rottenDenotes an issue or PR that has aged beyond stale and will be auto-closed.Denotes an issue or PR that has aged beyond stale and will be auto-closed.needs-triageIndicates an issue or PR lacks a `triage/foo` label and requires one.Indicates an issue or PR lacks a `triage/foo` label and requires one.
Description
What would you like to be added:
Doc: #2059
A simplified API for CustomResourceStateMetrics, which only supports values
and labels
, instead of supporting each
, path
, labelFromKey
, labelsFromPath
, valueFrom
, commonLabels
, labelsFromPath
and *
.
# new
kind: CustomResourceStateMetricsV2
spec:
resources:
- groupVersionKind:
group: myteam.io
kind: "Foo"
version: "v1"
metrics:
- name: "ready_count"
help: "Number Foo Bars ready"
values: jq '[.status.sub[].ready]' # valueFrom: [ready] // [2,4]
labels:
- jq '[ .status.sub | keys | .[] | {name: .}]' # labelFromKey: type // [{"name": "type-a"}, {"name": "type-b"}]
- jq '[{ custom_metric:"yes" }]' # custom_metric: "yes" // [{custom_metric="yes"}]
- jq '[.metadata.labels]' # "*": [metadata, labels] // [{"bar": "baz","qux": "quxx"}]
- jq '[.metadata.annotations]' # "**": [metadata, annotations] // [{"foo": "bar"}]
- jq '[{ name: .metadata.name }]' # name: [metadata, name] // [{"name": "foo"}]
- jq '[{ foo: .metadata.labels.foo }]' # foo: [metadata, labels, foo] // [{foo": "bar"}]
- jq '[.status.sub[].active | {active: .}]' # labelsFromPath: active: [active] // [{active": 1}, {"active": 3}]
# old
metrics:
- name: "status_phase"
help: "Foo status_phase"
each:
type: StateSet
stateSet:
labelName: phase
path: [status, phase]
list: [Pending, Bar, Baz]
In the above case, it will have these 2 metrics. The cardinality of each label (|label|) must equal to 1 or max(|values|, |label_i|). If |label| = 1, then this label is copied into N metric streams.
kube_customresource_ready_count{customresource_group="myteam.io", customresource_kind="Foo", customresource_version="v1", active="1",custom_metric="yes",foo="bar",name="foo",bar="baz",qux="quxx",type="type-a"} 2
kube_customresource_ready_count{customresource_group="myteam.io", customresource_kind="Foo", customresource_version="v1", active="3",custom_metric="yes",foo="bar",name="foo",bar="baz",qux="quxx",type="type-b"} 4
Why is this needed:
- simpler and easier for KSM community to maintain. Have seen several issues around corner cases with custom resource metrics (Crash on nonexistent metric paths in custom resources #1992).
- easier for users to use and debug custom resource metrics
Describe the solution you'd like
Additional context
Han recommended cel
nathanperkins, codysmithd, taharah, akselleirv and j4ckstrawnathanperkins and codysmithd
Metadata
Metadata
Assignees
Labels
kind/featureCategorizes issue or PR as related to a new feature.Categorizes issue or PR as related to a new feature.lifecycle/rottenDenotes an issue or PR that has aged beyond stale and will be auto-closed.Denotes an issue or PR that has aged beyond stale and will be auto-closed.needs-triageIndicates an issue or PR lacks a `triage/foo` label and requires one.Indicates an issue or PR lacks a `triage/foo` label and requires one.