본문 바로가기
Kubernetes

Helm 차트로 grafana + Prometheus 배포 + 쿠버네티스 리소스 모니터링

by Nirah 2023. 2. 20.

그라파나(Grafana)

그라파나는 데이터베이스를 비롯한 다양한 데이터 소스를 그래프, 차트, 테이블 형식 등으로 비주얼 하게 보여주면서 결과를 분석하고 모니터링할 수 있는 가시성을 제공하는 오픈 소스 도구다.

시계열 데이터 구조를 가진 InfluxDB, Graphite, ElasticSearch 및 AWS CloudWatch 등을 지원하는데, 특히 프로메테우스(Prometheus)를 이용해 데이터를 수집하여 대시보드로 활용할 때 유용하다.

 

프로메테우스(Prometheus)

프로메테우스는 웹 서버, 데이터베이스 등 다양한 시스템을 모니터링하고, 특정 조건이 발생하면 담당자에게 경고(Alert) 할 수 있는 모니터링 오픈 소스이다

  • 대표 기능
    • 풀 방식의 메트릭 수집, 시계열 데이터 저장
    • PromQL을 활용하여 저장된 시계열을 쿼리 및 집계
    • 서비스 디스커버리
    • 데이터 시각화

먼저 Prometheus는 시계열 데이터를 저장한다. Exporter는 다양한 서비스/시스템의 메트릭을 수집한다. 예를 들어 Node Exporter는 설치된 머신의 CPU, Memory 등의 메트릭 정보를 수집하게 된다. Client Library는 애플리케이션 코드를 계측하기 위해 쓰인다. Pushgateway는 앞에 두 개의 컴포넌트가 수집하기 어려운 배치 데이터 등을 수집할 때 사용된다. Prometheus는 설정 파일(prometheus.yml)에 작성된 "Job"을 통해서 이들이 수집하는 메트릭을 가져와서 저장한다.

 

또한, Alertmanager를 통해서 특정 메트릭이 임계치가 넘어가거나 경계에 잡혔을 때 이메일, 슬랙 등을 통해서 알림을 보내줄 수 가 있으며 UI 기능이 있어 데이터를 시각화할 수 있다. 하지만 자체적인 시각화 기능은 약한 편이며 보통 Grafana라는 오픈 소스 대시보드 툴로 Prometheus UI를 대체하는 편이다.

 

그리고 서비스 디스커버리 기능을 제공한다. 마이크로 서비스가 대중적으로 유행하는 지금 상황에서 인스턴스는 다이나믹하게 스케일 인/아웃이 된다. 이를 수동으로 관리하기는 불가능에 가깝다. Prometheus는 다행히 여러 서비스 디스커버리와 통합할 수 있다. 가령, 쿠버네티스 서비스 디스커버리와 통합하여, 쿠버네티스 클러스터에 존재하는 모든 노드와 팟들의 메트릭을 수집할 수가 있다.

 

마지막으로 Prometheus는 애초에 "스케일 아웃"을 고려하지 않고 설계되었다. 그래서 데이터가 많으면 많을수록 이를 어떻게 해결해야 할까라는 고민 때문에, 도입하기가 쉽지 않았다. 하지만, Prometheus 클러스터링을 위한 Thanos, Cortex등 여러 오픈 소스가 개발되면서 이 문제가 상당 수 해결되었다.

 

Prometheus를 사용하기에 적합한 일, 적합하지 않은 일

Prometheus는 "메트릭"을 저장하기 위한 모니터링 시스템이다. 커널 스케줄링이나 데이터 수집 실패 같은 요소로 인해 약간의 부정확성과 레이스 컨디션을 피할 수 없는 운영 모니터링 환경을 위해 설계되었다. 따라서 Prometheus에 적합한 일은 다음과 같다.

  • 메트릭 기반의 시계열 데이터 저장를 저장하는 일
  • 동적인 혹은 마이크로 서비스의 인스턴스에 대한 메트릭을 수집하는 일

반면 Prometheus에 적합하지 않은 일도 있다. 이런 일은 다른 도구를 사용하여 해결해야 한다.

  • 이벤트 로그나 개별 이벤트를 저장하는 일
  • 이메일 주소/사용자 이름과 같이 카디널리티가 높은 데이터를 저장하는 일
  • 100%의 정확성이 요구되는 일

 

 

 

 

 

Helm

패키지 관리 도구

 

 

구성 환경 

쿠버네티스 환경 

 

 

참고 파일

chart.yaml : 헬름 차트에 대한 정의를 가지고 있는 파일

values.yaml : 헬름 차트를 사용할 때 필요한 값들이 가지고 있는 파일

templates : 쿠버네티스가 배포될 앱에 대한 매니페스트 파일이 정의되어 있음

