Post

Kubernetes Monitoring

Kubernetes Monitoring

Prometheus and Grafana

모니터링이란?

시스템의 관측가능성(Observability)를 확보합니다.

  • 시스템 관리에서 모니터링이란 메트릭(Metric)이라는 시계열(Time-series)로 표현한 수치를 지속적으로 측정 및 수집함으로써 시스템이 어떤 상태에 있는지 확인
  • CPU 사용률(Utilization), Ram 이용률(Usage), 트래픽 지연 시간(Latency) 등 숫자로 표현되는 데이터를 시간 별로 수집하고 시각화

Architecture

Untitled

  • kubernetes 리소스의 metric(사용 현황) 정보를 수집(prometheus)하여 대시보드로 제공(grafana) 할 수 있도록 하기 위해 prometheusgrafana 툴을 이용합니다.
  • Prometheus는 메트릭(Metric)을 포함한 시계열(Time-series) 데이터를 수집하고 이를 기반으로 쿼리(Query)하거나 경고(Alerting) 할 수 있게 해주는 오픈 소스 모니터링

Helm

Helm 저장소(repositoty)를 등록해야 합니다.

  • kubenetes Helm은 컨테이너화된 애플리케이션의 배포와 관리를 돕는 kubernetes용 패키지 관리자
  • Deployment, Service, Ingress 와 같은 kubernetes 리소스를 사용하여 애플리케이션을 관리
  • Helm chart는 kubernetes 리소스와 응용 프로그램 간의 종속성, 템플릿 및 다양한 메타 정보를 관리하기 위한 패키지 정보를 담고 있는 파일
  • 스테이징, 프로덕션, 개발 등 다양한 환경에서 쉽게 애플리케이션 배포
  • 버전관리, 배포방식, 롤백 등의 기능도 가지고 있기 때문에 릴리즈를 쉽게 관리

Helm 설치

Helm 설치 링크

Helm은 서비스를 쉽게 설치할 수 있는 툴입니다.

서비스 배포에 필요한 Image, Volumn, 환경설정 등을 정의한 helm chart를 통해 빠르고 쉽게 배포하게 해 줍니다.

Untitled

  • Helm-CLI 툴로 helm 명령어를 사용해서 kubernetes master node의 API Server에 요청하여 배포를 수행합니다.
  • 따라서, helm을 수행하는 terminal(PC 또는 VM등)에 kubernetes cluster 인증/인가 정보를 담고 있는 kube configuration 파일(yaml 파일)이 있어야 합니다.
  • Jenkins와 같은 CI/CD 툴에서 CD파트에 helm을 이용할 수 있습니다.

Helm 레포지토리 등록

  • Helm을 설치했다면 버전 확인을 합니다.

Untitled

  • 모니터링 툴을 설치하기 위해 레포지토리를 등록하고 확인합니다.
1
2
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
  • 다운로드를 원한다면 git clone https://github.com/prometheus-community/helmcharts.git하고 관련 폴더에서 yaml 파일을 참조합니다.

Prometheus

프로메테우스(Prometheus) 아키텍처

https://prometheus.io/

Untitled

Untitled

  • 프로메테우스 서버가 각각의 노드(컴포넌트)가 수집한 데이터를 가져오는 구조입니다.
  • 서버에서 클라이언트가 동작 중인 상태를 확인하면 주기적으로 클라이언트에 접속해서 데이터를 가져오는 pull 방식으로 동작합니다.

Prometheus Components

Prometheus Server

  • 데이터를 수집하고 저장하는 메인 서버
  • target 메트릭 데이터 수집
  • HTTP 엔드포인트를 설정하여 서버에서 메트릭을 수집하도록 지원
  • HAProxy, StatsD, Graphite와 같은 서비스를 지원

Alertmanager

  • 설정한 규칙에 따른 알림 처리

Pushgateway

  • Exporter를 이용하여 수집이 어려운 작업에 대한 메트릭 pushing 지원

Grafana

  • 데이터 시각화를 위한 Web UI 및 대시보드 지원

Client Libraries

  • Java, Scala, Go, Python, Ruby 등의 언어에 대한 프로메테우스 연동 라이브러리

Prometheus 설치

1
helm install prometheus-stack prometheus-community/kube-prometheus-stack

Untitled

Prometheus 실행

1
2
kubectl get po
kubectl port-forward svc/prometheus-stack-kube-prom-prometheus 9090:9090

Untitled

Untitled

  • localhost:9090 접속
  • 기간별 kube_service_info에 대한 자료를 수집하고 리스트화하여 보여줍니다.

Untitled

Grafana

grafana 설치

prometheus의 데이터를 읽어 대시보드를 제공하는 툴입니다.

Untitled

  • 그라파나(Grafana)는 메트릭을 시각화 해주는 오픈 소스 도구
  • Graphite, Prometheus, InfluxDB 등 다양한 데이터베이스와 메트릭 수집 시스템을 지원하고, 하나의 대시보드에 동시에 여러 메트릭 시스템들의 지표를 표시

grafana 설치 확인

계정은 admin, 초기 비밀번호는 prom-operator로 접속

1
2
kubectl get services
kubectl port-forward svc/prometheus-stack-grafana 3000:80

Untitled

Untitled

grafana의 prometheus 연동

  • DATA SOURCES 클릭

Untitled

Untitled

  • Prometheus 클릭
  • URL은 prometheus의 정보를 받아올 수 있는 주소와 포트로써, 프로메테우스의 서버 정보입니다.
  • http://prometheus-stack-kube-promprometheus:9090
  • Save & test 클릭

Untitled

대시보드 작성

  • Grafana Labs에서 사용하고자 하는 대시보드 템플릿의 ID 확인

Untitled

  • import dashboard에 붙여넣고 Load (저는 11074 id를 사용했습니다)

Untitled

대시보드 확인

Untitled

This post is licensed under CC BY 4.0 by the author.