Prometheus 구성

DockerBeginner
지금 연습하기

소개

Prometheus 는 강력한 오픈 소스 모니터링 및 알림 도구입니다. Prometheus 의 동작은 일반적으로 prometheus.yml이라는 구성 파일에 의해 제어됩니다. 이 파일은 메트릭을 얼마나 자주 수집할지, 어떤 대상을 수집할지, 알림 규칙을 어떻게 처리할지 등 모든 것을 정의합니다.

이 랩은 "Prometheus 설치" 랩의 후속 과정으로, Docker 를 사용하여 Prometheus 를 설치하고 실행하는 방법을 배웠습니다. 이제 Prometheus 를 실행하는 방법을 알았으므로, 이 랩에서는 Prometheus 구성의 기본 사항을 배우게 됩니다. 기본 구성으로 실행 중인 Prometheus 컨테이너를 검사하는 것부터 시작합니다. 그런 다음 사용자 정의 prometheus.yml 파일을 만들고 이 파일을 사용하여 새 컨테이너를 시작하며, 서비스를 다시 시작하지 않고 구성을 다시 로드하는 방법을 배웁니다.

Prometheus 컨테이너 실행 확인

이 단계에서는 설정 스크립트에 의해 시작된 초기 Prometheus 컨테이너가 실행 중인지 확인할 것입니다. 이 컨테이너는 기본 내장 구성을 사용합니다.

실행 중인 모든 Docker 컨테이너를 나열하여 prometheus-default 컨테이너를 확인해 보겠습니다.

docker ps

이와 유사한 출력을 볼 수 있으며, prometheus-default라는 이름의 컨테이너가 실행 중임을 나타냅니다. PORTS 열은 호스트의 포트 9090이 컨테이너의 포트 9090에 매핑되어 있음을 나타냅니다.

CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS                                       NAMES
a1b2c3d4e5f6   prom/prometheus     "/bin/prometheus --c…"   15 seconds ago   Up 14 seconds   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   prometheus-default

이를 통해 초기 Prometheus 인스턴스가 활성화되었음을 확인할 수 있습니다. 다음 단계에서는 Prometheus 웹 UI 에 액세스하여 기본 구성이 작동하는 것을 볼 것입니다.

localhost:9090 에서 Prometheus 웹 UI 접속

이 단계에서는 현재 실행 중이며 포트 9090 에 노출된 Prometheus 웹 인터페이스에 액세스합니다. LabEx 환경은 가상 머신 내에서 실행되는 웹 서비스에 액세스할 수 있는 편리한 방법을 제공합니다.

랩 인터페이스 상단에 있는 +(새 탭) 버튼을 클릭합니다.

Web Service 옵션을 선택하고 포트로 9090을 입력합니다.

그러면 랩 환경에서 실행 중인 서비스에 연결된 새 브라우저 탭이 열립니다.

포트 9090 을 매핑했으므로 Prometheus UI 를 사용할 수 있습니다. 메트릭을 탐색하기 위해 PromQL 쿼리를 작성하고 실행할 수 있는 메인 랜딩 페이지인 Prometheus Expression Browser 가 표시됩니다.

Prometheus Expression Browser landing page

이 페이지의 존재는 Prometheus 컨테이너가 올바르게 실행 중이며 액세스 가능하다는 것을 확인시켜 줍니다.

기본 스크랩 구성을 포함한 prometheus.yml 파일 생성

이 단계에서는 prometheus.yml이라는 사용자 지정 Prometheus 구성 파일을 생성합니다. 이 파일은 Prometheus 에 무엇을 모니터링할지 지시합니다.

Prometheus 웹 UI 에 액세스하여 작동하는 것을 확인했으므로 이제 필요에 따라 Prometheus 를 구성하는 데 사용할 수 있는 사용자 지정 구성 파일을 생성해 보겠습니다.

~/project 디렉터리에 파일을 생성하기 위해 nano 텍스트 편집기를 사용합니다.

nano prometheus.yml

이제 다음 YAML 구성을 nano 편집기에 복사하여 붙여넣습니다. 이 구성은 Prometheus 가 5 초마다 자체 메트릭을 스크랩하도록 지시합니다.

global:
  scrape_interval: 5s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

이 구성을 자세히 살펴보겠습니다.

  • global: 이 섹션은 다른 모든 구성 섹션에 유효한 매개변수를 정의합니다.
  • scrape_interval: 스크랩 간의 기본 시간을 5 초로 설정합니다.
  • scrape_configs: 이 섹션은 스크랩할 대상 및 매개변수 집합을 정의합니다.
  • job_name: 이 작업에 할당된 이름으로, 이 대상에서 스크랩된 모든 시계열에 레이블로 첨부됩니다.
  • static_configs: 모니터링할 대상 목록을 지정합니다.
  • targets: 스크랩할 엔드포인트를 나열합니다. 이 경우 Prometheus 서버 자체입니다.

내용을 붙여넣은 후 Ctrl+X를 누르고 Y를 누른 다음 Enter를 눌러 파일을 저장하고 nano를 종료합니다.

마운트된 구성으로 Prometheus 컨테이너 실행

