본문 바로가기

EKS/Prometheus & Grafana

Grafana - EKS Custom DashBoard 구성하기

그라파나 대시보드를 만들기 위해서는 PromSQL을 사용해야하는데,

이보다 중요한게 바로 지표가 무엇인지 정확히 아는 것 입니다.

 

아래를 통해서 간단하게 pod에 대한 지표를 체크할 수 있습니다.

https://github.com/kubernetes/kube-state-metrics/blob/master/docs/pod-metrics.md

 

kubernetes/kube-state-metrics

Add-on agent to generate and expose cluster-level metrics. - kubernetes/kube-state-metrics

github.com

하지만 가장 정확한 방법은 역시 프로메테우스를 띄우고 직접 지표를 확인해 보는 것 입니다.

 

 

여기서 원하는 지표들을 직접 찾아서 쿼리하여 구성하시면 좋습니다.

 

저는 기본적으로 Namespace별 Pod에 대한 대시보드와

Nodegroup별 Node에 대한 대시보드를 구성하였으며 json은 아래 파일을 사용하시면 됩니다.

 

EKS_Pod_DashBoard.json
0.02MB
Grafana_EKS_Node_DashBoard.json
0.02MB

 

자 그럼 구체적으로 쿼리들을 짠 내역을 살펴보도록 하겠습니다.

 

 

먼저, 위의 대시보드에서 네임스페이스와 pod를 고르는 부분을 variable에서 설정할 수 있습니다.

우측 상단 톱니바퀴를 통해 아래와 같이 variable을 만들어주세요

 

 

여기서도 역시 프로메테우스의 지표를 사용한 것을 알 수 있습니다.

이후 $로 variable을 먼저 구성한 variable을 다시 참조하여서 사용할 수 있습니다.

 

CPU 사용률만 간단하게 살펴보면 아래와 같이 패널을 만들어서 사용할 수 있습니다.

 

제가 구성한 것이 100% 완벽한 부분은 아닐것이기 때문에, 참고하여서 사용하시면 좋겠습니다.

 

아래는 해당 지표들에 대한 쿼리들을 정리해놓은 것입니다.


NodeGroup 별 Node DashBoard

nodegroup 

 

label_values(kube_node_labels, label_eks_amazonaws_com_nodegroup)


node (nodegroup 결과 반영)

 

label_values(kube_node_labels{label_eks_amazonaws_com_nodegroup =~ "$nodegroup"}, node)


Pod Count Total

 

 

sum(kube_pod_info{node=~"$node"}) 


Pod Count Running

 

sum(kubelet_running_pod_count{instance=~"$node"}) 


Pod Count Not Running

 

 

sum(kube_pod_info{node=~"$node"}) - sum(kubelet_running_pod_count{instance=~"$node"}) 


Memory Utilization
-Legend

{{kubernetes_node}}-memory-utilization 


-Metrics

(node_memory_MemTotal_bytes{kubernetes_node=~"$node"} - node_memory_MemAvailable_bytes{kubernetes_node=~"$node"}) / node_memory_MemTotal_bytes{kubernetes_node=~"$node"} * 100 



CPU Utilization
-Legend

{{kubernetes_node}}-memory-utilization 


-Metrics

(1 - (sum(node_cpu_seconds_total{kubernetes_node=~"$node", mode="idle"}) by (kubernetes_node) / sum(node_cpu_seconds_total{kubernetes_node=~"$node"}) by (kubernetes_node))) * 100 


Disk Utilization
-Legend

{{kubernetes_node}}-disk-utilization 


-Metrics

(sum (node_filesystem_size_bytes{kubernetes_node=~"$node"}) by (kubernetes_node) - sum (node_filesystem_free_bytes{kubernetes_node=~"$node"}) by (kubernetes_node)) / sum (node_filesystem_size_bytes{kubernetes_node=~"$node"}) by (kubernetes_node) * 100 


