4주차 - EKS Observability(4) Grafana

728x90

Grafana(★★★)

  • TBSD데이터를 시각화 / 다양한 데이터 형식 지원(메트릭, 로그, 트레이스 등)
    • 그라파나는 시각화 솔루션으로 데이터 자체를 저장하지 않음 → 현재 실습 환경에서는 데이터 소스프로메테우스를 사용
  • Prometheus에서 수집한 Metric을 시각화 / Prometheus 스텍 설치 시 스텍에 포함되어 설치

etc-image-0

 

  • 기본 메뉴

etc-image-1

  1. Search dashboards : 대시보드 검색
  2. Starred : 즐겨찾기 대시보드
  3. Dashboards : 대시보드 전체 목록 확인
  4. Explore : 쿼리 언어 PromQL를 이용해 메트릭 정보를 그래프 형태로 탐색
  5. Alerting : 경고, 에러 발생 시 사용자에게 경고를 전달
  6. Connections : 설정, 예) 데이터 소스 설정 등
  7. Administartor : 사용자, 조직, 플러그인 등 설정
  8. Connections → Your connections : 스택의 경우 자동으로 프로메테우스를 데이터 소스로 추가해둠 ← 서비스 주소 확인

[ 기본 대시보드 ]

  • 스택을 통해서 설치된 기본 대시보드

etc-image-2

 

[ 공식 대시보드 가져오기  ]

  • 이미 만들어 진 대시보드를 Import 하여 사용 / Dashboard → New → Import → "대시보드 번호" 입력 후 Load ⇒ 데이터소스(Prometheus 선택) 후 Import
    • 15757 추천 - Kubernetes / Views / Global

etc-image-3

  • 17900 추천 - 1 Kubernetes All-in-one Cluster Monitoring KR(v1.26.0)

etc-image-4

  • No data 부분 수정
    • 해당 패널에서 Edit → 아래 수정 쿼리 입력 후 Run queries 클릭 → 상단 SaveApply  
    • On-Promise 환경과 AWS 환경 차이로 쿼리 내용 중 "node"를 "instance"로 변경
#원본 쿼리
sum by (node) (irate(node_cpu_seconds_total{mode!~"guest.*|idle|iowait", node="$node"}[5m]))

#하나씩 키워드를 프로메테우스 쿼리 실행창에서 실행해서 확인
node_cpu_seconds_total
node_cpu_seconds_total{mode!~"guest.*|idle|iowait"}
avg(node_cpu_seconds_total{mode!~"guest.*|idle|iowait"}) by (node)
avg(node_cpu_seconds_total{mode!~"guest.*|idle|iowait"}) by (instance)

# 수정
sum by (instance) (irate(node_cpu_seconds_total{mode!~"guest.*|idle|iowait", instance="$instance"}[5m]))

# 수정 : 메모리 점유율
(node_memory_MemTotal_bytes{instance="$instance"}-node_memory_MemAvailable_bytes{instance="$instance"})/node_memory_MemTotal_bytes{instance="$instance"}

# 수정 : 디스크 사용률
sum(node_filesystem_size_bytes{instance="$instance"} - node_filesystem_avail_bytes{instance="$instance"}) by (instance) / sum(node_filesystem_size_bytes{instance="$instance"}) by (instance)

etc-image-5

  • 상단 네임스페이스와 파드 정보 필터링 출력되게 수정

etc-image-6

  • 오른쪽 상단 Edit → Settings → Variables 아래 namesapce, pod 값 수정 ⇒ 수정 후 Save dashboard 클릭

etc-image-7

  • namespace 경우 : kube_pod_info 로 수정

etc-image-8

  • namespace 오른쪽 Showing usages for 클릭 시 → 맨 하단에 pod variable 가 namespace 하위에 종속

etc-image-9

  • 변수 설정 후, 정상적으로 namespace 선택 및 Pod 선택 확인

etc-image-10

 

  • 파드의 리소스 할당 제한 제대로 표시
