소개
이 실습에서는 외부 서비스로 모니터링을 확장합니다. 하드웨어 및 OS 메트릭을 위한 Prometheus exporter 인 Node Exporter 를 설정합니다. 이 설정은 이전 실습에서 실행 중인 Prometheus 컨테이너를 제공합니다. Node Exporter 컨테이너를 실행하고 prometheus.yml에 새 타겟으로 추가합니다. 이 실습이 끝나면 Prometheus UI 내에서 호스트 수준 시스템 메트릭을 쿼리할 수 있습니다.
Node Exporter Docker 이미지 가져오기
이 단계에서는 Node Exporter 의 공식 Docker 이미지를 다운로드합니다. Node Exporter 는 호스트 머신에서 다양한 하드웨어 및 커널 관련 메트릭을 노출하는 Prometheus exporter 입니다.
시작하려면 Docker Hub 에서 prom/node-exporter 이미지를 가져옵니다. 터미널을 열고 다음 명령을 실행합니다.
docker pull prom/node-exporter
이 명령은 Docker Hub 레지스트리에 연결하고 Node Exporter 이미지의 최신 버전을 로컬 머신으로 다운로드합니다. 이미지의 각 레이어에 대한 다운로드 진행 상황을 보여주는 출력이 표시됩니다.
예상 출력:
Using default tag: latest
latest: Pulling from prom/node-exporter
Digest: sha256:a5579e72377a6053359058893b80f4f47c55d761457d685343b8e797859a159b
Status: Image is up to date for prom/node-exporter
docker.io/prom/node-exporter
9100 포트에서 Node Exporter 컨테이너 실행
이제 이미지를 확보했으므로 Node Exporter 를 컨테이너로 실행해 보겠습니다. Node Exporter 의 기본 포트인 9100에서 메트릭을 노출할 것입니다.
컨테이너를 시작하고 Prometheus 와 동일한 Docker 네트워크에 배치하려면 다음 명령을 실행합니다.
docker run -d -p 9100:9100 --name node-exporter --network monitoring prom/node-exporter
이 명령을 자세히 살펴보겠습니다.
-d: 컨테이너를 분리 모드 (detached mode) 로 실행하여 백그라운드에서 실행합니다.-p 9100:9100: 호스트의9100포트를 컨테이너의9100포트에 매핑합니다.--name node-exporter: 나중에 쉽게 참조할 수 있도록 컨테이너에 기억하기 쉬운 이름을 할당합니다.prom/node-exporter: 컨테이너를 생성하는 데 사용할 이미지입니다.
docker ps 명령으로 컨테이너가 실행 중인지 확인할 수 있습니다.
docker ps
실행 중인 컨테이너 목록에서 node-exporter를 볼 수 있어야 합니다. 선택적으로 다음 명령으로 네트워크 연결을 확인할 수 있습니다.
docker inspect node-exporter --format '{{.HostConfig.NetworkMode}}'
출력은 monitoring이어야 합니다.
예상 출력:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
... prom/node-exporter "/bin/node_exporter" A few seconds ago Up a few seconds 0.0.0.0:9100->9100/tcp, :::9100->9100/tcp node-exporter
... prom/prometheus "/bin/prometheus --c…" About a minute ago Up about a minute 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp prometheus
Node Exporter 타겟 추가를 위한 prometheus.yml 업데이트
이 단계에서는 새로 실행된 Node Exporter 컨테이너에서 메트릭을 스크랩 (scrape) 하도록 Prometheus 를 구성합니다. 이는 새로운 스크랩 작업을 추가하기 위해 prometheus.yml 설정 파일을 편집하여 수행됩니다.
먼저 nano 편집기를 사용하여 프로젝트 디렉토리에 있는 prometheus.yml 파일을 엽니다.
nano ~/project/prometheus.yml
이제 scrape_configs 섹션 아래에 Node Exporter 에 대한 새 작업 구성을 추가합니다. 최종 파일은 다음과 같아야 합니다. YAML 은 들여쓰기에 민감하므로 들여쓰기가 올바른지 확인하십시오.
global:
scrape_interval: 15s
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["prometheus:9090"]
- job_name: "node_exporter"
static_configs:
- targets: ["node-exporter:9100"]
새로운 블록이 하는 일은 다음과 같습니다.
job_name: 'node_exporter': 이 스크랩 작업에 이름을 부여하며, 수집된 메트릭에 레이블을 지정하는 데 사용됩니다.targets: ['node-exporter:9100']: Prometheus 에게 Node Exporter 를 어디에서 찾을 수 있는지 알려줍니다. 동일한 네트워크에 있는 컨테이너 간의 내부 DNS 확인을 Docker 가 제공하므로 컨테이너 이름을 사용합니다.localhost호스트 이름은 각 컨테이너에 범위가 지정되므로 다른 컨테이너에 도달하는 데 사용할 수 없습니다.
편집 후 Ctrl+X를 누른 다음 Y를 누르고 Enter를 눌러 파일을 저장하고 nano를 종료합니다.
업데이트된 설정으로 Prometheus 컨테이너 재시작
Prometheus 가 새 설정을 로드하려면 컨테이너를 재시작해야 합니다. 이전에 구성한 볼륨 마운트 (volume mount) 는 컨테이너가 재시작 시 업데이트된 prometheus.yml 파일을 인식하도록 보장합니다.
Prometheus 컨테이너를 재시작하려면 다음 명령을 실행합니다.
docker restart prometheus
이 명령은 prometheus라는 이름의 컨테이너를 정상적으로 중지한 다음 시작합니다. 몇 초 후 Prometheus 는 새 설정으로 실행될 것입니다.
이제 Prometheus UI 에서 변경 사항을 확인해 보겠습니다.
- LabEx 인터페이스에서
+(새 탭) 버튼을 클릭하고 Web Service를 선택한 다음 포트에9090을 입력합니다. - 새 탭이 열리면 Prometheus Expression Browser 랜딩 페이지가 표시됩니다.
- 상단 탐색 표시줄에서 "Status" 메뉴를 클릭한 다음 "Targets"를 선택합니다.

