Merge pull request #2076 from huanggze/custom-monitoring

api: list metric labels and values
This commit is contained in:
KubeSphere CI Bot
2020-05-15 19:52:32 +08:00
committed by GitHub
12 changed files with 362 additions and 1 deletions

View File

@@ -8,4 +8,5 @@ type Interface interface {
GetNamedMetrics(metrics []string, time time.Time, opt QueryOption) []Metric
GetNamedMetricsOverTime(metrics []string, start, end time.Time, step time.Duration, opt QueryOption) []Metric
GetMetadata(namespace string) []Metadata
GetMetricLabelSet(expr string, start, end time.Time) []map[string]string
}

View File

@@ -6,6 +6,7 @@ import (
"github.com/prometheus/client_golang/api"
apiv1 "github.com/prometheus/client_golang/api/prometheus/v1"
"github.com/prometheus/common/model"
"k8s.io/klog"
"kubesphere.io/kubesphere/pkg/simple/client/monitoring"
"sync"
"time"
@@ -135,6 +136,7 @@ func (p prometheus) GetMetadata(namespace string) []monitoring.Metadata {
matchTarget := fmt.Sprintf("{namespace=\"%s\"}", namespace)
items, err := p.client.TargetsMetadata(context.Background(), matchTarget, "", "")
if err != nil {
klog.Error(err)
return meta
}
@@ -155,6 +157,30 @@ func (p prometheus) GetMetadata(namespace string) []monitoring.Metadata {
return meta
}
func (p prometheus) GetMetricLabelSet(expr string, start, end time.Time) []map[string]string {
var res []map[string]string
labelSet, err := p.client.Series(context.Background(), []string{expr}, start, end)
if err != nil {
klog.Error(err)
return []map[string]string{}
}
for _, item := range labelSet {
var tmp = map[string]string{}
for key, val := range item {
if key == "__name__" {
continue
}
tmp[string(key)] = string(val)
}
res = append(res, tmp)
}
return res
}
func parseQueryRangeResp(value model.Value) monitoring.MetricData {
res := monitoring.MetricData{MetricType: monitoring.MetricTypeMatrix}

View File

@@ -120,6 +120,41 @@ func TestGetMetadata(t *testing.T) {
}
}
func TestGetMetricLabelSet(t *testing.T) {
tests := []struct {
fakeResp string
expected string
}{
{
fakeResp: "labels-prom.json",
expected: "labels-res.json",
},
{
fakeResp: "labels-error-prom.json",
expected: "labels-error-res.json",
},
}
for i, tt := range tests {
t.Run(fmt.Sprintf("%d", i), func(t *testing.T) {
var expected []map[string]string
err := jsonFromFile(tt.expected, &expected)
if err != nil {
t.Fatal(err)
}
srv := mockPrometheusService("/api/v1/series", tt.fakeResp)
defer srv.Close()
client, _ := NewPrometheus(&Options{Endpoint: srv.URL})
result := client.GetMetricLabelSet("default", time.Now(), time.Now())
if diff := cmp.Diff(result, expected); diff != "" {
t.Fatalf("%T differ (-got, +want): %s", expected, diff)
}
})
}
}
func mockPrometheusService(pattern, fakeResp string) *httptest.Server {
mux := http.NewServeMux()
mux.HandleFunc(pattern, func(res http.ResponseWriter, req *http.Request) {

View File

@@ -0,0 +1,5 @@
{
"status":"error",
"errorType":"bad_data",
"error":"1:6: parse error: unexpected left brace '{'"
}

View File

@@ -0,0 +1 @@
[]

View File

@@ -0,0 +1,125 @@
{
"status":"success",
"data":[
{
"__name__":"kube_configmap_info",
"configmap":"grafana-dashboard-cluster-total",
"endpoint":"https-main",
"instance":"10.233.99.140:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-prwbc",
"service":"kube-state-metrics"
},
{
"__name__":"kube_configmap_info",
"configmap":"grafana-dashboard-cluster-total",
"endpoint":"https-main",
"instance":"10.233.99.172:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-6x2gr",
"service":"kube-state-metrics"
},
{
"__name__":"kube_configmap_info",
"configmap":"grafana-dashboard-cluster-total",
"endpoint":"https-main",
"instance":"10.233.99.173:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-6646f8489d-2l482",
"service":"kube-state-metrics"
},
{
"__name__":"kube_configmap_info",
"configmap":"grafana-dashboard-cluster-total",
"instance":"10.233.99.140:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-prwbc"
},
{
"__name__":"kube_configmap_info",
"configmap":"grafana-dashboard-k8s-resources-workload",
"endpoint":"https-main",
"instance":"10.233.99.173:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-6646f8489d-2l482",
"service":"kube-state-metrics"
},
{
"__name__":"kube_configmap_info",
"configmap":"grafana-dashboard-k8s-resources-workload",
"instance":"10.233.99.140:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-prwbc"
},
{
"__name__":"kube_configmap_info",
"configmap":"grafana-dashboard-k8s-resources-workload",
"instance":"10.233.99.172:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-6x2gr"
},
{
"__name__":"kube_configmap_info",
"configmap":"grafana-dashboard-namespace-by-pod",
"instance":"10.233.99.172:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-6x2gr"
},
{
"__name__":"kube_configmap_info",
"configmap":"grafana-dashboard-persistentvolumesusage",
"endpoint":"https-main",
"instance":"10.233.99.140:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-prwbc",
"service":"kube-state-metrics"
},
{
"__name__":"kube_configmap_info",
"configmap":"grafana-dashboard-persistentvolumesusage",
"endpoint":"https-main",
"instance":"10.233.99.172:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-6x2gr",
"service":"kube-state-metrics"
},
{
"__name__":"kube_configmap_info",
"configmap":"grafana-dashboard-persistentvolumesusage",
"endpoint":"https-main",
"instance":"10.233.99.173:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-6646f8489d-2l482",
"service":"kube-state-metrics"
},
{
"__name__":"kube_configmap_info",
"configmap":"grafana-dashboard-proxy",
"instance":"10.233.99.172:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-6x2gr"
},
{
"__name__":"kube_configmap_info",
"configmap":"grafana-dashboard-scheduler",
"endpoint":"https-main",
"instance":"10.233.99.140:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-prwbc",
"service":"kube-state-metrics"
}
]
}

View File

@@ -0,0 +1,109 @@
[
{
"configmap":"grafana-dashboard-cluster-total",
"endpoint":"https-main",
"instance":"10.233.99.140:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-prwbc",
"service":"kube-state-metrics"
},
{
"configmap":"grafana-dashboard-cluster-total",
"endpoint":"https-main",
"instance":"10.233.99.172:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-6x2gr",
"service":"kube-state-metrics"
},
{
"configmap":"grafana-dashboard-cluster-total",
"endpoint":"https-main",
"instance":"10.233.99.173:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-6646f8489d-2l482",
"service":"kube-state-metrics"
},
{
"configmap":"grafana-dashboard-cluster-total",
"instance":"10.233.99.140:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-prwbc"
},
{
"configmap":"grafana-dashboard-k8s-resources-workload",
"endpoint":"https-main",
"instance":"10.233.99.173:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-6646f8489d-2l482",
"service":"kube-state-metrics"
},
{
"configmap":"grafana-dashboard-k8s-resources-workload",
"instance":"10.233.99.140:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-prwbc"
},
{
"configmap":"grafana-dashboard-k8s-resources-workload",
"instance":"10.233.99.172:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-6x2gr"
},
{
"configmap":"grafana-dashboard-namespace-by-pod",
"instance":"10.233.99.172:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-6x2gr"
},
{
"configmap":"grafana-dashboard-persistentvolumesusage",
"endpoint":"https-main",
"instance":"10.233.99.140:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-prwbc",
"service":"kube-state-metrics"
},
{
"configmap":"grafana-dashboard-persistentvolumesusage",
"endpoint":"https-main",
"instance":"10.233.99.172:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-6x2gr",
"service":"kube-state-metrics"
},
{
"configmap":"grafana-dashboard-persistentvolumesusage",
"endpoint":"https-main",
"instance":"10.233.99.173:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-6646f8489d-2l482",
"service":"kube-state-metrics"
},
{
"configmap":"grafana-dashboard-proxy",
"instance":"10.233.99.172:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-6x2gr"
},
{
"configmap":"grafana-dashboard-scheduler",
"endpoint":"https-main",
"instance":"10.233.99.140:8443",
"job":"kube-state-metrics",
"namespace":"kubesphere-monitoring-system",
"pod":"kube-state-metrics-869dc86c5b-prwbc",
"service":"kube-state-metrics"
}
]