Amazon Managed Prometheus

안녕하세요, 오늘은 베스핀글로벌 SRE실 권대욱님이 작성해주신 Amazon Managed Prometheus에 대해 알아봅니다.

궁금한 부분이 있으시면 편하게 댓글을 달아주세요 🙂

1. Overview

이 문서에서는 Amazon Managed Prometheus 사용 방법에 대해 가이드한다.

2. Prerequisites

  • AWS EC2
  • AWS Prometheus
  • Prometheus, Grafana, node-exporter
  • IAM Role

3. Goals

  • AWS Prometheus의 사용법을 숙지하고, 이점에 대해 파악한다.
  • AWS Prometheus workspace를 생성한다.
  • EC2에 prometheus와 Grafana, node-exporter를 설치한다.
  • 수집된 데이터를 AWS Prometheus workspace로 전송한다.
  • Grafana의 data source를 AWS Prometheus workspace로 지정한다.
  • 구성도

4. Environment details

– 테스트하기에 앞서, 필요한 Prometheus, Grafana, node-exporter를 준비한다.

  • grafana-8.0.3-1.x86_64.rpm
  • node_exporter-1.2.0.linux-amd64.tar.gz
  • prometheus-2.35.0.linux-amd64.tar.gz

5. AWS Prometheus

– AWS Prometheus workspace를 생성하여, 수집되는 데이터 저장소를 생성한다.

6. Create EC2 & IAM Role

– AWS Prometheus 사용을 위한 정책과 EC2 list를 가져올 수 있는 정책을 가진 Role을 생성한다.

– EC2를 생성하여, 생성한 IAM role을 적용한다.

7. Install Prometheus

– Prometheus가 데이터를 수집할 node-exporter 설정과 데이터를 전송할 AWS Prometheus를 설정하여 구동될 수 있도록 한다.

Step1. Modify Prometheus.yml

  • 다운받은 소스를 압축 해제하여, Prometheus.yml 파일을 수정한다.
  • ec2_sd_configs를 통하여 해당 region의 해당 tag를 가진 ec2 목록 중 node-exporter port인 9100포트로 통신이 되는 인스턴스들에 대해 데이터를 scrape 하도록 설정한다.
  • Remote_wirte 설정을 통해 AWS Prometheus로 데이터를 전송할 수 있도록 설정한다.

Step2. Check ExecStart option

  • Prometheus 실행 시 옵션에 대해 체크한다.
  • step1에서 설정한 yml 파일을 –config.file 옵션에 지정해준다.
  • –storage.tsdb.path을 통해 data가 저장될 위치를 지정해준다.
  • 이외에 Prometheus 실행 옵션이 굉장히 많으며, 공식 문서를 통해 원하는 옵션을 추가하여 구동하여도 좋다.

Step3. Start Prometheus

  • systemctl start Prometheus를 통해 구동한다.
  • 구동 후 정상 실행되었는지 확인한다.

8. Install Node-exporter

– 여러 ec2의 데이터 수집을 위해 prometheus가 설치된 ec2와 새로운 ec2에 node-exporter를 설치한다.
– 다운받은 node-exporter 소스를 압축 해제하여 실행한다.
– 실행 후 9100 포트가 올라오고 정상 실행되었는지, 체크한다.

9. Install Grafana

– Sigv4 사용을 위해 grafana는 7.3.5 버전 이상으로 다운로드한다.
– rpm으로 다운받은 Grafana를 yum install을 통해 설치한다.

Step1. Modify Grafana.ini

– Sigv4 인증 절차를 위해 /etc/grafana/grafana.ini 설정 파일에서 주석 해제 및 true로 변경한다.

  • sigv4_auth_enabled = true

Step2. Start Grafana

– systemctl start grafana 를 통해 구동한다

  • 구동 후 정상 실행되었는지 확인한다.

10. Check Prometheus Data

– Prometheus가 연동이 잘되었는지, instance들의 정보는 잘 가져오는지 체크한다.

Step1. Check Target

– Prometheus 설정 중 scrape 을 이용하여 정상적으로 target이 등록되었는지 확인한다.

  • http://ADDRESS:9090/targets

Step2. Check Target metric data

– 설정된 target들의 metric data가 정상 수집되는지 체크한다.

  • http://ADDRESS:9090/graph

Step3. Check connect AWS Prometheus

