monitoring model bug fix
Signed-off-by: huanggze <loganhuang@yunify.com>
This commit is contained in:
@@ -17,14 +17,54 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
func MakeWorkloadPromQL(metricName, nsName, wlFilter string) string {
|
||||
if wlFilter == "" {
|
||||
wlFilter = ".*"
|
||||
// resources_filter = xxxx|xxxx
|
||||
func MakeWorkloadPromQL(metricName, nsName, resources_filter, wkKind string) string {
|
||||
|
||||
switch wkKind {
|
||||
case "deployment":
|
||||
wkKind = Deployment
|
||||
case "daemonset":
|
||||
wkKind = DaemonSet
|
||||
case "statefulset":
|
||||
wkKind = StatefulSet
|
||||
default:
|
||||
wkKind = "(.*)"
|
||||
}
|
||||
|
||||
if resources_filter == "" {
|
||||
resources_filter = ".*"
|
||||
} else {
|
||||
var prefix string
|
||||
|
||||
// The "workload_{deployment,statefulset,daemonset}_xxx" metric uses "deployment","statefulset" or "daemonset" label selectors
|
||||
// which match exactly a workload name
|
||||
// eg. kube_daemonset_status_number_unavailable{daemonset=~"^xxx$"}
|
||||
if strings.Contains(metricName, "deployment") || strings.Contains(metricName, "daemonset") || strings.Contains(metricName, "statefulset") {
|
||||
// to pass "resources_filter" to PromQL, we reformat it
|
||||
prefix = ""
|
||||
} else {
|
||||
// While workload_{cpu,memory,net}_xxx metrics uses "workload"
|
||||
// eg. namespace:workload_cpu_usage:sum{workload="Deployment:xxx"}
|
||||
prefix = wkKind + ":"
|
||||
}
|
||||
|
||||
filters := strings.Split(resources_filter, "|")
|
||||
// reshape it to match PromQL re2 syntax
|
||||
resources_filter = ""
|
||||
for i, filter := range filters {
|
||||
|
||||
resources_filter += "^" + prefix + filter + "$" // eg. ^Deployment:xxx$
|
||||
|
||||
if i != len(filters)-1 {
|
||||
resources_filter += resources_filter + "|"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var promql = RulePromQLTmplMap[metricName]
|
||||
promql = strings.Replace(promql, "$2", nsName, -1)
|
||||
promql = strings.Replace(promql, "$3", wlFilter, -1)
|
||||
promql = strings.Replace(promql, "$3", resources_filter, -1)
|
||||
|
||||
return promql
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user