groundcover-com / murre

Murre is an on-demand, scaleable source of container resource metrics for K8s.
https://www.groundcover.com/blog/murre
Apache License 2.0
310 stars 18 forks source link

Fix empty screen issue #5 for multi-container pods #23

Open giuliohome opened 1 year ago

giuliohome commented 1 year ago

What this PR does / why we need it:

Extract metrics multi-container pods

Which issue(s) this PR fixes:

Please, follow all my comments under this issue.

Special notes for your reviewer: Any other tree traversal method would work better than the current silent skipping.

giuliohome commented 1 year ago

Comparing murre

image

against kubectl top

[giulio@fedora murre]$ kubectl top pod -A
NAMESPACE              NAME                                                     CPU(cores)   MEMORY(bytes)   
default                alertmanager-myprometheus-kube-promethe-alertmanager-0   1m           41Mi            
default                gke-golang-web-68d985fb4b-g62j5                          1m           4Mi             
default                gke-golang-web-68d985fb4b-mwrvl                          1m           4Mi             
default                myprometheus-grafana-7dd5858545-9rl85                    17m          225Mi           
default                myprometheus-kube-promethe-operator-74b5bd4b97-9csg2     1m           43Mi            
default                myprometheus-kube-state-metrics-68795b6566-2vt6k         2m           30Mi            
default                myprometheus-prometheus-node-exporter-d598k              7m           21Mi            
default                postgres-statefulset-0                                   1m           58Mi            
default                prometheus-myprometheus-kube-promethe-prometheus-0       74m          259Mi           
kube-system            coredns-565d847f94-bsnxj                                 4m           53Mi            
kube-system            etcd-minikube                                            47m          95Mi            
kube-system            kube-apiserver-minikube                                  106m         395Mi           
kube-system            kube-controller-manager-minikube                         27m          119Mi           
kube-system            kube-proxy-ljg98                                         1m           36Mi            
kube-system            kube-scheduler-minikube                                  6m           31Mi            
kube-system            metrics-server-769cd898cd-986hc                          9m           20Mi            
kube-system            storage-provisioner                                      4m           25Mi            
kubernetes-dashboard   dashboard-metrics-scraper-b74747df5-9x4b4                1m           17Mi            
kubernetes-dashboard   kubernetes-dashboard-57bbdc5f89-hr7bn                    1m           26Mi  
giuliohome commented 1 year ago

Found the root cause!

Only the container name is empty, we can recover the pod name and namespace in a simpler way: at this point it is a one-liner fix! The comparison between murre and kubectl top is now consistent.

NAMESPACE              NAME                                                     CPU(cores)   MEMORY(bytes)   
default                alertmanager-myprometheus-kube-promethe-alertmanager-0   2m           42Mi            
default                gke-golang-web-68d985fb4b-g62j5                          1m           1Mi             
default                gke-golang-web-68d985fb4b-mwrvl                          1m           7Mi             
default                myprometheus-grafana-7dd5858545-9rl85                    20m          286Mi           
default                myprometheus-kube-promethe-operator-74b5bd4b97-9csg2     1m           54Mi            
default                myprometheus-kube-state-metrics-68795b6566-2vt6k         2m           36Mi            
default                myprometheus-prometheus-node-exporter-d598k              6m           19Mi            
default                postgres-statefulset-0                                   1m           54Mi            
default                prometheus-myprometheus-kube-promethe-prometheus-0       65m          287Mi           
kube-system            coredns-565d847f94-bsnxj                                 4m           29Mi            
kube-system            etcd-minikube                                            50m          84Mi            
kube-system            kube-apiserver-minikube                                  110m         405Mi           
kube-system            kube-controller-manager-minikube                         29m          77Mi            
kube-system            kube-proxy-ljg98                                         2m           44Mi            
kube-system            kube-scheduler-minikube                                  5m           42Mi            
kube-system            metrics-server-769cd898cd-986hc                          9m           48Mi            
kube-system            storage-provisioner                                      7m           31Mi            
kubernetes-dashboard   dashboard-metrics-scraper-b74747df5-9x4b4                1m           30Mi            
kubernetes-dashboard   kubernetes-dashboard-57bbdc5f89-hr7bn                    1m           37Mi   

image

giuliohome commented 1 year ago

Cherry :cake: on top: activating this change by a command argument --empty-container:

[giulio@fedora murre]$ ./murre --help
murre is a command line tool to monitor kubernetes resources

Usage:
  murre [flags]

Flags:
      --container string         filter by container
      --empty-container          metrics with no container name