– 설치된 prometheus와 AWS prometheus가 정상적으로 연동되면 로그에 아래와 같이 정상 연동되는 것으로 출력된다

– Role이 연결이 안되었거나, policy가 잘못 적용된 경우 아래와 같이 403권한 에러가 발생한다.

– 이외에 AWS prometheus의 remote_write url을 잘못 입력하여도 연결이 실패한다.

Step4. Check Grafana

– 설치된 grafana에 접속하여 data source를 AWS Prometheus로 연결한다.

– URL의 경우 AWS prometheus의 endpoint 주소의 끝부분인 /api/v1/~~ 부분을 모두 삭제하고 입력한다.
– Grafana 실행 시 활성화한 sigv4 auth를 이용하여 aws key를 통해 AWS와 연동한다.

Step5. Check Grafana from AWS Prometheus

– 해당 설정까지 완료되었다면, grafana는 AWS Prometheus와 연동된 상태이다.
– 이제 grafana에서 promql을 이용하여 질의 시 가져오는 데이터는 AWS Prometheus의 데이터가 된다.
– 실제 AWS Prometheus가 데이터를 잘 저장하는지 체크해본다.
– Grafana explore에서 간단한 metric을 이용하여 데이터를 잘 가져오는지 확인한다.

– 위의 사진과 같이 query 진행하였을 때 데이터를 가져온다면 AWS Prometheus에 데이터가 잘 저장이 되었으며, grafana와의 연동도 정상인 것으로 확인할 수 있다.

  • 공개된 dashboard json을 import한 모습은 아래와 같다.

11. Conclusion & Consideration

Conclustion
  • Amazon managed Prometheus 이점
  1. 수집 및 쿼리 요구 사항이 증가함에 따라 자동으로 확장
  2. 수백만개의 고유한 시계열 지표를 처리하면서 일관된 쿼리 응답 시간을 유지
  3. AWS 리전 내에서 다중 AZ 복제를 제공
  4. AWS 및 온프레미스의 모든 자체 관리형 Kubernetes 클러스터에서 측정 항목을 안전하게 수집, 알림 및 쿼리할 수 있는 API도 포함
  5. Prometheus 서버를 구성, 업그레이드 및 크기 조정하는 데 따른 운영 비용을 크게 절감
  • 개인 의견
  1. 기존 독립형 Prometheus를 운영할 때의 경우 데이터가 많아질수록 많은 리소스가 필요하였습니다.
    특히 메모리 부족 시 WAL 파일에 문제가 발생하며, 일정 기간의 데이터를 삭제할 수밖에 없는 상황도 있었습니다.
  2. 장기간의 데이터를 쿼리할 경우 지연 시간이 발생하며, 서버에 부하가 발생하는 현상도 존재하였습니다.
  3. 이러한 문제점을 AWS에서는 자동으로 리소스를 확장하며 일관된 응답 시간을 유지해주고, 서버의 리소스 부담에 대해 자유로워질 수 있어서 강력한 이점으로 생각합니다.
  4. Prometheus는 기본적으로 HA구성을 지원하지 않기 때문에, HA 구성을 하려면 thanos를 같이 사용해야 합니다.
  5. Prometheus가 AWS 계정별 서비스별로 여러 개가 존재할 경우 개별 prometheus에서 AWS prometheus에게 데이터를 전달하여 데이터를 중앙에서 관리하며, 그라파나에서는 중앙에 집계된 AWS prometheus의 데이터만 사용하기 때문에, HA 구성을 위한 별도의 thanos 구성이 불필요하다는 이점도 있습니다.
Consideration
  1. AWS prometheus는 다수의 prometheus에서 수집된 데이터를 저장하게 되는데, 그라파나에서 서비스 별 또는 계정 별 데이터를 시각화하려면, PromeQL 작성에 주의가 필요할 것으로 판단됩니다.
  2. AWS prometehus workspace 콘솔에서 데이터를 정상적으로 잘 전달받고 있는지, 체크할 수 있는 부분은 없습니다.
    이로 인해 데이터가 잘 전송되고 있는지, 한눈에 쉽게 파악할 수 없고, 개별 prometheus에서 로그를 통해 확인이 필요합니다.
    해당 부분은 추후에 AWS에서 개선이 되지 않을까 생각됩니다.

감사합니다 🙂

Written by 권 대 / Daewook Kwon

Cloud Engineer

Leave a Comment