본문 바로가기

EKS/Prometheus & Grafana

EKS Mornitoring - 1. Prometheus & Grafana 세팅

Helm을 통해서 Promethus와 Grafana를 세팅할 것이기 때문에

Helm을 세팅하지 않으셨다면, Helm세팅하기를 보시고 세팅해주세요.

 

먼저 Metric Server를 구성하여서 쿠버네티스에서 Metric을 확인해보도록 하겠습니다.

Metric Server를 통해 HPA나 Prometheus가 현재 쿠버네티스 Pod와 Node의 각 리소스를 체크할 수 있기 때문입니다.

먼저 명령행 JSON 처리기 jq를 설치해줍니다.

sudo yum install -y jq

 

 

이후 아래 명령어를 수행해서 Metric Server를 세팅해주세요.

DOWNLOAD_URL=$(curl -Ls "https://api.github.com/repos/kubernetes-sigs/metrics-server/releases/latest" | jq -r .tarball_url)
DOWNLOAD_VERSION=$(grep -o '[^/v]*$' <<< $DOWNLOAD_URL)
curl -Ls $DOWNLOAD_URL -o metrics-server-$DOWNLOAD_VERSION.tar.gz
mkdir metrics-server-$DOWNLOAD_VERSION
tar -xzf metrics-server-$DOWNLOAD_VERSION.tar.gz --directory metrics-server-$DOWNLOAD_VERSION --strip-components 1
kubectl apply -f metrics-server-$DOWNLOAD_VERSION/deploy/1.8+/

 

 

제대로 서버가 올라왔는지 확인해줍시다.

kubectl get deployment metrics-server -n kube-system

 

잘 올라왔다면, 아래 명령어를 통해 체크를 해보도록 하겠습니다.

kubectl top po
kubectl top node

 

자 이제 그러면 해당 Metric을 프로메테우스를 통해 수집 저장할 수 있도록 Prometheus를 세팅해주겠습니다.

저는 namespace를 prd-mornitoring로 설정하여 Prometheus와 Grafana를 모두 구성할 것입니다.

helm install stable/prometheus \
--name prometheus \
--namespace prd-mornitoring \
--set alertmanager.persistentVolume.storageClass="gp2",server.persistentVolume.storageClass="gp2"

 

위의 명령어를 수행했을 때, 아래의 EndPoint를 통해 Grafana와 매핑되도록 설정하기 때문에 기록해주세요

 

이제 ALB를 구성하여서 확인할 수 있도록 Type을 수정해주겠습니다.

kubectl patch svc prometheus-server -n prd-mornitoring -p '{"spec": {"type": "NodePort"}}'
kubectl get all -n prd-mornitoring

 

 

모두 Running으로 정상상태 이기 때문에 Grafana를 세팅해주겠습니다.

아래 admin 비밀번호를 꼭 바꿔서 입력해주세요

helm install stable/grafana \
--name grafana \
--namespace prd-mornitoring \
--set persistence.storageClassName="gp2" \
--set adminPassword='{password}' \
--set datasources."datasources\.yaml".apiVersion=1 \
--set datasources."datasources\.yaml".datasources[0].name=Prometheus \
--set datasources."datasources\.yaml".datasources[0].type=prometheus \
--set datasources."datasources\.yaml".datasources[0].url=http://prometheus-server.prd-mornitoring.svc.cluster.local \
--set datasources."datasources\.yaml".datasources[0].access=proxy \
--set datasources."datasources\.yaml".datasources[0].isDefault=true \
--set service.type=NodePort

 

자 마지막으로 Ingress를 설정해서 ALB를 생성해주고, 접속해보도록 하겠습니다.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: prd-mornitoring-ingress
  namespace: prd-mornitoring
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:ap-northeast-2:{account-number}:certificate/{id}
    alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-2016-08
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80,"HTTPS": 443}]'
    alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
spec:
  rules:
    - http:
        paths:
          - backend:
              serviceName: ssl-redirect
              servicePort: use-annotation
    - host: prometheus.domain.shop
      http:
        paths:
          - backend:
              serviceName: prometheus-server
              servicePort: 80
    - host: grafana.domain.shop
      http:
        paths:
          - backend:
              serviceName: grafana
              servicePort: 80

 

자 도메인으로 접속해보면 아주 잘 Metric을 수집하고 있는 것을 볼 수 있습니다.

 

Grafna에서 Import에 6417 / 8588 을 해주도록 하겠습니다.

 

6417을 입력해주시면 아래와 같이 Cluster Node를 모니터링하는 대시보드를 간단하게 불러오실 수 있습니다.

 

 

8588은 파드들에 대한 모니터링 지표이며 아래와 같이 보실 수 있습니다.

 

좋은 대시보드 넘버가 있다면 공유부탁드립니다.

다음 포스트에서는 ALERT 설정하는 부분을 알아보도록 하겠습니다.