Kubernetes는 대규모 서비스 운영에서 사실상 표준으로 자리 잡았다. 그러나 효율적이고 안정적인 운영을 위해선 견고한 모니터링 시스템을 구축이 필수적이다. 이 글에서 Prometheus와 Grafana를 사용하여 효과적인 Kubernetes 모니터링 시스템을 구축하는 방법을 소개한다.
1. 로컬 환경에서 Docker Desktop을 이용한 Kubernetes 클러스터 구축
로컬 환경에서도 Kubernetes를 설치할 수 있는 방법이 여러 가지가 있다. 그중 Docker Desktop 이용해 Kubernetes 환경을 구축해 보자.
- Docker Desktop 설치
https://www.docker.com/products/docker-desktop/ 여기에 들어가면 OS별 설치 파일이 제공된다. - Enable Kubernetes
2. Kubernetes에 Prometheus와 Grafana 설치
Kubernetes 모니터링을 위해선 당연히 데이터를 수집할 수 있는 주체가 있어야 하고 그 데이터를 보여줄 수 있는 주체가 있어야 한다.
- Promethues: 데이터 수집 및 저장을 담당
- Grafana: 데이터를 시각화 및 사용자 친화적인 인터페이스 제공
각각 설치는 Helm을 통해 수행할 수 있다. (Helm 설치)
Promethues 설치
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/prometheus
Grafana 설치
helm repo add grafana https://grafana.github.io/helm-charts
helm install grafana grafana/grafana
3. Node Exporter를 설치 및 로그 확인
우리가 원하는 바는 Kubernetes의 상태를 모니터링하는 것이다 .Promethues는 데이터를 수집해 주고 Grafana는 수집된 데이터를 보여주는데, 현재 수집된 데이터가 없다.
Kubernetes는 하나 이상의 노드로 구성되고 이 노드를 모니터링하는 게 Kubernetes의 상태를 모니터링하는 것이다.
노드(Node)의 상태를 조회하는 수집기 역할을 하는 것이 설치하고자 하는 Node Exporter가 하는 일이다.
2024.01.04 기준 prometheus를 helm으로 설치하니 node-exporter가 자동으로 설치되었다.
node exporter는 노드의 상태를 조회하기에 노드마다 하나씩 필요하다. 이러한 성격의 Pod를 배포하기 위해 대부분의 경우 데몬 셋 사용한다. 위 스크린샷을 통해 잘 배포된 것을 확인했다.
따라서 별도의 설치는 필요 없다.
4. Grafana를 통한 대시보드 구성
Grafana는 "사용자 친화적인 인터페이스 제공" 한다고 했다. UI를 제공하니 port-forward를 통해 접근해 보자.
kubectl port-forward svc/grafana 3000:80
이제 http://localhost:3000에 접근하면 된다.
- username: admin
- password: 명령어의 결과 ->
kubectl get secret --namespace default grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
이제 Grafana에서 해줘야 할 일은 두 가지이다.
- Prometheus 연결하기
- 대시보드 구성하기
위 스크린샷에서 Data Source를 클릭해서 Prometheus를 등록하자.
Connection 정보에 prometheus server URL을 입력해야 하는데 같은 클러스터에 배포되어 있기에 해당 서비스 DNS를 입력해 주면 된다.http://prometheus-server.default.svc.cluster.local
나머지는 추가로 입력할 부분 없이 제일 아래로 이동해서 Save & test로 등록을 마치자.
이제 남은 건 대시보드 구성하기이다.
Grafana의 큰 장점이라 생각하는데, 공통 애플리케이션을 위한 다양한 미리 정의된 대시보드를 제공한다.
Dash Board를 클릭하면 Import dashboard 버튼을 확인할 수 있을 것이다.
이제 아래와 같은 스크린샷을 확인할 수 있다.
우리한테 필요한 Node Exporter Full을 가져오기 위해 1860을 입력한 뒤 Load를 클릭하자.
이제 다음과 같은 대시보드를 볼 수 있다.
5. 마무리
Prometheus는 Pull 기반으로 메시지를 수집한다. 이 포스팅에선 아래와 같이 Prometheus가 메시지를 수집한다.
- node exporter가 노드의 메트릭을 수집한다.
- HTTP 서버를 통해 노출한다.
- 일정 주기로 node exporter의 HTTP 엔드포인트에 요청을 보낸다.
node expoter는 노드의 메트릭을 수집하는 역할을 했지만 당연히 Application에서 발생하는 Custom Metric을 Prometheus를 통해 수집하고 Grafana를 통해 시각화할 수 있다. 다음 포스팅에선 이를 다뤄보자.