Theme:

서버의 CPU, 메모리, 디스크 사용량을 시계열로 수집하고 쿼리하려면, 메트릭 수집 서버가 필요합니다. Prometheus가 그 역할을 합니다.

Prometheus 는 Go로 작성된 오픈소스 시계열 데이터베이스이자 모니터링 시스템입니다. Pull 방식으로 대상 서버의 /metrics 엔드포인트를 주기적으로 스크랩하여 메트릭을 수집합니다.

왜 바이너리 설치인가

Prometheus는 Go로 작성된 단일 바이너리입니다. Docker 이미지(prom/prometheus)나 패키지 매니저를 통해서도 설치할 수 있지만, 바이너리 설치를 선택하는 이유가 있습니다.

설치 방식장점단점
바이너리버전 관리가 명확, 경로 통제 가능업데이트를 수동으로 해야 함
Docker격리된 환경, 롤백 쉬움볼륨 마운트 없으면 데이터 유실
** 패키지 매니저**의존성 자동 관리공식 저장소가 없는 배포판 있음

온프레미스 환경이나 Docker 없이 직접 관리하는 서버에서는 바이너리 설치가 가장 직관적입니다.


바이너리 다운로드 및 디렉토리 구성

Prometheus 공식 GitHub 릴리즈 페이지에서 바이너리를 다운로드합니다.

SHELL
wget https://github.com/prometheus/prometheus/releases/download/v2.47.1/prometheus-2.47.1.linux-amd64.tar.gz
tar xvfz prometheus-2.47.1.linux-amd64.tar.gz
sudo mv prometheus-2.47.1.linux-amd64 /opt/prometheus

(참고) 최신 버전은 Prometheus 다운로드 페이지에서 확인할 수 있습니다. 버전을 고정하고 싶다면 URL의 태그를 명시적으로 지정하는 것이 좋습니다.

설치 후 /opt/prometheus 디렉토리의 주요 파일 구성은 다음과 같습니다.

파일/디렉토리역할
prometheusPrometheus 서버 실행 바이너리
promtool설정 파일 검증, 메트릭 쿼리 등 CLI 유틸리티
prometheus.yml기본 설정 파일 (스크랩 대상, 규칙 등)
consoles/, console_libraries/콘솔 템플릿 (내장 UI용)

TSDB(시계열 데이터베이스) 데이터가 저장될 디렉토리도 미리 만들어둡니다.

SHELL
sudo mkdir -p /opt/prometheus/data

전용 사용자 생성

Prometheus를 root가 아닌 전용 사용자로 실행하면, 보안 사고 발생 시 영향 범위를 제한할 수 있습니다.

SHELL
sudo useradd -rs /bin/false prometheus
sudo chown -R prometheus:prometheus /opt/prometheus

-rs /bin/false는 로그인이 불가능한 시스템 계정을 만드는 옵션입니다. 서비스 실행 전용 계정에는 이 설정을 적용하는 것이 일반적입니다.


systemd 서비스 등록

Prometheus를 systemd 서비스로 등록하면 서버 재부팅 시 자동 기동, 비정상 종료 시 재시작 등을 OS 레벨에서 관리할 수 있습니다.

/etc/systemd/system/prometheus.service 파일을 생성합니다.

INI
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/opt/prometheus/prometheus \
  --config.file=/opt/prometheus/prometheus.yml \
  --storage.tsdb.path=/opt/prometheus/data
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
설정의미
After=network-online.target네트워크가 올라온 뒤 시작 (스크랩 대상에 접근해야 하므로)
ExecReloadSIGHUP 시그널로 설정 파일을 무중단 리로드
Restart=on-failure비정상 종료 시 자동 재시작
--storage.tsdb.pathTSDB 데이터 저장 경로를 명시적으로 지정

(참고) ExecReload를 설정해두면 prometheus.yml을 수정한 뒤 systemctl reload prometheus로 서비스 재시작 없이 설정을 반영할 수 있습니다. 스크랩 대상을 추가/변경할 때 유용합니다.


서비스 시작 및 확인

SHELL
sudo systemctl daemon-reload              # 새 유닛 파일 인식
sudo systemctl enable prometheus           # 부팅 시 자동 시작
sudo systemctl start prometheus            # 즉시 시작

정상 기동 여부를 확인합니다.

SHELL
sudo systemctl status prometheus

Prometheus HTTP 서버는 기본적으로 ** 포트 9090**에서 대기합니다.


웹 UI 접속 및 동작 확인

브라우저에서 http://<서버IP>:9090으로 접속하면 Prometheus 웹 UI가 나타납니다.

확인할 항목:

  • Status > Targets: 스크랩 대상의 연결 상태 (UP/DOWN)
  • Graph: PromQL 쿼리 실행 및 시각화
  • Status > Configuration: 현재 적용 중인 설정 파일 내용

접속이 안 되는 경우

서비스 로그 확인

SHELL
sudo journalctl -u prometheus --no-pager -n 50

설정 파일 문법 오류가 의심되면 promtool로 미리 검증할 수 있습니다.

SHELL
/opt/prometheus/promtool check config /opt/prometheus/prometheus.yml

방화벽에서 TCP 9090 차단

SHELL
sudo firewall-cmd --permanent --add-port=9090/tcp
sudo firewall-cmd --reload

다음 단계

Prometheus 자체는 메트릭 ** 수집 서버 **입니다. 실제로 모니터링하려면 메트릭을 제공하는 Exporter 를 각 대상에 설치하고, prometheus.ymlscrape_configs에 타깃을 추가해야 합니다.

Exporter대상기본 포트
Node Exporter서버 하드웨어/OS 메트릭9100
RabbitMQ ExporterRabbitMQ 큐/연결 메트릭15692
SNMP Exporter네트워크 장비 (스위치 등)9116

수집된 메트릭을 시각화하려면 Grafana 를 연동합니다.


주의할 점

data 디렉토리 권한

Prometheus를 전용 사용자(prometheus)로 실행하면서 data 디렉토리의 소유자를 변경하지 않으면, TSDB에 쓰기 권한이 없어 서비스가 시작 직후 종료됩니다. chown -R prometheus:prometheus /opt/prometheus를 반드시 실행합니다.

설정 파일 문법 오류 시 무한 재시작

prometheus.yml에 문법 오류가 있으면 Prometheus가 시작에 실패하고, Restart=on-failure 설정 때문에 무한 재시작을 반복합니다. 설정 변경 후에는 반드시 promtool check config로 문법을 검증한 뒤 서비스를 시작합니다.


정리

단계명령 / 설정
바이너리 다운로드wgettar/opt/prometheus
전용 사용자 생성useradd -rs /bin/false prometheus
권한 설정chown -R prometheus:prometheus /opt/prometheus
systemd 등록/etc/systemd/system/prometheus.service
서비스 시작systemctl enable --now prometheus
접속http://<IP>:9090
설정 검증promtool check config prometheus.yml
무중단 리로드systemctl reload prometheus
댓글 로딩 중...