note.txt

char dir : 종속성 문제를 해결하기 위한 차트의 정보를 가지고 있음

 

 

 

구성

 

1.헬름 레파지토리 추가

클라우드 셸을 사용해 헬름 레파지토리를 추가하자. 헬름 v3를 사용한다.

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm version # 설치 확인

 

 

2. 그라파나와 프로메테우스 배포

헬름 배포를 위해 그라파나와 프로메테우스의 values.yaml을 구성할 디렉토리를 하나 구성한다.

mkdir grafana_prometheus
cd grafana_prometheus

 

3. values-prometheus.yaml를 생성한다.

프로메테우스/그라파나 설치 시, 기본 값으로 설치하게 되면 호스트노드의 임시 디렉토리를 사용하는 형태로 스토리지가 설정되기 때문에, 데이터 안정성을 위해서 별도 pv/pvc 설정이 필요하다.

pv를 구성하여 스토리지를 구성하고 15일간 데이터를 보존하도록 구성한다.

cat <<EOF > values-prometheus.yaml
server:
  enabled: true

  persistentVolume:
    enabled: true
    accessModes:
      - ReadWriteOnce
    mountPath: /data
    size: 100Gi
  replicaCount: 1

  ## Prometheus data retention period (default if not specified is 15 days)
  ##
  retention: "15d"
EOF
[출처] 헬름 차트를 활용한 그라파나 & 프로메테우스 배포와 쿠버네티스 리소스 모니터링|작성자 일선스

 

4. values-grafana.yaml를 생성한다.

pvc를 구성하여 스토리지를 구성하여 설정정보를 유지할 수 있도록 구성했다.

비밀번호를 yaml파일에 노출시키는 것은 안좋지만, 나중에 시크릿으로 변경해 주는 것으로 하자.

cat << EOF > values-grafana.yaml
replicas: 1

service:
  type: LoadBalancer

persistence:
  type: pvc
  enabled: true
  # storageClassName: default
  accessModes:
    - ReadWriteOnce
  size: 10Gi
  # annotations: {}
  finalizers:
    - kubernetes.io/pvc-protection

# Administrator credentials when not using an existing secret (see below)
adminUser: admin
adminPassword: It1234!
EOF

 

헬름으로 values 파일들을 사용해 배포를 시작한다.

kubectl create ns prometheus
helm install prometheus prometheus-community/prometheus -f values-prometheus.yaml -n prometheus
helm install grafana grafana/grafana -f values-grafana.yaml -n prometheus

 

 

 

 

배포 확인

 

프로메테우스로 배포한 포드와 서비스가 잘 구성되었는지 확인한다.

더불어 그라파다의 외부 접속 아이피를 확인해둔다.

kubectl get pod,svc -n prometheus

 

외부 IP로 노출된 grafana의 IP로 접속을 수행한다.

아이디와 패스워드는 yaml파일에 적었던 것을 입력하면 된다.

 

 

프로메테우스 데이터를 그라파나로 가져오기

 

 Configuration의 Data sources로 접근한다.

데이터 추가를 위해 Add data source를 클릭하자.

 

 

데이터 소스 타입을 Prometheus로 선택한다.

 

HTTP 서버에 대한 URL 정보에 도메인 정보를 입력하자.

프로메테우스의 도메인 이름은 서비스를 확인하면 된다.

앞서 확인한 정보에서 service/prometheus-server 이름을 확인할 수 있다

여기서는 별도의 인증정보가 필요 없으므로 바로 save & test 버튼을 클릭한다.

 

 

대시보드 구성하기

 

대시보드를 구성하기 위해 +버튼 (Create)의 Import로 들어간다.

Import는 외부에 사용자들이 미리구성해놓은 좋은 다양한 대시보드를 간단히 다운로드 받아서 설정할 수 있다.

 

 

그라파나 사이트에 다양한 모양을 가진 대시보드들이 올라와 있다. 원하는 것을 찾고 ID를 가져와서 입력하면 된다.

https://grafana.com/grafana/dashboards/315

 

Kubernetes cluster monitoring (via Prometheus) | Grafana Labs

Edit Delete Confirm Cancel

grafana.com

 

 

복사한 ID를 입력하고 Load 버튼을 누르면 바로 구성이 시작된다.

 

 

남은 정보를 마저 설정하고 Import를 누른다.

 

구성을 완료하면 다음과 같은 쿠버네티스 자원 사용 현황을 대시보드로 파악할 수 있다.

 

한국 사람이 만든 한국 스타일의 대시보드도 있다. 13770번 대시보드를 동일한 방법으로 업로드해 활용해보자.

 

임포트한 화면은 다음과 같다.