#CPU
# 기존
sum(kube_pod_container_resource_limits_cpu_cores{pod="$pod"})

# 변경 전 쿼리 시도
kube_pod_container_resource_limits_cpu_cores
kube_pod_container_resource_limits
kube_pod_container_resource_limits{resource="cpu"}

# 변경
sum(kube_pod_container_resource_limits{resource="cpu", pod="$pod"})

#MEMORY
# 기존
sum(kube_pod_container_resource_limits_memory_bytes{pod="$pod"})

# 변경
sum(kube_pod_container_resource_limits{resource="memory", pod="$pod"})

etc-image-11etc-image-12

 

※ 공식 유명 Dashboard 추천

  • Dashboard: 1860(Node Exporter Full)
  • Dashboard: 15172(Node Exporter for Prometheus)
  • Dashboard: 13332 (kube-state-metrics-v2)
  • Dashboard: 16032(AWS CNI Metrics)

etc-image-13

 

  • Dashboard: 12708 (NGINX exporter)

etc-image-14

 

[ Panel 생성 - 커스텀 대시보드 ]

  • 대시보드 내 다양한 Panel 구성할 수 있음
  • 쿼리를 PromQL 또는 Builder를 통해 실행
  • Time series panel 예제: Title(노드별 5분간 CPU 사용 변화율)
node_cpu_seconds_total
rate(node_cpu_seconds_total[5m])
sum(rate(node_cpu_seconds_total[5m]))
sum(rate(node_cpu_seconds_total[5m])) by (instance)

etc-image-15

  • Bar chart panel 예제: Add → Visualization 오른쪽(Bar chart) ⇒ 쿼리 Options : Legend(Auto), Format(Table), Type(Instance) → Title(네임스페이스 별 디플로이먼트 갯수)
kube_deployment_status_replicas_available
count(kube_deployment_status_replicas_available) by (namespace)

etc-image-16

  • Stat panel 예제: Add → Visualization 오른쪽(Stat) → Title(nginx 파드 수)
kube_deployment_spec_replicas
kube_deployment_spec_replicas{deployment="nginx"}

# scale out
kubectl scale deployment nginx --replicas 6

etc-image-17

  • Gauge panel 예제: Add → Visualization 오른쪽(Gauge) → Title(노드 별 1분간 CPU 사용률)
node_cpu_seconds_total{mode!~"guest.*|idle|iowait"}[1m]

node_cpu_seconds_total
node_cpu_seconds_total{mode="idle"}
node_cpu_seconds_total{mode="idle"}[1m]
rate(node_cpu_seconds_total{mode="idle"}[1m])
avg(rate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance)
1 - (avg(rate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance))

etc-image-18

  • Table panel 예제: Add → Visualization 오른쪽(Table) ⇒ 쿼리 Options : Format(Table), Type(Instance) → Title(노드 OS 정보)
    • 원하는 데이터만 출력: Transform data → Organize fields by name : id_like, instance, name, pretty_name
node_os_info

etc-image-19

  • 전체 커스텀 대시보드

etc-image-20

 

 

그라파나 얼럿 Alert

etc-image-21

1. Contact points → Add contact point 클릭

  • Integration : 슬랙
  • Webhook URL : 아래 주소 입력
  • Optional Slack settings → Username : 메시지 구분을 위해서 각자 자신의 닉네임 입력
    • 오른쪽 상단 : Test 해보고 저장

etc-image-22

2. Notification policies : 기본 정책 수정 Edit - Default contact point(slack)

etc-image-23

3. Rule 설정

  • 그라파나 → Alerting → Alert ruels → New alert rule : nginx 웹 요청 1분 동안 누적 60 이상 시 Alert 설정

etc-image-24
etc-image-25etc-image-26
etc-image-27

 

 

  • Alert rules 생성 확인

etc-image-28

  • nginx 반복 접속 실행 후 슬랙 채널 알람 확인
while true; do curl -s https://nginx.$MyDomain -I | head -n 1; date; done

etc-image-29

 

728x90