[Monitoring] Prometheus와 Grafana 연동
[Monitoring] Prometheus와 Grafana 연동
안녕하세요? 정리하는 개발자 워니즈 입니다. 이번시간에는 kubernetes의 모니터링 도구인 Prometheus 에 대해서 정리를 해보고 그것을 시각화 하는 Grafana와 연동을 해보고자 합니다.
프로메테우스는 시계열 데이터를 수집하는데 적합하고, 특히 쿠버네티스에 대한 모니터링을 제공해준다는 점에서 정말 좋은 것 같습니다. 필자는 구축되어있는 쿠버네티스 클러스터에 프로메테우스를 헬름으로 설치를 한 뒤, Grafana에서 제공해주는 Dashboard를 연결하는 수준으로 대시보드를 작성했습니다.
이제는 직접 대시보드를 작성하는 것보다, 잘 작성된 것을 가져다 쓰기만 해도 어느정도 수준높게 모니터링이 가능하다고 생각이 듭니다. (물론, 개인적으로 만든게 허접해서 그럴수도….)
1. 프로메테우스 아키텍처
프로메테우스는 오픈소스 입니다. Apache 2 라이센스로 공개되어 있어서 무료로 사용 할 수 있습니다.
프로메테우스는 CNCF에 소속된 오픈소스 프로젝트이며, 시계열 데이터를 처리하는 것이 주목적으로, MSA형태의 컨테이너 서비스, 대규모 서버 클러스터 모니터링 등에서 사용되는 것이 일반적입니다.
다른 모니터링과 다른점은 대부분의 모니터링 도구가 Push 방식을 사용하고 있습니다. agent와 server가 존재하고 agent에서 데이터를 server쪽으로 전달하여 수집하는 방식인데, 프로메테우스는 pull방식으로 각 agent에서 데이터를 가져오는 방식을 사용하고 있습니다.
2. 프로메테우스 구성
구성을 크게 나누면 다음과 같습니다.
- Exporter
모니터링 대상의 Metric 데이터를 수집하고, Prometheus가 접속했을 때 정보를 알려주는 역할을 수행합니다.
- Prometheus Server
Exporter가 열어놓은 HTTP 엔드포인트에 접속해서 Metric을 수집합니다.
- Grafana
시각화 부분을 담당합니다.
- Alertmanager
알람 규칙을 만들어서 Alert Manager로 보내면 Alert Manager가 규칙에 따라 알림을 보냅니다.
3. 프로메테우스 & 그라파나 설치
쿠버네티스 환경에서 프로메테우스와 그라파나를 설치하는 것은 Helm을 이요하게 되면 간편합니다. 공식적으로 제공해주는 Helm Stable 버전이 있기 때문에 활용해서 설치하면 됩니다.
위의 helm chart를 이용해서 설치를 진행하게 되면, alertmanager, kube-state-metrics, node-exporter, pushgateway, server에 대한 내용이 한번에 설치가 됩니다.
- Helm 설치
# Helm이 기본적으로 설치 되어있어야 합니다.
$ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.sh
$ chmod 700 get_helm.sh
$ ./get_helm.sh
# Helm stable 버전 download
$ git clone https://github.com/kubernetes/charts
- Prometheus 설치
$ cd /{helmchart경로}/charts/stable/prometheus
$ helm install -f values.yaml stable/prometheus --name prometheus --namespace prometheus --set service.type=NodePort
- Grafana 설치
# admin Password 수정
$cd /{helmchart경로}/charts/stable/grafana
$vi values.yaml
# Administrator credentials when not using an existing secret (see below)
adminUser: admin
adminPassword: admin
$cd /{helmchart경로}/charts/stable/grafana
$helm install -f values.yaml stable/grafana --name grafana --namespace grafana --set service.type=NodePort
4. 그라파나 대시 보드 연동
설치를 완료하게 되면, Prometheus DataSource 연동을 통하여, 시각화를 할 수 있습니다.
필자는 위에서 Nodeport로 셋팅을 했다가, 외부 접속을 위해서 다음과 같이 LoadBalancer 타입으로 service를 변경했습니다.
# 서비스 타입 변경(LoadBalancer)
kubectl patch svc grafana -n grafana -p '{"spec": {"type": "LoadBalancer"}}'
그렇게 되면, 자연스럽게 classic type의 로드밸런서를 한개 생성하고, 자동으로 Workernode를 붙여줍니다.
해당 로드밸런서의 DNS 이름으로 접근을 하면 그라파나 화면이 노출됩니다.
초기 id/pw는 위의 셋팅한대로 입력을 한 뒤, 접속을 합니다.
- Datasource 연동
그라파나에서 프로메테우스를 데이터소스로 사용하기 위해서는 다음의 작업이 수행되어야 합니다.
[Configuration] > [Datasources] > [Add Datasource] 클릭
위와 같은 화면이 노출되고 프로메테우스를 선택합니다.
그러면 URL을 입력하는 화면이 노출되는데, 프로메테우스를 Nodeport타입으로 설치 했고, 같은 클러스터내에서 Grafana가 Prometheus로 접근을 할때, Cluster-IP로 접근을 하면됩니다.
그래서 서비스를 조회한뒤, 프로메테우스 서버의 CLuster-IP로 입력을 합니다.
그렇게 한 뒤, save버튼을 누르게 되면, 데이터 소스의 연결 상태를 확인할 수 있습니다.
- 대시보드 연동
대시보드를 직접 커스터마이징 해서 작성을 할 수 있지만, 기본적으로 커뮤니티를 통해서 제공되는 Dashboard들이 굉장히 많기 때문에 잘만 활용하거나 변경해서 사용하면 훨씬 손쉽게 대시보드를 제공할 수 있습니다.
필자가 사용했던, 대시보드입니다.
Node Exporter for Prometheus Dashboard EN v20191102
제공해주는 대시보드를 import 하기 위해서는 Dasyboard ID 가 필요합니다. import 하고자 하는 대시보드의 아이디를 복사해두었다가 import 메뉴에서 입력을 하면됩니다.
아이디를 입력하게 되면, 자연스럽게 API호출을 통해서 Load하게 됩니다. 별다른 설정없이 Dashboard가 생성이 됩니다.
5. 마치며…
이번시간에는 EKS 클러스터내에 프로메테우스 + 그라파나를 헬름을 통해서 설치 한 뒤, 연동하는 내용에 대해서 포스팅을 해봤습니다. 확실히 직접 구축하게 되면, 여러가지 고려할점과 고민들이 생기기 마련인데, 마치 SaaS 형태로 제공해주는 것처럼 바로 설치하고 import를 통해서 멋진 대시보드까지 생성하게 되었습니다.
아직은 기초적인 단계로 연동에 대한 부분만 포스팅을 했지만, 어떤 대시보드들을 넣어주고 어떠한 모니터링 요소를 가져갈지에 대한 포스팅을 다음으로 미루도록 하겠습니다.
또한, Alert를 어떤식으로 보내줄지도 이어서 작성을 하도록 하겠습니다.