본문 바로가기
서버구축 (WEB,DB)

Prometheus와 Grafana를 통한 모니터링 시스템 구축

by 날으는물고기 2023. 9. 28.

Prometheus와 Grafana를 통한 모니터링 시스템 구축

프로메테우스(Prometheus)와 그라파나(Grafana)는 모니터링 시스템을 구축하기 위한 흔한 조합 중 하나입니다. API 서버가 처리한 요청의 양을 모니터링하는 작은 예제를 통해 대시보드를 만드는 방법을 공유하겠습니다.

 

애플리케이션이 시작되기 전이나 후에 특정 기간 동안 처리한 요청 수(QPS), 평균 응답 시간, 동시에 사용 중인 리소스(CPU, 메모리, I/O)의 양을 알고 싶어질 수 있습니다.

Architrcture Overview from Prometheus Github

 

프로메테우스(Prometheus): 메트릭 수집기

프로메테우스는 시스템 및 서비스 모니터링 시스템으로, 사전 정의된 대상에서 메트릭을 수집합니다. 대상은 서비스 검색을 통해 찾을 수 있거나 API 서버, 레디스 서버 또는 SQL 서버와 같은 응용 프로그램의 엔드포인트에서 데이터를 수집하도록 수동으로 구성할 수 있습니다.

 

그라파나(Grafana): 데이터 시각화 도구

그라파나는 CloudWatch, Stackdriver, Elasticsearch 및 물론 프로메테우스와 같은 다양한 데이터 소스를 지원합니다. 그라파나를 데이터 소스와 연결한 후에는 대시보드와 패널을 수동으로 생성하거나 공식 웹 사이트에서 공유된 다양한 대시보드를 가져올 수 있습니다.

A demo dashboard at  play.grafana.org

프로메테우스와 그라파나를 사용하여 모니터링 대시보드를 만들기 위해 세 가지 구성 요소가 필요합니다.

  1. 메트릭 익스포터(Metrics Exporter): 일반적으로 요청을 처리하는 서버입니다.
  2. 프로메테우스 서버(Prometheus Server): 정기적으로 메트릭을 익스포터/작업에서 수집합니다.
  3. 그라파나(Grafana): 프로메테우스 서버에 쿼리하여 시각적 대시보드를 생성합니다.

 

메트릭 익스포터: 더미 API 서버

먼저, 프로메테우스 서버는 메트릭을 익스포트하여 수집하고 기본 그래프를 생성해야 합니다.

 

여기서는 GO로 더미 API 서버를 만들어 메트릭 익스포터로 사용하고, 총 API 호출 수를 위한 카운터와 각 엔드포인트의 API 호출 수를 위한 CounterVec를 구현했습니다. CounterVec 유형(그리고 모든 다른 Vec 유형)은 메트릭에 레이블을 정의하거나 첨부할 수 있으므로 나중에 유연한 쿼리를 수행할 수 있습니다. 더 많은 메트릭 유형을 찾으려면 공식 문서를 참조하세요.

 

더미 API 서버를 실행한 후에는 메트릭을 http://localhost:9453/metrics에서 액세스할 수 있으며 go_info와 같은 많은 미리 정의된 프로메테우스 메트릭이 이미 익스포트되었습니다.

 

예를 들어, 다음은 API 호출에 대한 카운터 메트릭 예입니다.

# HELP myexporter_counter_metric This is a counter for the number of total API calls
# TYPE myexporter_counter_metric counter
myexporter_counter_metric 0.0

API 엔드포인트에 여러 번 액세스한 후에 사용자 정의 메트릭은 다음과 같이 됩니다.

# HELP myexporter_counter_metric This is a counter for the number of total API calls
# TYPE myexporter_counter_metric counter
myexporter_counter_metric 24.0
# HELP myexporter_counter_vec_metric This is a counter vec for the number of all API calls
# TYPE myexporter_counter_vec_metric counter
myexporter_counter_vec_metric{endpoint="/api/apple"} 9.0
myexporter_counter_vec_metric{endpoint="/api/banana"} 15.0

지금까지 프로메테우스 서버가 메트릭을 수집할 준비가 되었습니다.

 

프로메테우스 서버

이제 도커를 사용하여 프로메테우스 서버를 시작해 보겠습니다. api-server 작업은 더미 API 서버에서 메트릭을 스크랩하기 위해 다음 구성 파일에 미리 추가되었습니다.

 

프로메테우스 용어로 스크랩할 수 있는 엔드포인트를 인스턴스라고 하며 일반적으로 단일 프로세스에 해당합니다. 동일한 목적을 가진 인스턴스 모음, 예를 들어 확장 또는 신뢰성을 위해 복제된 프로세스는 작업이라고 합니다.

 

예를 들어, 설정 파일을 ~/workdir/config/prometheus.yml로 다운로드했다면 ~/workdir/에서 다음 명령을 실행할 준비가 되었습니다.

$ docker run --name prometheus -d -p 127.0.0.1:9090:9090 --volume="$PWD/config":/etc/config prom/prometheus --config.file=/etc/config/prometheus.yml

이제 프로메테우스 서버는 http://localhost:9090/에서 액세스할 수 있으며 http://localhost:9090/targets에 두 개의 대상이 있습니다. 그래프를 얻으려면 PromQL(Prometheus Query Language)을 사용하기 전에 공식 예제를 확인하십시오.

A graph shows how many requests are handled by our dummy API server

 

그라파나 서버

마지막으로, 프로메테우스 서버가 API 서버에서 메트릭을 가져올 수 있도록 한 후, 그라파나를 사용하여 자동 새로 고침 가능한 대시보드를 생성해 보겠습니다.

 

다시 한 번 도커를 사용하여 단일 명령어로 그라파나를 실행합니다.

$ docker run -d --name=grafana -p 3000:3000 grafana/grafana

localhost:3000을 브라우즈하고 사용자 이름/비밀번호로 admin/admin을 입력하여 그라파나에 액세스합니다.

 

Prometheus 유형의 데이터 소스를 추가하고 URL 필드를 host.docker.internal:9090로 채우고 저장합니다.

그라파나에 대시보드 예제를 가져오려면 http://localhost:3000/dashboard/import에서 가져옵니다.

 

대시보드가 자동 새로 고침되며 아름답게 생성되었습니다!

API 서버에 액세스하고 대시보드가 요청 수를 자동으로 반영하는지 확인해 보세요.

 

요약

간단한 메트릭을 수집하는 익스포터를 사용하여 모니터링 대시보드를 구축하는 방법을 보여주는 작은 대시보드를 소개했습니다. grpc 서버와 쉽게 통합되어 유용한 메트릭을 수집하는 go-grpc-prometheus와 같은 잘 알려진 익스포터도 많이 있음을 언급할 가치가 있습니다.

728x90

댓글