이제 사용자 지정 prometheus.yml 파일을 준비했으므로 이를 사용하는 새 Prometheus 컨테이너를 실행해야 합니다. 먼저 이전 컨테이너를 중지하고 제거합니다.

docker stop prometheus-default
docker rm prometheus-default

다음으로 prometheus-custom이라는 새 컨테이너를 시작합니다. -v 플래그를 사용하여 로컬 prometheus.yml 파일을 컨테이너 내의 예상 위치인 /etc/prometheus/prometheus.yml로 마운트합니다. 또한 다음 단계에서 사용할 핫 리로딩 API 를 활성화하기 위해 --web.enable-lifecycle 플래그를 추가합니다.

docker run -d \
  --name prometheus-custom \
  -p 9090:9090 \
  -v ~/project/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --web.enable-lifecycle

새 플래그를 검토해 보겠습니다.

  • -v ~/project/prometheus.yml:/etc/prometheus/prometheus.yml: 이것은 볼륨 마운트입니다. 호스트 머신의 ~/project 디렉터리에 있는 prometheus.yml 파일을 컨테이너 내부의 /etc/prometheus/prometheus.yml 경로에 매핑합니다. Prometheus 는 시작 시 이 파일을 읽습니다.
  • --web.enable-lifecycle: 이 명령줄 플래그는 구성 리로딩을 위한 HTTP API 를 활성화하며, 이는 /-/reload 엔드포인트를 통해 액세스할 수 있습니다.

새 컨테이너가 실행 중인지 확인할 수 있습니다.

docker ps

목록에서 prometheus-custom 컨테이너를 볼 수 있어야 합니다.

API 를 통한 Prometheus 구성 다시 로드

Prometheus 의 강력한 기능 중 하나는 전체 재시작 없이 구성을 리로드할 수 있다는 점이며, 이는 메트릭 수집의 중단을 방지합니다. 이는 --web.enable-lifecycle 플래그로 라이프사이클 API 를 활성화했기 때문에 가능합니다.

먼저 구성 파일을 수정하겠습니다. scrape_interval5s에서 15s로 변경합니다.

nano로 파일을 엽니다.

nano prometheus.yml

scrape_interval 줄을 15s로 변경합니다.

global:
  scrape_interval: 15s ## Changed from 5s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

파일을 저장하고 nano를 종료합니다 (Ctrl+X, Y, Enter).

이제 컨테이너를 재시작하는 대신 curl을 사용하여 /-/reload 엔드포인트에 POST 요청을 보냅니다. 이는 실행 중인 Prometheus 인스턴스에 마운트된 파일에서 구성을 다시 로드하도록 지시합니다.

curl -X POST http://localhost:9090/-/reload

리로드가 성공하면 아무런 출력이 표시되지 않습니다. 이 조용한 성공은 Prometheus 가 새 구성을 적용했음을 의미합니다.

Targets 페이지에서 스크랩된 메트릭 확인

마지막 단계에서는 Prometheus 웹 UI 를 확인하여 사용자 지정 구성이 활성화되었는지 검증합니다.

LabEx 환경은 VM 내에서 실행되는 웹 서비스에 액세스하기 위한 "Web Terminal" 탭 또는 유사한 메커니즘을 제공합니다. 랩 인터페이스에서 제공하는 브라우저에서 http://localhost:9090으로 이동하여 Prometheus UI 를 엽니다.

UI 가 로드되면 상단 탐색 표시줄에서 Status 메뉴를 클릭한 다음 Targets를 선택합니다.

Targets 페이지에서 prometheus.yml 파일에 정의된 스크랩 대상 (scrape targets) 을 볼 수 있습니다. prometheus 작업 (job) 아래에 하나의 대상이 표시되어야 합니다.

  • Endpoint: http://localhost:9090/metrics
  • State: 상태는 녹색 배경과 함께 UP이어야 합니다.
  • Last Scrape / Scrape Duration: 이 열은 마지막 스크랩이 발생한 시점과 소요 시간을 보여줍니다. 이전 단계에서 리로드한 변경 사항을 반영하여 스크랩 간 시간이 이제 약 15 초임을 관찰할 수 있습니다.

Prometheus Targets Page

이를 통해 Prometheus 가 사용자 지정 구성 파일을 성공적으로 로드했고, 지정된 대상을 스크랩하고 있으며, 구성 리로드를 적용했음을 확인할 수 있습니다.

요약

축하합니다! Prometheus 구성에 대한 이 실습을 성공적으로 완료했습니다.

이 실습에서는 다음을 배웠습니다.

  • 사용자 지정 prometheus.yml 구성 파일 생성
  • Docker 볼륨 마운트 (-v) 를 사용하여 Prometheus 컨테이너에 사용자 지정 구성 제공
  • Prometheus 라이프사이클 API 를 활성화하여 핫 리로딩 (hot-reloading) 허용
  • 간단한 curl 명령을 사용하여 Prometheus 구성 즉시 리로드
  • Prometheus 웹 UI 의 Targets 페이지를 확인하여 활성 구성 검증

이러한 기술은 모든 환경에서 Prometheus 를 관리하고 운영하는 데 필수적인 기술입니다.