본문 바로가기
Kubernetes/AWS EKS Workshop Study

4주차 1편 EKS Observability - Grafana, Loki

by 개발자 영만 2024. 3. 31.

Grafana

  • TSDB 데이터를 시각화하고, 다양한 데이터 형식 지원합니다.(메트릭, 로그, 트레이스 등)
  • 그라파나는 시각화 솔루션으로 데이터 자체를 저장하지는 않습니다. → 현재 실습 환경에서는 데이터 소스는 프로메테우스를 사용
  • 접속 정보 확인 및 로그인 : 기본 계정 : admin / 비밀번호 : prom-operator

  • 기본 대시보드 확인
1. Search dashboards : 대시보드 검색
2. Starred : 즐겨찾기 대시보드
3. Dashboards : 대시보드 전체 목록 확인
4. Explore : 쿼리 언어 PromQL를 이용해 메트릭 정보를 그래프 형태로 탐색
5. Alerting : 경고, 에러 발생 시 사용자에게 경고를 전달
6. Connections : 설정, 예) 데이터 소스 설정 등
7. Administartor : 사용자, 조직, 플러그인 등 설정

  • Connections → Data source : 스택의 경우 자동으로 프로메테우스를 데이터 소스로 추가합니다.

 

대시보드 사용 - 기본 대시보드와 공식 대시보드 가져오기

기본 대시보드

  • 스택을 통해서 설치된 기본 대시보드 확인 : Dashboards → Browse
  • 분류
    • 자원 사용량 - Cluster/POD Resources
    • 노드 자원 사용량 - Node Exporter
    • 주요 애플리케이션 - CoreDNS 등

 

공식 대시보드

  • 미리 생성해 둔 대시보드를 Import 하여 사용
  • Kubernetes / Views / Global
    • Dashboard → New → Import → 15757 력입력 후 Load ⇒ 데이터소스(Prometheus 선택) 후 Import 클릭

  • 1 Kubernetes All-in-one Cluster Monitoring KR
    • Dashboard → New → Import → 17900 입력 후 Load ⇒ 데이터소스(Prometheus 선택) 후 Import 클릭
    • AWS와 On-Promise의 환경 차이로 인해 CPU 점유율, 메모리 점유율, 디스크 사용률 패널의 쿼리 수정이 필요하다
# 수정 : CPU 점유율
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 (node) / sum(node_filesystem_size_bytes{instance="$instance"}) by (node)

  • Node Exporter Full
    • Dashboard → New → Import → 1860 입력 후 Load ⇒ 데이터소스(Prometheus 선택) 후 Import 클릭

  • Node Exporter for Prometheus Dashboard based on 11074
    • Dashboard → New → Import → 15172 입력 후 Load ⇒ 데이터소스(Prometheus 선택) 후 Import 클릭

  • kube-state-metrics-v2
    • Dashboard → New → Import → 13332 입력 후 Load ⇒ 데이터소스(Prometheus 선택) 후 Import 클릭

  • AWS CNI Metrics
    • Dashboard → New → Import → 16032 입력 후 Load ⇒ 데이터소스(Prometheus 선택) 후 Import 클릭

  • NGINX 애플리케이션 모니터링 대시보드 추가
    • Dashboard → New → Import → 12708 입력 후 Load ⇒ 데이터소스(Prometheus 선택) 후 Import 클릭

 

Panel 생성 - 커스텀 Dashboard

  • 신규 대시보스 생성 → 패널 생성(Code 로 변경) → 쿼리 입력 후 Run queries 클릭 후 오른쪽 상단 Apply 클릭 → 대시보드 상단 저장
  • Time series
node_cpu_seconds_total
rate(node_cpu_seconds_total[5m])
sum(rate(node_cpu_seconds_total[5m]))

# 노드별 5분간 CPU 사용 변화율
sum(rate(node_cpu_seconds_total[5m])) by (instance)

  • Bar chart
kube_deployment_status_replicas_available

# 네임스페이스 별 디플로이먼트 갯수
# Query Options : Format(Table), Type(Instance)
count(kube_deployment_status_replicas_available) by (namespace)

  • stat
kube_deployment_spec_replicas

# nginx 파드 수
kube_deployment_spec_replicas{deployment="nginx"}

  • Gauge
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분간 CPU 사용률
1 - (avg(rate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance))

  • Table
node_os_info

 

Grafana Alert

https://grafana.com/docs/grafana/latest/alerting/

Alert rule 설정

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

  • 아래 Folder, Evaluation group(1m), Pending period(1m) 은 +Add new 클릭 후 신규 생성

  • 오른쪽 상단 Save and exit 클릭

Contact point 설정

  • Contact points → Add contact point 클릭
  • Integration : 슬랙
  • Webhook URL :
https://hooks.slack.com/services/xxxx/xxxx/xxxxxxxx
  • Optional Slack settings → Username : 메시지 구분을 위해서 각자 자신의 닉네임 입력
  • 오른쪽 상단 : Test 해보고 저장

 

Notification policy 설정

  • 기본 정책 수정 Edit - Default contact point(slack)

 

nginx 반복 접속 실행 후 슬랙 채널 알람 확인

while true; do curl -s https://nginx.$MyDomain -I | head -n 1; date; done