feat: support ident disk usage metric (#1100)

* feat: support ident disk usage metric

* code refactor

Co-authored-by: ziv <xiaozheng@tuya.com>
This commit is contained in:
xiaoziv 2022-08-10 17:00:49 +08:00 committed by GitHub
parent f34c3c6a2c
commit b1b2c7d6b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 38 deletions

View File

@ -207,3 +207,4 @@ Timeout = 3000
TargetUp = '''max(max_over_time(target_up{ident=~"(%s)"}[%dm])) by (ident)'''
LoadPerCore = '''max(max_over_time(system_load_norm_1{ident=~"(%s)"}[%dm])) by (ident)'''
MemUtil = '''100-max(max_over_time(mem_available_percent{ident=~"(%s)"}[%dm])) by (ident)'''
DiskUsedPercent = '''max(max_over_time(disk_used_percent{ident=~"(%s)", path="/"}[%dm])) by (ident)'''

View File

@ -24,6 +24,7 @@ type Target struct {
LoadPerCore float64 `json:"load_per_core" gorm:"-"`
MemUtil float64 `json:"mem_util" gorm:"-"`
TargetUp float64 `json:"target_up" gorm:"-"`
DiskUsedPercent float64 `json:"disk_used_percent" gorm:"-"`
}
func (t *Target) TableName() string {

View File

@ -40,7 +40,7 @@ func targetGets(c *gin.Context) {
now := time.Now()
// query LoadPerCore / MemUtil / TargetUp from prometheus
// query LoadPerCore / MemUtil / TargetUp / DiskUsedPercent from prometheus
// map key: cluster, map value: ident list
targets := make(map[string][]string)
for i := 0; i < len(list); i++ {
@ -58,42 +58,32 @@ func targetGets(c *gin.Context) {
continue
}
// load per core
promql := fmt.Sprintf(config.C.TargetMetrics["LoadPerCore"], strings.Join(targetArr, "|"), mins)
values, err := instantQuery(c, cc, promql, now)
ginx.Dangerous(err)
targetRe := strings.Join(targetArr, "|")
valuesMap := make(map[string]map[string]float64)
for metric, ql := range config.C.TargetMetrics {
promql := fmt.Sprintf(ql, targetRe, mins)
values, err := instantQuery(context.Background(), cc, promql, now)
ginx.Dangerous(err)
valuesMap[metric] = values
}
// handle values
for metric, values := range valuesMap {
for ident := range values {
mapkey := cluster + ident
t, has := targetsMap[mapkey]
if has {
if t, has := targetsMap[mapkey]; has {
switch metric {
case "LoadPerCore":
t.LoadPerCore = values[ident]
}
}
// mem util
promql = fmt.Sprintf(config.C.TargetMetrics["MemUtil"], strings.Join(targetArr, "|"), mins)
values, err = instantQuery(c, cc, promql, now)
ginx.Dangerous(err)
for ident := range values {
mapkey := cluster + ident
t, has := targetsMap[mapkey]
if has {
case "MemUtil":
t.MemUtil = values[ident]
}
}
// target up
promql = fmt.Sprintf(config.C.TargetMetrics["TargetUp"], strings.Join(targetArr, "|"), mins)
values, err = instantQuery(c, cc, promql, now)
ginx.Dangerous(err)
for ident := range values {
mapkey := cluster + ident
t, has := targetsMap[mapkey]
if has {
case "TargetUp":
t.TargetUp = values[ident]
case "DiskUsedPercent":
t.DiskUsedPercent = values[ident]
}
}
}
}
}