9.3.측정값 수집을 맡을 프로메테우스 컨테이너 실행하기

스크래핑(scraping)

  • 프로메테우스는 직접 측정값을 대상 시스템에서 받아다 수집하는 풀링 방식으로 동작하며 이 과정을 스크래핑(scraping)이라고 한다.
  • 프로메테우스를 실행하면 스크래핑 대상 엔드포인트를 설정해야 한다.
  • 운영 환경의 컨테이너 플랫폼에서는 클러스터에 있는 모든 컨테이너를 찾도록 설정할 수도 있다.
  • 단일 서버의 도커 컴포즈 환경에서는 서비스 목록으로 도커 네트워크의 DNS를 통해 대상 컨테이너를 자동으로 찾는다.

프로메테우스 설정

  • 애플리케이션 측정값을 스크래핑하기 위한 프로메테우스 설정
  • 프로메테우스 공식 이미지를 기반으로 설정 파일을 추가
# global:전역 설정
#   scrape_interval: 스크래핑 간격
# 
# scrape_configs:  컴포넌트마다 스크래핑 작업을 의미하는 job 설정을 정의
#   job_name: 해당 스크래핑 작업의 이름
#   metrics_path: 측정값을 수집할 엔드포인트
#   static_configs: 호스트명으로 단일 컨테이너를 지정
#   dns_sd_configs: DNS 서비스 디스커버리 기능을 통해 여러 컨테이너를 지정할  있고 스케일링에 따라 대상 컨테이너를 자동으로 확대할 수도 있다.

001) global:
002)   scrape_interval: 10s
003) 
004) scrape_configs:
005)   - job_name: "image-gallery"
006)     metrics_path: /metrics
007)     static_configs:
008)       - targets: ["image-gallery"]
009) 
010)   - job_name: "iotd-api"
011)     metrics_path: /actuator/prometheus
012)     static_configs:
013)       - targets: ["iotd"]
014) 
015)   - job_name: "access-log"
016)     metrics_path: /metrics
017)     scrape_interval: 3s
018)     dns_sd_configs:
019)       - names:
020)           - accesslog
021)         type: A
022)         port: 80
023)         
024)   - job_name: "docker"
025)     metrics_path: /metrics
026)     static_configs:
027)       - targets: ["DOCKER_HOST:9323"]
  1. 002: 프로메테우스가 10초마다 한 번씩 모든 컨테이너에서 측정값을 수집
  2. 005~008: 컨테이너의 IP 주소를 알기 위해 DNS를 사용하지만, image-gallery에 대한 설정은 단일 컨테이너를 대상으로 하는 설정 이 컴포넌트에 스케일링을 적용하면 의도하지 않은 동작을 보일 수 있다.
  3. 015~022: 프로메테우스는 DNS의 응답 중에서 가장 앞에 오는 IP 주소를 사용하므로 도커 엔진이 DNS 응답을 통해 로드 밸런싱을 적용한 경우 그 컨테이너 모두에서 측정값을 받아올 수 있다. accesslog 컴포넌트의 스크래핑은 여러IP 주소를 상정해 설정됐으므로 모든 컨테이너의 IP 주소를 목록으로 만들어 이들 모두에게서 같은 간격으로 측정값을 수집한다.

도커 컴포즈 실행

  • /ch09/exercises 에서 도커 컴포즈 실행
  • access-log 서비스의 공개 포트는 무작위로 설정되어 있으며 스케일링을 적용
# 도커 컴포즈 실행 docker-compose -f docker-compose-scale.yml up -d --scale accesslog=3

# 웹 애플리케이션에 부하를 가함 for i in {1..10}; do curl http://localhost:8010 > /dev/null; done

프로메테우스 웹 인터페이스로 측정값 조회

  • http://localhost:9090/graph 에 접속하여 access-log 컴포넌트의 측정값을 조회
  • 이 측정값의 값(value) 항목을 보면 로드 밸런싱이 얼마나 고르게 부하를 분배했는지 알 수 있다.
  • 이상적인 상황이라면 이 측정값이 모두 같겠지만, 로드 밸런싱에 네트워크가 관여하는 부분(DNS 캐시 혹은 HTTP keep-alive 커넥션 등)이 많으므로 단일 서버에서 도커를 실행했다면 측정값이 완전히 같은 경우는 보기 어렵다.

프로메테우스 웹 인터페이스에서 쿼리 사용

PromQL 이란

  • 프로메테우스에서 쓰이는 쿼리 언어
  • 쿼리 값의 시간에 따른 추이 또는 변화율을 확인하거나 측정값 간의 상관관계를 보여 주는 여러 통계 함수를 갖추고 있다.

PromQL 사용

  • 표현식 텍스트 박스에 쿼리를 입력하여 측정값을 조건에 따라 조회 가능

links

social