Skip to content

Commit ffcf546

Browse files
committed
fix: metrics parse bug of merge endpoint bugs and webhook configuration merge bug and merge type checks
1 parent 5b712c1 commit ffcf546

2 files changed

Lines changed: 46 additions & 5 deletions

File tree

define/resource.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ func (r *Resource) AddLabelSpec(l Label) {
3232
if _, ok := r.Spec[l.Key]; !ok {
3333
r.Spec[l.Key] = make([]string, 0)
3434
}
35+
for _, v := range r.Spec[l.Key] { // check if the value already exists
36+
if v == l.Value {
37+
return
38+
}
39+
}
3540
r.Spec[l.Key] = append(r.Spec[l.Key], l.Value)
3641
}
3742

pkg/metrics/kube-state-metrics/matcher.go

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ func DefaultMatchRules() metrics.MatchRules {
1111
metrics.NewMetricMatcher("secret").AddLabel("namespace").AddLabel("secret"),
1212

1313
metrics.NewMetricMatcher("node").AddLabel("node").AddLabel("kernel_version").
14+
AddLabel("kubelet_version").AddLabel("kubeproxy_version").
1415
AddLabel("os_image").AddLabel("container_runtime_version").
1516
AddLabel("provider_id").AddLabel("internal_ip"),
1617
metrics.NewMetricMatcher("node_role").SetHeader("kube_node_role").
@@ -36,23 +37,25 @@ func DefaultMatchRules() metrics.MatchRules {
3637

3738
metrics.NewMetricMatcher("service").AddLabel("namespace").AddLabel("service").
3839
AddLabel("cluster_ip").AddLabel("external_name").AddLabel("load_balancer_ip"),
39-
metrics.NewMetricMatcher("endpoint_address").SetHeader("kube_endpoint_address").
40+
metrics.NewMetricMatcher("endpoint_address").SetHeader("kube_endpoint_address").SetNameLabel("endpoint").
4041
AddLabel("namespace").AddLabel("endpoint").AddLabel("ip"),
41-
metrics.NewMetricMatcher("endpoint_port").SetHeader("kube_endpoint_ports").
42+
metrics.NewMetricMatcher("endpoint_port").SetHeader("kube_endpoint_ports").SetNameLabel("endpoint").
4243
AddLabel("namespace").AddLabel("endpoint").AddLabel("port_number"),
4344

4445
metrics.NewMetricMatcher("persistentvolume").AddLabel("persistentvolume").AddLabel("storageclass").
4546
AddLabel("gce_persistent_disk_name").AddLabel("ebs_volume_id").AddLabel("azure_disk_name").
4647
AddLabel("nfs_server").AddLabel("nfs_path").AddLabel("csi_driver").AddLabel("csi_volume_handle").
4748
AddLabel("local_path").AddLabel("local_fs").AddLabel("host_path").AddLabel("host_path_type"),
4849

49-
metrics.NewMetricMatcher("validating_webhook").SetNameLabel("service_name").
50+
metrics.NewMetricMatcher("validating_webhook").
5051
SetHeader("kube_validatingwebhookconfiguration_webhook_clientconfig_service").
52+
AddLabel("validatingwebhookconfiguration").SetNameLabel("validatingwebhookconfiguration").
5153
AddLabel("namespace").AddLabel("webhook_name").
5254
AddLabel("service_name").AddLabel("service_namespace"),
5355

54-
metrics.NewMetricMatcher("mutating_webhook").SetNameLabel("service_name").
56+
metrics.NewMetricMatcher("mutating_webhook").
5557
SetHeader("kube_mutatingwebhookconfiguration_webhook_clientconfig_service").
58+
AddLabel("mutatingwebhookconfiguration").SetNameLabel("mutatingwebhookconfiguration").
5659
AddLabel("namespace").AddLabel("webhook_name").
5760
AddLabel("service_name").AddLabel("service_namespace"),
5861
}
@@ -62,6 +65,9 @@ var NodeMergeHook metrics.ResourceMergeHook = func(m *metrics.MetricMatcher, res
6265
if m.Type == "node" || m.Type == "node_role" {
6366
for i := len(res) - 1; i >= 0; i-- {
6467
c := res[i]
68+
if c.Type != "node" {
69+
continue
70+
}
6571
if m.FindLabel("node") == c.Name {
6672
r = res[i]
6773
return r, false
@@ -76,6 +82,9 @@ var EndpointMergeHook metrics.ResourceMergeHook = func(m *metrics.MetricMatcher,
7682
if m.Type == "endpoint_address" || m.Type == "endpoint_port" {
7783
for i := len(res) - 1; i >= 0; i-- {
7884
c := res[i]
85+
if c.Type != "endpoint" {
86+
continue
87+
}
7988
if m.FindLabel("namespace") == c.Namespace && m.FindLabel("endpoint") == c.Name {
8089
r = res[i]
8190
return r, false
@@ -95,6 +104,33 @@ var EndpointMergeHook metrics.ResourceMergeHook = func(m *metrics.MetricMatcher,
95104
return nil, true
96105
}
97106

107+
var WebhookMergeHook metrics.ResourceMergeHook = func(m *metrics.MetricMatcher, res define.ResourceList) (r *define.Resource, addFlag bool) {
108+
if m.Type == "mutating_webhook" {
109+
for i := len(res) - 1; i >= 0; i-- {
110+
if res[i].Type != "mutating_webhook" {
111+
continue
112+
}
113+
if m.FindLabel(m.LabelNameOfName()) == res[i].Name {
114+
r = res[i]
115+
return r, false
116+
}
117+
}
118+
return define.NewResource("mutating_webhook"), true
119+
} else if m.Type == "validating_webhook" {
120+
for i := len(res) - 1; i >= 0; i-- {
121+
if res[i].Type != "validating_webhook" {
122+
continue
123+
}
124+
if m.FindLabel(m.LabelNameOfName()) == res[i].Name {
125+
r = res[i]
126+
return r, false
127+
}
128+
}
129+
return define.NewResource("validating_webhook"), true
130+
}
131+
return nil, true
132+
}
133+
98134
func init() {
99-
metrics.HookList = append(metrics.HookList, NodeMergeHook, EndpointMergeHook)
135+
metrics.HookList = append(metrics.HookList, NodeMergeHook, EndpointMergeHook, WebhookMergeHook)
100136
}

0 commit comments

Comments
 (0)