mirror of https://github.com/k3s-io/k3s
Merge pull request #59897 from jpbetz/etcd-version-monitor-grpc-fields
Automatic merge from submit-queue (batch tested with PRs 60214, 58762, 59898, 59897, 60204). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Improve etcd-version-monitor etcd 3.0-3.1 compatibility In etcd-version-monitor, this remove grpc labels used only in etcd 3.1+ format when translating metric back to 3.0 formatpull/6/head
commit
10d50c76b1
|
@ -16,6 +16,7 @@ go_library(
|
|||
srcs = ["etcd-version-monitor.go"],
|
||||
importpath = "k8s.io/kubernetes/cluster/images/etcd-version-monitor",
|
||||
deps = [
|
||||
"//vendor/github.com/gogo/protobuf/proto:go_default_library",
|
||||
"//vendor/github.com/golang/glog:go_default_library",
|
||||
"//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
|
||||
"//vendor/github.com/prometheus/client_golang/prometheus/promhttp:go_default_library",
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
ARCH:=amd64
|
||||
GOLANG_VERSION?=1.8.3
|
||||
REGISTRY?=staging-k8s.gcr.io
|
||||
TAG?=0.1.1
|
||||
TAG?=0.1.2
|
||||
IMAGE:=$(REGISTRY)/etcd-version-monitor:$(TAG)
|
||||
CURRENT_DIR:=$(pwd)
|
||||
TEMP_DIR:=$(shell mktemp -d)
|
||||
|
|
|
@ -17,12 +17,14 @@ limitations under the License.
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
goflag "flag"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/gogo/protobuf/proto"
|
||||
"github.com/golang/glog"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||
|
@ -97,6 +99,13 @@ var (
|
|||
"grpc_method": "method",
|
||||
"grpc_service": "service",
|
||||
})
|
||||
filterMetricsByLabels(mf, map[string]string{
|
||||
"grpc_type": "unary",
|
||||
})
|
||||
groupCounterMetricsByLabels(mf, map[string]bool{
|
||||
"grpc_type": true,
|
||||
"grpc_code": true,
|
||||
})
|
||||
return mf, nil
|
||||
},
|
||||
},
|
||||
|
@ -280,6 +289,62 @@ func renameLabels(mf *dto.MetricFamily, nameMapping map[string]string) {
|
|||
}
|
||||
}
|
||||
|
||||
func filterMetricsByLabels(mf *dto.MetricFamily, labelValues map[string]string) {
|
||||
buf := mf.Metric[:0]
|
||||
for _, m := range mf.Metric {
|
||||
shouldRemove := false
|
||||
for _, lbl := range m.Label {
|
||||
if val, ok := labelValues[*lbl.Name]; ok && val != *lbl.Value {
|
||||
shouldRemove = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !shouldRemove {
|
||||
buf = append(buf, m)
|
||||
}
|
||||
}
|
||||
mf.Metric = buf
|
||||
}
|
||||
|
||||
func groupCounterMetricsByLabels(mf *dto.MetricFamily, names map[string]bool) {
|
||||
buf := mf.Metric[:0]
|
||||
deleteLabels(mf, names)
|
||||
byLabels := map[string]*dto.Metric{}
|
||||
for _, m := range mf.Metric {
|
||||
if metric, ok := byLabels[labelsKey(m.Label)]; ok {
|
||||
metric.Counter.Value = proto.Float64(*metric.Counter.Value + *m.Counter.Value)
|
||||
} else {
|
||||
byLabels[labelsKey(m.Label)] = m
|
||||
buf = append(buf, m)
|
||||
}
|
||||
}
|
||||
mf.Metric = buf
|
||||
}
|
||||
|
||||
func labelsKey(lbls []*dto.LabelPair) string {
|
||||
var buf bytes.Buffer
|
||||
for i, lbl := range lbls {
|
||||
buf.WriteString(lbl.String())
|
||||
if i < len(lbls)-1 {
|
||||
buf.WriteString(",")
|
||||
}
|
||||
}
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
func deleteLabels(mf *dto.MetricFamily, names map[string]bool) {
|
||||
for _, m := range mf.Metric {
|
||||
buf := m.Label[:0]
|
||||
for _, lbl := range m.Label {
|
||||
shouldRemove := names[*lbl.Name]
|
||||
if !shouldRemove {
|
||||
buf = append(buf, lbl)
|
||||
}
|
||||
}
|
||||
m.Label = buf
|
||||
}
|
||||
}
|
||||
|
||||
func identity(mf *dto.MetricFamily) (*dto.MetricFamily, error) {
|
||||
return mf, nil
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ spec:
|
|||
hostNetwork: true
|
||||
containers:
|
||||
- name: etcd-version-monitor
|
||||
image: k8s.gcr.io/etcd-version-monitor:0.1.0
|
||||
image: k8s.gcr.io/etcd-version-monitor:0.1.2
|
||||
command:
|
||||
- /etcd-version-monitor
|
||||
- --logtostderr
|
||||
|
|
Loading…
Reference in New Issue