From 86030a9b86362cb90a1402783c3de2ebdeb9afac Mon Sep 17 00:00:00 2001 From: Roland Schilter Date: Tue, 11 Jul 2017 14:13:51 +0200 Subject: [PATCH] Expand on the prom query source in comments --- render/detailed/links.go | 79 ++++++++++++++++++++++++++++++---------- 1 file changed, 60 insertions(+), 19 deletions(-) diff --git a/render/detailed/links.go b/render/detailed/links.go index ba2df99c3..51403cdca 100644 --- a/render/detailed/links.go +++ b/render/detailed/links.go @@ -37,29 +37,70 @@ var ( // Prometheus queries for topologies topologyQueries = map[string]map[string]*template.Template{ report.Pod: { - // Metric names provided by cAdvisor in kubelet - docker.MemoryUsage: prepareTemplate(`sum(container_memory_usage_bytes{pod_name="{{.Label}}"})`), - docker.CPUTotalUsage: prepareTemplate(`sum(rate(container_cpu_usage_seconds_total{pod_name="{{.Label}}"}[1m]))`), - }, - report.ReplicaSet: { - // Metric names provided by cAdvisor in kubelet - docker.MemoryUsage: prepareTemplate(`sum(container_memory_usage_bytes{pod_name=~"{{.Label}}-[^-]+-[^-]"})`), - docker.CPUTotalUsage: prepareTemplate(`sum(rate(container_cpu_usage_seconds_total{pod_name=~"{{.Label}}-[^-]+-[^-]"}[1m]))`), + // `container_memory_usage_bytes` is provided by cAdvisor in Kubelets. + docker.MemoryUsage: parsedTemplate(`sum(container_memory_usage_bytes{pod_name="{{.Label}}"})`), + // `container_cpu_usage_seconds_total` is provided by cAdvisor in Kubelets. + docker.CPUTotalUsage: parsedTemplate(`sum(rate(container_cpu_usage_seconds_total{pod_name="{{.Label}}"}[1m]))`), }, report.Deployment: { - // Metric names provided by cAdvisor in kubelet - docker.MemoryUsage: prepareTemplate(`sum(container_memory_usage_bytes{pod_name=~"{{.Label}}-[^-]+-[^-]+"})`), - docker.CPUTotalUsage: prepareTemplate(`sum(rate(container_cpu_usage_seconds_total{pod_name=~"{{.Label}}-[^-]+-[^-]+"}[1m]))`), + // `container_memory_usage_bytes` is provided by cAdvisor in Kubelets. + docker.MemoryUsage: parsedTemplate(`sum(container_memory_usage_bytes{pod_name=~"{{.Label}}-[^-]+-[^-]+"})`), + // `container_cpu_usage_seconds_total` is provided by cAdvisor in Kubelets. + docker.CPUTotalUsage: parsedTemplate(`sum(rate(container_cpu_usage_seconds_total{pod_name=~"{{.Label}}-[^-]+-[^-]+"}[1m]))`), }, report.DaemonSet: { - // Metric names defined as recording rule. Filters by `monitor=""` for cortex-only data. - docker.MemoryUsage: prepareTemplate(`namespace_name:container_memory_usage_bytes:sum{name="{{.Label}}",monitor=""}`), - docker.CPUTotalUsage: prepareTemplate(`namespace_name:container_cpu_usage_seconds_total:sum_rate{name="{{.Label}}"}`), + /* + A recording rule defines `namespace_name:container_memory_usage_bytes:sum`: + + namespace_name:container_memory_usage_bytes:sum = + sum by (namespace, name) ( + sum(container_memory_usage_bytes{image!=""}) by (pod_name, namespace) + * on (pod_name) group_left(name) + k8s_pod_labels{job="monitoring/kube-api-exporter"} + ) + + Additionally, we filter by `monitor=""` for cortex-only data. + */ + + docker.MemoryUsage: parsedTemplate(`namespace_name:container_memory_usage_bytes:sum{name="{{.Label}}",monitor=""}`), + /* + A recording rule defines `namespace_name:container_cpu_usage_seconds_total:sum_rate`: + + namespace_name:container_cpu_usage_seconds_total:sum_rate = + sum by (namespace, name) ( + sum(rate(container_cpu_usage_seconds_total{image!=""}[5m])) by (pod_name, namespace) + * on (pod_name) group_left(name) + k8s_pod_labels{job="monitoring/kube-api-exporter"} + ) + */ + docker.CPUTotalUsage: parsedTemplate(`namespace_name:container_cpu_usage_seconds_total:sum_rate{name="{{.Label}}"}`), }, report.Service: { - // Metric names defined as recording rule. Filters by `monitor=""` for cortex-only data. - docker.MemoryUsage: prepareTemplate(`namespace_name:container_memory_usage_bytes:sum{name="{{.Label}}",monitor=""}`), - docker.CPUTotalUsage: prepareTemplate(`namespace_name:container_cpu_usage_seconds_total:sum_rate{name="{{.Label}}"}`), + /* + A recording rule defines `namespace_name:container_memory_usage_bytes:sum`: + + namespace_name:container_memory_usage_bytes:sum = + sum by (namespace, name) ( + sum(container_memory_usage_bytes{image!=""}) by (pod_name, namespace) + * on (pod_name) group_left(name) + k8s_pod_labels{job="monitoring/kube-api-exporter"} + ) + + Additionally, we filter by `monitor=""` for cortex-only data. + */ + docker.MemoryUsage: parsedTemplate(`namespace_name:container_memory_usage_bytes:sum{name="{{.Label}}",monitor=""}`), + + /* + A recording rule defines `namespace_name:container_cpu_usage_seconds_total:sum_rate`: + + namespace_name:container_cpu_usage_seconds_total:sum_rate = + sum by (namespace, name) ( + sum(rate(container_cpu_usage_seconds_total{image!=""}[5m])) by (pod_name, namespace) + * on (pod_name) group_left(name) + k8s_pod_labels{job="monitoring/kube-api-exporter"} + ) + */ + docker.CPUTotalUsage: parsedTemplate(`namespace_name:container_cpu_usage_seconds_total:sum_rate{name="{{.Label}}"}`), }, } ) @@ -163,8 +204,8 @@ func queryParamsAsJSON(query string) (string, error) { return buf.String(), nil } -// prepareTemplate initializes unnamed text templates. -func prepareTemplate(query string) *template.Template { +// parsedTemplate initializes unnamed text templates. +func parsedTemplate(query string) *template.Template { tpl, err := template.New("").Parse(query) if err != nil { panic(err)