스크래핑(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"]
- 002: 프로메테우스가 10초마다 한 번씩 모든 컨테이너에서 측정값을 수집
- 005~008: 컨테이너의 IP 주소를 알기 위해 DNS를 사용하지만, image-gallery에 대한 설정은 단일 컨테이너를 대상으로 하는 설정 이 컴포넌트에 스케일링을 적용하면 의도하지 않은 동작을 보일 수 있다.
- 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 사용
- 표현식 텍스트 박스에 쿼리를 입력하여 측정값을 조건에 따라 조회 가능