mirror of
https://github.com/Telecominfraproject/wlan-cloud-kube-state-metrics.git
synced 2025-10-30 18:17:47 +00:00
Merge pull request #1850 from rexagod/1847
Represent GVK information as labels
This commit is contained in:
@@ -49,6 +49,8 @@ spec:
|
||||
- --resources=certificatesigningrequests,configmaps,cronjobs,daemonsets,deployments,endpoints,foos,horizontalpodautoscalers,ingresses,jobs,limitranges,mutatingwebhookconfigurations,namespaces,networkpolicies,nodes,persistentvolumeclaims,persistentvolumes,poddisruptionbudgets,pods,replicasets,replicationcontrollers,resourcequotas,secrets,services,statefulsets,storageclasses,validatingwebhookconfigurations,volumeattachments,verticalpodautoscalers
|
||||
```
|
||||
|
||||
NOTE: The `group`, `version`, and `kind` common labels are reserved, and will be overwritten by the values from the `groupVersionKind` field.
|
||||
|
||||
### Examples
|
||||
|
||||
The examples in this section will use the following custom resource:
|
||||
@@ -115,7 +117,7 @@ spec:
|
||||
Produces the metric:
|
||||
|
||||
```prometheus
|
||||
kube_myteam_io_v1_Foo_uptime 43.21
|
||||
kube_crd_uptime{group="myteam.io", kind="Foo", version="v1"} 43.21
|
||||
```
|
||||
|
||||
#### Multiple Metrics/Kitchen Sink
|
||||
@@ -166,8 +168,8 @@ spec:
|
||||
Produces the following metrics:
|
||||
|
||||
```prometheus
|
||||
kube_myteam_io_v1_Foo_active_count{active="1",custom_metric="yes",foo="bar",name="foo",bar="baz",qux="quxx",type="type-a"} 1
|
||||
kube_myteam_io_v1_Foo_active_count{active="3",custom_metric="yes",foo="bar",name="foo",bar="baz",qux="quxx",type="type-b"} 3
|
||||
kube_crd_active_count{group="myteam.io", kind="Foo", version="v1", active="1",custom_metric="yes",foo="bar",name="foo",bar="baz",qux="quxx",type="type-a"} 1
|
||||
kube_crd_active_count{group="myteam.io", kind="Foo", version="v1", active="3",custom_metric="yes",foo="bar",name="foo",bar="baz",qux="quxx",type="type-b"} 3
|
||||
```
|
||||
|
||||
### Metric types
|
||||
@@ -202,7 +204,7 @@ spec:
|
||||
Produces the metric:
|
||||
|
||||
```prometheus
|
||||
kube_myteam_io_v1_Foo_uptime 43.21
|
||||
kube_crd_uptime{group="myteam.io", kind="Foo", version="v1"} 43.21
|
||||
```
|
||||
|
||||
#### StateSet
|
||||
@@ -228,15 +230,15 @@ spec:
|
||||
list: [Pending, Bar, Baz]
|
||||
```
|
||||
|
||||
Metrics of type `SateSet` will generate a metric for each value defined in `list` for each resource.
|
||||
Metrics of type `StateSet` will generate a metric for each value defined in `list` for each resource.
|
||||
The value will be 1, if the value matches the one in list.
|
||||
|
||||
Produces the metric:
|
||||
|
||||
```prometheus
|
||||
kube_myteam_io_v1_Foo_status_phase{phase="Pending"} 1
|
||||
kube_myteam_io_v1_Foo_status_phase{phase="Bar"} 0
|
||||
kube_myteam_io_v1_Foo_status_phase{phase="Baz"} 0
|
||||
kube_crd_status_phase{group="myteam.io", kind="Foo", version="v1", phase="Pending"} 1
|
||||
kube_crd_status_phase{group="myteam.io", kind="Foo", version="v1", phase="Bar"} 0
|
||||
kube_crd_status_phase{group="myteam.io", kind="Foo", version="v1", phase="Baz"} 0
|
||||
```
|
||||
|
||||
#### Info
|
||||
@@ -266,7 +268,7 @@ spec:
|
||||
Produces the metric:
|
||||
|
||||
```prometheus
|
||||
kube_myteam_io_v1_Foo_version{version="v1.2.3"} 1
|
||||
kube_crd_version{group="myteam.io", kind="Foo", version="v1", version="v1.2.3"} 1
|
||||
```
|
||||
|
||||
### Naming
|
||||
@@ -288,7 +290,7 @@ spec:
|
||||
|
||||
Produces:
|
||||
```prometheus
|
||||
myteam_foos_uptime 43.21
|
||||
myteam_foos_uptime{group="myteam.io", kind="Foo", version="v1"} 43.21
|
||||
```
|
||||
|
||||
To omit namespace and/or subsystem altogether, set them to the empty string:
|
||||
@@ -304,6 +306,11 @@ spec:
|
||||
...
|
||||
```
|
||||
|
||||
Produces:
|
||||
```prometheus
|
||||
uptime{group="myteam.io", kind="Foo", version="v1"} 43.21
|
||||
```
|
||||
|
||||
### Logging
|
||||
|
||||
If a metric path is registered but not found on a custom resource, an error will be logged. For some resources,
|
||||
|
||||
@@ -41,9 +41,8 @@ type MetricsSpec struct {
|
||||
// Resource configures a custom resource for metric generation.
|
||||
type Resource struct {
|
||||
// MetricNamePrefix defines a prefix for all metrics of the resource.
|
||||
// Falls back to the GroupVersionKind string prefixed with "kube_", with invalid characters replaced by _ if nil.
|
||||
// If set to "", no prefix will be added.
|
||||
// Example: If GroupVersionKind is "my-team.io/v1/MyResource", MetricNamePrefix will be "kube_my_team_io_v1_MyResource".
|
||||
// Example: If set to "foo", MetricNamePrefix will be "foo_<metric>".
|
||||
MetricNamePrefix *string `yaml:"metricNamePrefix" json:"metricNamePrefix"`
|
||||
|
||||
// GroupVersionKind of the custom resource to be monitored.
|
||||
@@ -63,17 +62,11 @@ type Resource struct {
|
||||
|
||||
// GetMetricNamePrefix returns the prefix to use for metrics.
|
||||
func (r Resource) GetMetricNamePrefix() string {
|
||||
if r.MetricNamePrefix == nil {
|
||||
return strings.NewReplacer(
|
||||
"/", "_",
|
||||
".", "_",
|
||||
"-", "_",
|
||||
).Replace(fmt.Sprintf("kube_%s_%s_%s", r.GroupVersionKind.Group, r.GroupVersionKind.Version, r.GroupVersionKind.Kind))
|
||||
p := r.MetricNamePrefix
|
||||
if p == nil {
|
||||
return "kube_crd"
|
||||
}
|
||||
if *r.MetricNamePrefix == "" {
|
||||
return ""
|
||||
}
|
||||
return *r.MetricNamePrefix
|
||||
return *p
|
||||
}
|
||||
|
||||
// GetResourceName returns the lowercase, plural form of the resource Kind. This is ResourcePlural if it is set.
|
||||
|
||||
@@ -34,6 +34,13 @@ import (
|
||||
|
||||
func compile(resource Resource) ([]compiledFamily, error) {
|
||||
var families []compiledFamily
|
||||
// Explicitly add GVK labels to all CR metrics.
|
||||
if resource.CommonLabels == nil {
|
||||
resource.CommonLabels = map[string]string{}
|
||||
}
|
||||
resource.CommonLabels["group"] = resource.GroupVersionKind.Group
|
||||
resource.CommonLabels["version"] = resource.GroupVersionKind.Version
|
||||
resource.CommonLabels["kind"] = resource.GroupVersionKind.Kind
|
||||
for _, f := range resource.Metrics {
|
||||
family, err := compileFamily(f, resource)
|
||||
if err != nil {
|
||||
|
||||
@@ -324,7 +324,7 @@ func Test_fullName(t *testing.T) {
|
||||
resource: r(nil),
|
||||
f: count,
|
||||
},
|
||||
want: "kube_apps_v1_Deployment_count",
|
||||
want: "kube_crd_count",
|
||||
},
|
||||
{
|
||||
name: "no prefix",
|
||||
|
||||
Reference in New Issue
Block a user