diff --git a/docs/customizations/kube-state-metrics-custom-denylist.md b/docs/customizations/kube-state-metrics-custom-denylist.md new file mode 100644 index 0000000000..df422ffba1 --- /dev/null +++ b/docs/customizations/kube-state-metrics-custom-denylist.md @@ -0,0 +1,29 @@ +### Supplying a custom deny-list to Kube State Metrics (KSM) + +Users can supply their own custom deny-list that replaces the default one and filters out the specified metrics from being generated by KSM. + +The following example shows how to supply a custom deny-list: + +```yaml mdox-exec="cat examples/jsonnet-snippets/kube-state-metrics-custom-denylist.jsonnet" +(import 'kube-prometheus/main.libsonnet') + +(import 'kube-prometheus/addons/ksm-lite.libsonnet') + +{ + ksmConfig: { + ksmDenyList: [ + '^kube_(?=namespace).*_created$', + '^kube_.+_metadata_resource_version$', + '^kube_replicaset_metadata_generation$', + '^kube_replicaset_status_observed_generation$', + '^kube_pod_restart_policy$', + '^kube_pod_init_container_status_terminated$', + '^kube_pod_init_container_status_running$', + '^kube_pod_container_status_terminated$', + '^kube_pod_container_status_running$', + '^kube_pod_completion_time$', + '^kube_pod_status_scheduled$', + ], + }, +} +``` + +The example above makes use of a [feature](https://github.com/kubernetes/kube-state-metrics/pull/2616) introduced in the v2.16.0 release of KSM, which allows users to utilize lookarounds within regular expressions. As such, it keeps almost all of the default deny-list, but filters out only the `kube_namespace_created` metric allowing that to be generated. diff --git a/examples/jsonnet-snippets/kube-state-metrics-custom-denylist.jsonnet b/examples/jsonnet-snippets/kube-state-metrics-custom-denylist.jsonnet new file mode 100644 index 0000000000..5cbbd9339f --- /dev/null +++ b/examples/jsonnet-snippets/kube-state-metrics-custom-denylist.jsonnet @@ -0,0 +1,19 @@ +(import 'kube-prometheus/main.libsonnet') + +(import 'kube-prometheus/addons/ksm-lite.libsonnet') + +{ + ksmConfig: { + ksmDenyList: [ + '^kube_(?=namespace).*_created$', + '^kube_.+_metadata_resource_version$', + '^kube_replicaset_metadata_generation$', + '^kube_replicaset_status_observed_generation$', + '^kube_pod_restart_policy$', + '^kube_pod_init_container_status_terminated$', + '^kube_pod_init_container_status_running$', + '^kube_pod_container_status_terminated$', + '^kube_pod_container_status_running$', + '^kube_pod_completion_time$', + '^kube_pod_status_scheduled$', + ], + }, +} diff --git a/jsonnet/kube-prometheus/addons/ksm-lite.libsonnet b/jsonnet/kube-prometheus/addons/ksm-lite.libsonnet index a34655ad6f..26811009ed 100644 --- a/jsonnet/kube-prometheus/addons/ksm-lite.libsonnet +++ b/jsonnet/kube-prometheus/addons/ksm-lite.libsonnet @@ -1,33 +1,39 @@ -local addArgs(args, name, containers) = std.map( - function(c) if c.name == name then - c { - args+: args, - } - else c, - containers, -); +local addArgs(args, name, containers) = + std.map( + function(c) + if c.name == name then + c { + args+: args, + } + else + c, + containers, + ); { + ksmConfig+:: { + ksmDenyList: [ + '^kube_.+_created$', + '^kube_.+_metadata_resource_version$', + '^kube_replicaset_metadata_generation$', + '^kube_replicaset_status_observed_generation$', + '^kube_pod_restart_policy$', + '^kube_pod_init_container_status_terminated$', + '^kube_pod_init_container_status_running$', + '^kube_pod_container_status_terminated$', + '^kube_pod_container_status_running$', + '^kube_pod_completion_time$', + '^kube_pod_status_scheduled$', + ], + }, + kubeStateMetrics+: { deployment+: { spec+: { template+: { spec+: { containers: addArgs( - [||| - --metric-denylist= - ^kube_.+_created$, - ^kube_.+_metadata_resource_version$, - ^kube_replicaset_metadata_generation$, - ^kube_replicaset_status_observed_generation$, - ^kube_pod_restart_policy$, - ^kube_pod_init_container_status_terminated$, - ^kube_pod_init_container_status_running$, - ^kube_pod_container_status_terminated$, - ^kube_pod_container_status_running$, - ^kube_pod_completion_time$, - ^kube_pod_status_scheduled$ - |||], + ['--metric-denylist=\n' + std.join(',\n', $.ksmConfig.ksmDenyList) + '\n'], 'kube-state-metrics', super.containers ),