그라파나 대시보드를 만들기 위해서는 PromSQL을 사용해야하는데,
이보다 중요한게 바로 지표가 무엇인지 정확히 아는 것 입니다.
아래를 통해서 간단하게 pod에 대한 지표를 체크할 수 있습니다.
https://github.com/kubernetes/kube-state-metrics/blob/master/docs/pod-metrics.md
하지만 가장 정확한 방법은 역시 프로메테우스를 띄우고 직접 지표를 확인해 보는 것 입니다.
여기서 원하는 지표들을 직접 찾아서 쿼리하여 구성하시면 좋습니다.
저는 기본적으로 Namespace별 Pod에 대한 대시보드와
Nodegroup별 Node에 대한 대시보드를 구성하였으며 json은 아래 파일을 사용하시면 됩니다.
자 그럼 구체적으로 쿼리들을 짠 내역을 살펴보도록 하겠습니다.
먼저, 위의 대시보드에서 네임스페이스와 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)
'EKS > Prometheus & Grafana' 카테고리의 다른 글
Grafana - Image Render Plugin & Slack Alert 연동 (0) | 2020.07.25 |
---|---|
Prometheus - EFS Provisioner / PVC 연동 (0) | 2020.07.25 |
EKS Mornitoring - 2. AlertManager 세팅 (0) | 2020.02.10 |
EKS Mornitoring - 1. Prometheus & Grafana 세팅 (0) | 2020.02.06 |