이제 prometheus와 node_exporter 두 개의 타겟이 나열된 것을 볼 수 있어야 합니다. 둘 다 "UP" 상태여야 하며, 이는 Prometheus 가 자체 및 Node Exporter 모두에서 메트릭을 성공적으로 스크랩하고 있음을 나타냅니다.
UI 에서 node_cpu_seconds_total 메트릭 쿼리
마지막 단계는 쿼리를 실행하여 Prometheus 가 Node Exporter 로부터 메트릭을 성공적으로 수집하고 있는지 확인하는 것입니다.
탐색 표시줄에서 "Graph" 링크를 클릭하여 Prometheus UI 의 메인 "Graph" 페이지로 돌아갑니다. "Expression" 입력 필드에 다음 메트릭 이름을 입력합니다.
node_cpu_seconds_total
이 메트릭은 CPU 가 다양한 모드 (예: 유휴, 사용자, 시스템) 에서 보낸 총 시간 (초) 을 나타냅니다.

"Execute" 버튼을 클릭합니다. 연결이 성공하면 그래프 아래에 결과 테이블이 표시됩니다. 각 결과는 다른 CPU 코어 및 모드에 해당합니다. 이러한 결과를 보는 것은 Node Exporter 의 데이터 수집부터 Prometheus 의 수집 및 저장까지 전체 모니터링 파이프라인이 올바르게 작동하고 있음을 확인시켜 줍니다.
데이터를 시각화하기 위해 "Table"과 "Graph" 보기 간에 전환할 수 있습니다.
요약
축하합니다! 외부 서비스를 추가하여 모니터링 설정을 성공적으로 확장했습니다. 이 실습에서는 공식 Prometheus Node Exporter 를 Docker 컨테이너에서 실행하는 방법, 이 새 타겟에서 메트릭을 스크랩하도록 Prometheus 인스턴스를 구성하는 방법, 호스트 수준 메트릭을 쿼리하여 데이터 수집을 확인하는 방법을 배웠습니다. 이는 포괄적인 관찰 가능성 스택 (observability stack) 을 구축하는 데 필수적인 기술이며, 시스템의 성능 및 상태에 대한 깊은 통찰력을 얻을 수 있게 해줍니다.