Disk I/O
-Legend

{{kubernetes_node}}-read-bytes
{{kubernetes_node}}-write-bytes


-Metrics 

 

sum(rate(node_disk_read_bytes_total{kubernetes_node=~"$node"}[5m])) by (kubernetes_node) 
sum(rate(node_disk_written_bytes_total{kubernetes_node=~"$node"}[5m])) by (kubernetes_node) 


Network In / Out
-Legend

{{kubernetes_node}}-network-in 
{{kubernetes_node}}-network-out 


-Metrics

sum(rate(node_network_receive_bytes_total{kubernetes_node=~"$node",device=~"eth.*"}[2m])) by (kubernetes_node) 
sum(rate(node_network_transmit_bytes_total{kubernetes_node=~"$node",device=~"eth.*"}[2m])) by (kubernetes_node)

 


Namespace 별 Pod DashBoard

 

namespace

 

label_values(kube_pod_info, namespace)

 

pod

 

 

label_values(kube_pod_labels{namespace =~ "$namespace"}, pod)

 

Pod Count

- Total

sum(kube_pod_info{namespace=~"$namespace", pod=~"$pod"})

- Running

sum(kube_pod_status_phase{pod=~"$pod", namespace=~"$namespace", phase="Running"})

- Pending

sum(kube_pod_status_phase{pod=~"$pod", namespace=~"$namespace", phase="Pending"})

- Succeeded

sum(kube_pod_status_phase{pod=~"$pod", namespace=~"$namespace", phase="Succeeded"})

- Failed

sum(kube_pod_status_phase{pod=~"$pod", namespace=~"$namespace", phase="Failed"})

- Unkown

sum(kube_pod_status_phase{pod=~"$pod", namespace=~"$namespace", phase="Unknown"})

 

 

CPU Capacity

- Request

sum(kube_pod_container_resource_requests_cpu_cores{namespace=~"$namespace", pod=~"$pod"})

- Limit

sum(kube_pod_container_resource_limits_cpu_cores{namespace=~"$namespace", pod=~"$pod"})

 

 

CPU Utilization

 

sum (rate (container_cpu_usage_seconds_total{namespace=~"$namespace", pod=~"$pod", image!=""}[2m])) by (pod) * 100

 

Memory Capacity

- Request

sum(kube_pod_container_resource_requests_memory_bytes{namespace=~"$namespace", pod=~"$pod"}) / (1024 * 1024 * 1024)

- Limit

sum(kube_pod_container_resource_limits_memory_bytes{namespace=~"$namespace", pod=~"$pod"}) / (1024 * 1024 * 1024)

- Total Usage

sum(sum(container_memory_usage_bytes{namespace=~"$namespace", pod=~"$pod", image!=""} / (1024 * 1024 * 1024)) by (pod))

 

 

Memory Usage

sum(container_memory_usage_bytes{namespace=~"$namespace", pod=~"$pod", image!=""} / (1024 * 1024)) by (pod)

 

Disk Capacity

- Usage

sum(container_fs_usage_bytes{namespace=~"$namespace", pod=~"$pod"}) / (1024 * 1024)

- Limit

sum(container_fs_limit_bytes{namespace=~"$namespace", pod=~"$pod"}) / (1024 * 1024)

 

 

Disk I/O

- Read

sum(container_fs_reads_bytes_total{namespace=~"$namespace", pod=~"$pod"}) / (1024 * 1024)

- Write

sum(container_fs_writes_bytes_total{namespace=~"$namespace", pod=~"$pod"}) / (1024 * 1024)

 

 

Network I/O

- In

sum(rate(container_network_receive_bytes_total{namespace=~"$namespace",pod=~"$pod.*"}[2m])) / (1024 * 1024)

- Out

sum(rate(container_network_transmit_bytes_total{namespace=~"$namespace",pod=~"$pod.*"}[2m])) / (1024 * 1024)