AWS. EKS 프로메테우스 그라파나 모니터링 구축하기
created Oct 09, 2022 | updated Oct 15, 2022
AWS EKS 모니터링을 위해 kube-prometheus-stack을 설치했다. 그라파나는 다른 개발자들도 접속할 수 있도록 LB와 HTTPS 설정을 했고, 프로메테우스와 그라파나의 저장공간은 클러스터의 리소스를 사용하지 않게 AWS EBS 추가 설정을 했다.
본 포스팅은 AWS EKS가 이미 설치된 상황을 가정하고 설명한다.
kube-prometheus 란?
- kube-prometheus 프로젝트는 쿠버네티스 클러스터를 모니터링하기 위한 것으로, 모든 쿠버네티스 컴포넌트들의 매트릭스를 수집하도록 사전 설정되었고 추가로 대시보드와 알림 규칙의 기본 세트를 제공한다.
- 이 프로젝트가 포함하는 컴포넌트는 다음과 같다.
- The Prometheus Operator
- Highly available Prometheus
- Highly available Alertmanager
- Prometheus node-exporter
- Prometheus Adapter for Kubernetes Metrics APIs
- kube-state-metrics
- Grafana
- Helm Chart 이름은 kube-prometheus-stack이고, 이전 이름은 prometheus-operator 였다.
설치하기
설치 전 준비할 내용
- AWS EKS 생성
- (선택 사항) AWS EKS 퍼시스턴트볼륨 동적프로비저닝 설정 (https://oflouis.dev/sw_development/devops/aws-eks-ebs-csi-installation/)
- (선택 사항) ACM 인증서 준비
- (선택 사항) kube-prometheus-stack 설치 커스터마이징 파일
kube-prometheus-stack 설치 커스터마이징 파일
- 아래 커스터마이징 파일은 다음을 포함한다.
- 그라파나 서버 접속 HTTPS 적용
- 그라파나와 프로메테우스 영구 저장소 설정
custom.yaml
alertmanager:
service:
type: NodePort
grafana:
service:
annotations:
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: '*'
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: ${ACM_CERT_ARN}
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: '443'
type: LoadBalancer
extraExposePorts:
- name: https
port: 443
targetPort: 3000
resources:
limits:
cpu: 200m
memory: 256Mi
requests:
cpu: 100m
memory: 128Mi
persistence:
type: pvc
enabled: true
storageClassName: gp2
accessModes:
- ReadWriteOnce
size: 10Gi
prometheus:
service:
type: NodePort
prometheusSpec:
retention: 10d
retentionSize: "45GB"
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 200m
memory: 256Mi
storageSpec:
volumeClaimTemplate:
spec:
storageClassName: gp2
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 50Gi
kube-prometheus-stack 설치하기
# 헬름 차트의 저장소 추가
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
# 네임스페이스 생성
kubectl create ns monitoring
# kube-prometheus-stack 설치
helm install prometheus-stack prometheus-community/kube-prometheus-stack -f ./custom.yaml -n monitoring
# 설치 확인
kubectl get pods -l "release=prometheus-stack" -n monitoring
helm get values prometheus-stack -n monitoring
kubectl get pvc -n monitoring
kubectl get pv -n monitoring
- 추가 명령어
# kube-prometheus-stack 업데이트 하기
helm upgrade prometheus-stack prometheus-community/kube-prometheus-stack -f ./custom.yaml -n monitoring
# kube-prometheus-stack 삭제하기
helm uninstall prometheus-stack -n monitoring
그라파나 접속하기
그라파나에 접속하기 위해 주소와 계정 정보를 확인한다.
# 그라파나 접속 주소 확인하기
kubectl get svc prometheus-stack-grafana -o json -n monitoring |jq -r '.status.loadBalancer.ingress[0].hostname'
# 그라파나 계정 확인하기
kubectl get secret prometheus-stack-grafana -o jsonpath="{.data.admin-user}" -n monitoring |base64 -d; echo
kubectl get secret prometheus-stack-grafana -o jsonpath="{.data.admin-password}" -n monitoring |base64 -d; echo
브라우저에서 그라파나에 접속하고 Dashboards와 Alerting 메뉴를 보면 디폴트들이 제공되어 있다.