Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

标签过滤有问题 #17

Open
langhuadb opened this issue Jul 30, 2021 · 3 comments
Open

标签过滤有问题 #17

langhuadb opened this issue Jul 30, 2021 · 3 comments

Comments

@langhuadb
Copy link

image
我选择了istio-system这个namespace,但是并没有过滤出istio相关的app,还是全量的app,在grafana上就没有这个问题

@langhuadb
Copy link
Author

image
这个同样label在grafana上的查询结果,发现是ok的

@LinkMaq
Copy link
Contributor

LinkMaq commented Aug 6, 2021

近期一次dagger更新,选择标签的逻辑参考grafana,修复这个问题。

@Shencaowalker
Copy link

新手 已解决
具体修改两处:
1.前端传参处修改,得到全部已输入标签Kv,并组成string传入LabelValues
ui/src/views/logs/viewer/components/LokiFilter.vue 356行
else {
let res = '';
this.model.map(item => {
if (item.text) {
res = res + item.value + ':' + item.text.split(':')[1] + ','
} else {
res = res + item.value
}
})
console.warn(res, this.model);
await this.listLabelValues({
label: res,
start: this.dateRangeTimestamp[0],
end: this.dateRangeTimestamp[1],
})
this.filterItems = []
this.filterDict.label.items.forEach((i) => {
this.filterItems.push(i)
})
}
2.重写后端LabelValues,切割并解析 backend/utils/lokiapi.go 99行
func LabelValues(label string, start string, end string) []interface{} {
allLabel := strings.Split(label, ",")
getLableValueText := allLabel[len(allLabel)-2]
getLableValue := strings.Split(getLableValueText, ":")[0]
var labelseriesURL = runtime.LokiServer + "/loki/api/v1/series?match[]={"
for key, val := range allLabel[:len(allLabel)-2] {
if key != 0 {
labelseriesURL = labelseriesURL + ","
}
valKeyValue := strings.Split(val, ":")
labelseriesURL = labelseriesURL + valKeyValue[0] + "="" + valKeyValue[1] + """
}
labelseriesURL = labelseriesURL + "}"
// labelseriesall,_ := HttpRequest(labelseriesURL, "GET", tenantHeader, nil, "json")

if len(allLabel) == 2 {
	queryURL := fmt.Sprintf("%s/loki/api/v1/label/%s/values?start=%s&end=%s", runtime.LokiServer, getLableValue, start, end)
	repeat := 0
	var data string
	var err error
	for {
		if repeat < 5 {
			data, err = HttpRequest(queryURL, "GET", tenantHeader, nil, "json")
			fmt.Println(data)

			if err != nil {
				repeat++
				Log4Zap(zap.WarnLevel).Warn(fmt.Sprintf("get loki label values error %s", err))
				time.Sleep(time.Millisecond * 100)
				continue
			}
			break
		} else {
			return nil
		}
	}
	var jsonRes map[string]interface{}
	err = json.Unmarshal([]byte(data), &jsonRes)
	if err != nil {
		Log4Zap(zap.WarnLevel).Warn(fmt.Sprintf("Unmarshal loki label values response error %s", err))
		return nil
	}
	var values []interface{}
	if _, ok := jsonRes["data"]; ok {
		values = jsonRes["data"].([]interface{})
		return values
	}
	return nil

} else {
	repeat := 0
	var data string
	var err error
	for {
		if repeat < 5 {
			data, err = HttpRequest(labelseriesURL, "GET", tenantHeader, nil, "json")
			fmt.Println(data)

			if err != nil {
				repeat++
				Log4Zap(zap.WarnLevel).Warn(fmt.Sprintf("get loki label values error %s", err))
				time.Sleep(time.Millisecond * 100)
				continue
			}
			break
		} else {
			return nil
		}
	}

	var jsonRes map[string]interface{}
	err = json.Unmarshal([]byte(data), &jsonRes)

	if err != nil {
		Log4Zap(zap.WarnLevel).Warn(fmt.Sprintf("Unmarshal loki label values response error %s", err))
		return nil
	}
	var values []interface{}
	if _, ok := jsonRes["data"]; ok {
		lablesArray := jsonRes["data"].([]interface{})
		for _, labels := range lablesArray {
			if label, ok := labels.(map[string]interface{})[getLableValue]; ok {

				values = append(values, label)
			}
		}
		fmt.Println("the lastst values is", values)
		if len(values) == 0 {
			return nil
		} else {
			return values
		}
	}

	return nil
}

}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants