[EKS] Grafana를 활용한 대시보드 기반 시각화

vinca·2024년 2월 19일
0

🦓 EKS

목록 보기
23/23
post-thumbnail
post-custom-banner

이전 학습에서 Prometheus🔥를 통해서 매트릭을 수집하고, Prometheus에서 제공하는 기본 Graph📊를 살펴보았다.

하지만, 더욱 가시성 있고, 보기좋게 대시보드를 내 마음대로 구축할 수는 없을까?

바로 그라파나☀️를 사용해서 이를 구축할 수 있다!

그라파나의 정보를 확인하고, 그라파나의 기본 대시보드를 확인한뒤, 이후 대시보드를 내 입맛대로 만들어보자.

그라파나 정보 확인

그라파나 버전 확인

// 그라파나 버전 확인
kubectl exec -it -n monitoring deploy/kube-prometheus-stack-grafana -- grafana-cli --version

// 그라파나 ingress 확인
kubectl get ingress -n monitoring kube-prometheus-stack-grafana

버전을 확인하니 9.5.1 버전이 설치되어 있는 것을 확인할 수 있다. 이제 ingress로 노출한 그라파나에 접속해 보도록 하자.

ingress 도메인으로 웹 접속 시, 기본 계정은 다음과 같다.

  • ID : admin
  • PW : prom-operator

그라파나 메뉴 정보

다음과 같이 그라파나에 접속할 수 있다.

을 눌렀을 때 나오는 메뉴의 의미는 다음과 같다.

  • Starred : 즐겨 찾기 대시보드
  • Dashboards : 대시보드 목록 확인
  • Explore : PromQL로 메트릭 정보를 그래프 형태로 표현
  • Alerting : 경고 정책을 구성해 사용자에게 경고를 전달
  • Connections : 연결할 데이터 소스 설정 (Prometheus🔥)
  • Administration : 사용자, 조직, 플러그인 등을 설정

그라파나 메뉴에서 Connections 확인

Connections 메뉴에서 Your connections에 진입하면 데이터 소스에 프로메테우스가 자동으로 생성된 것이 나타난다.
대상 데이터(프로메테우스) 소스를 클릭하면 상세 정보를 확인할 수 있다.

프로메테우스의 서비스 주소

여기서 나온 이 주소(FQDN)는 무엇일까?

http://kube-prometheus-stack-prometheus.monitoring:9090/

// 프로메테우스의 서비스와 엔드포인트 주소 확인
kubectl get svc,ep -n monitoring kube-prometheus-stack-prometheus

프로메테우스의 서비스 이름을 확인해 보니 동일한 이름을 가지는 것을 확인할 수 있다. 여기서 뒤에 monitoring은 네임스페이스를 나타낸다.

즉, 그라파나에서 데이터 소스로 지정한 대상의 주소는 프로메테우스의 서비스 주소임을 알 수 있다.

테스트용 파드를 배포하고 확인

정말 그런 것인지 확인해 보도록 하자.🤔
먼저 아래와 같은 테스트용 파드를 배포한다.

// 테스트용 파드 배포
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
  name: netshoot-pod
spec:
  containers:
  - name: netshoot-pod
    image: nicolaka/netshoot
    command: ["tail"]
    args: ["-f", "/dev/null"]
  terminationGracePeriodSeconds: 0
EOF

// 생성된 파드 확인
kubectl get pod netshoot-pod

이제 테스트용 파드를 통해서 프로메테우스 주소로 /graph를 요청해보자.

// 프로메테우스 접속 주소로 그래프 경로 접근
kubectl exec -it netshoot-pod -- curl -s kube-prometheus-stack-prometheus.monitoring:9090/graph -v ;

실제로 그래프와 관련된 응답이 반환되는 것으로 보아, 실제 프로메테우스의 서비스 주소가 맞다는 것을 알 수 있다.

기본 대시보드 사용

프로메테우스 스택을 통해서 설치된 그라파나에는 기본 대시보드들이 있다. 이를 사용해 보도록하자.

Dashboards 메뉴에 진입해서 general 폴더를 누르면 그라파나가 기본으로 제공하는 대시보드🪟를 확인할 수 있다.

아래처럼 원하는 대시보드를 선택할 수 있다. 👇

  • Kubernetes / Networking / Cluster 선택
  • Kubernetes / Persistent Volumes 선택

  • Node Exporter / Nodes 선택


기본 대시보드가 아닌 다른 대시보드를 추가하고 싶다면?😏
Grafana 사용자들이 직접 만든 공식 대시보드를 사용할 수 있다!

대시보드 추가 방법

마음에 드는 대시보드를 찾았다면 추가해되지 않겠는가?

먼저 마음에 드는 대시보드의 ID를 복사 한 뒤, 다음 과정을 통해서 추가할 수 있다.

Dashboard » New » Import » ID 입력 » Load » Prometheus » Import

아이디를 복사하고 Load 버튼을 눌러 불러오자.

대시보드 이름과 폴더는 기본으로 두고, 이러한 대시보드에 연결할
Connections 즉, 연결할 데이터 소스(Prometheus🔥)를 설정해준다.

Import를 눌러 마무리하면, 이렇게 이쁘장한 대시보드를 만들 수 있다!🌻

💡TIP! 추천 공식 대시보드

  • Kubernetes / Views / Global : 15757
  • Kubernetes All-in-one Cluster Monitoring KR : 13770 or 17900
  • Node Exporter Full : 1860
  • Node Exporter for Prometheus Dashboard based on 11074 : 15172
  • kube-state-metrics-v2 : 13332

애플리케이션 모니터링 설정 및 대시보드 추가

이번에는 노드에 관련된 메트릭을 수집하는 것이 아닌 애플리케이션에 대한 메트릭을 수집해 보도록 하자.

Nginx 웹 서버를 배포하고, 이를 프로메테우스로 로그를 수집한 뒤 그라파나로 시각회 해볼 것이다.

NGINX 웹 서버 배포

// helm repository 추가
helm repo add bitnami https://charts.bitnami.com/bitnami

NGINX 파라미터 파일 생성

// 도메인 변수 선언
MyDomain=<자신의 도메인>
// ARN 변수 선언
CERT_ARN=`aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text`; echo $CERT_ARN


// nginx 파라미터 파일 생성
cat <<EOT > nginx-values.yaml
service:
    type: NodePort

ingress:
  enabled: true
  ingressClassName: alb
  hostname: nginx.$MyDomain
  path: /*
  annotations: 
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
    alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
    alb.ingress.kubernetes.io/success-codes: 200-399
    alb.ingress.kubernetes.io/load-balancer-name: $CLUSTER_NAME-ingress-alb
    alb.ingress.kubernetes.io/group.name: study
    alb.ingress.kubernetes.io/ssl-redirect: '443'

metrics:
  enabled: true

  service:
    port: 9113

  serviceMonitor:
    enabled: true
    namespace: monitoring
    interval: 10s
EOT

cat nginx-values.yaml | yh

NGINX 배포 및 확인

// nginx 배포
helm install nginx bitnami/nginx --version 14.1.0 -f nginx-values.yaml

// 파드, 서비스, 엔드포인트 확인
kubectl get pod,svc,ep

서비스 모니터 확인

// 서비스 모니터 확인
kubectl get servicemonitor -n monitoring

// nginx 서비스 모니터 확인
kubectl get servicemonitor nginx -n monitoring -o yaml | yh

// 파드, 서비스, 엔드포인트 확인
kubectl get pod,svc,ep

다음과 같이 servicemonitor가 생성된 것을 확인할 수 있다.
/metrics 경로로 수집한 메트릭을 확인할 수 있다는 의미이다.

NGINX 메트릭 확인

/metrics 경로로 접근하여 수집된 메트릭 결과를 확인할 수 있다.

// NGINX IP 변수 선언
NGINXIP=$(kubectl get pod -l app.kubernetes.io/instance=nginx -o jsonpath={.items[0].status.podIP}); echo $NGINXIP

// NGINX IP로 메트릭 확인
curl -s http://$NGINXIP:9113/metrics

// NGINX 접속 중인 연결 수💡nginx_connections_active
curl -s http://$NGINXIP:9113/metrics | grep ^nginx_connections_active

NGINX 접속 후 메트릭 확인

// NGINX 1회 접속
curl -s https://nginx.$MyDomain

// NGINX 1초 간격 접속
while true; do curl -s https://nginx.$MyDomain -I | head -n 1; date; sleep 1; done

// NGINX 서버가 처리 중인 연결 수 💡nginx_connections_active
curl -s http://$NGINXIP:9113/metrics | grep ^nginx_connections_active

접속을 다수 시도한 뒤, 다시 확인해보면 nginx_connections_active 값이 많이 올라있는 것을 확인할 수 있다.

이러한 nginx 서비스는 프로메테우스에서도 확인 가능하다.

  • Service Discovery에 추가된 모습
    이를 통해 자동으로 nginx 서비스를 찾는다.

  • Target에 추가된 모습

    • 감시 중인 nginx 컨테이너
    • 수를 더 늘리면 감시중인 nginx가 더 늘어난다.
      kubectl scale deployment nginx --replicas=2

NGINX 부하 테스트

💻 NGINX 대시보드 : 12708 사용

100회씩 총 1000회 접속 수행을 수행해서 부하를 주고 여떻게 그래프가 변화하는지 관측해보자.

yum install -y httpd

// 100회씩 총 1000회 접속 수행
ab -c 100 -n 1000 https://nginx.$MyDomain/

다음과 같이 서버가 처리중인 접속 즉, active connections이 폭팔적으로 증가한 것을 확인할 수 있다.

profile
붉은 배 오색 딱다구리 개발자 🦃Cloud & DevOps
post-custom-banner

0개의 댓글