Prometheus 구성

DockerBeginner
지금 연습하기

소개

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

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

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 96%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

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 를 관리하고 운영하는 데 필수적인 기술입니다.