Prometheus 설치
서버의 CPU, 메모리, 디스크 사용량을 시계열로 수집하고 쿼리하려면, 메트릭 수집 서버가 필요합니다. Prometheus가 그 역할을 합니다.
Prometheus 는 Go로 작성된 오픈소스 시계열 데이터베이스이자 모니터링 시스템입니다. Pull 방식으로 대상 서버의 /metrics 엔드포인트를 주기적으로 스크랩하여 메트릭을 수집합니다.
왜 바이너리 설치인가
Prometheus는 Go로 작성된 단일 바이너리입니다. Docker 이미지(prom/prometheus)나 패키지 매니저를 통해서도 설치할 수 있지만, 바이너리 설치를 선택하는 이유가 있습니다.
| 설치 방식 | 장점 | 단점 |
|---|---|---|
| 바이너리 | 버전 관리가 명확, 경로 통제 가능 | 업데이트를 수동으로 해야 함 |
| Docker | 격리된 환경, 롤백 쉬움 | 볼륨 마운트 없으면 데이터 유실 |
| ** 패키지 매니저** | 의존성 자동 관리 | 공식 저장소가 없는 배포판 있음 |
온프레미스 환경이나 Docker 없이 직접 관리하는 서버에서는 바이너리 설치가 가장 직관적입니다.
바이너리 다운로드 및 디렉토리 구성
Prometheus 공식 GitHub 릴리즈 페이지에서 바이너리를 다운로드합니다.
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 디렉토리의 주요 파일 구성은 다음과 같습니다.
| 파일/디렉토리 | 역할 |
|---|---|
prometheus | Prometheus 서버 실행 바이너리 |
promtool | 설정 파일 검증, 메트릭 쿼리 등 CLI 유틸리티 |
prometheus.yml | 기본 설정 파일 (스크랩 대상, 규칙 등) |
consoles/, console_libraries/ | 콘솔 템플릿 (내장 UI용) |
TSDB(시계열 데이터베이스) 데이터가 저장될 디렉토리도 미리 만들어둡니다.
sudo mkdir -p /opt/prometheus/data
전용 사용자 생성
Prometheus를 root가 아닌 전용 사용자로 실행하면, 보안 사고 발생 시 영향 범위를 제한할 수 있습니다.
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 파일을 생성합니다.
[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 | 네트워크가 올라온 뒤 시작 (스크랩 대상에 접근해야 하므로) |
ExecReload | SIGHUP 시그널로 설정 파일을 무중단 리로드 |
Restart=on-failure | 비정상 종료 시 자동 재시작 |
--storage.tsdb.path | TSDB 데이터 저장 경로를 명시적으로 지정 |
(참고)
ExecReload를 설정해두면prometheus.yml을 수정한 뒤systemctl reload prometheus로 서비스 재시작 없이 설정을 반영할 수 있습니다. 스크랩 대상을 추가/변경할 때 유용합니다.
서비스 시작 및 확인
sudo systemctl daemon-reload # 새 유닛 파일 인식
sudo systemctl enable prometheus # 부팅 시 자동 시작
sudo systemctl start prometheus # 즉시 시작
정상 기동 여부를 확인합니다.
sudo systemctl status prometheus
Prometheus HTTP 서버는 기본적으로 ** 포트 9090**에서 대기합니다.
웹 UI 접속 및 동작 확인
브라우저에서 http://<서버IP>:9090으로 접속하면 Prometheus 웹 UI가 나타납니다.
확인할 항목:
- Status > Targets: 스크랩 대상의 연결 상태 (UP/DOWN)
- Graph: PromQL 쿼리 실행 및 시각화
- Status > Configuration: 현재 적용 중인 설정 파일 내용
접속이 안 되는 경우
서비스 로그 확인
sudo journalctl -u prometheus --no-pager -n 50
설정 파일 문법 오류가 의심되면 promtool로 미리 검증할 수 있습니다.
/opt/prometheus/promtool check config /opt/prometheus/prometheus.yml
방화벽에서 TCP 9090 차단
sudo firewall-cmd --permanent --add-port=9090/tcp
sudo firewall-cmd --reload
다음 단계
Prometheus 자체는 메트릭 ** 수집 서버 **입니다. 실제로 모니터링하려면 메트릭을 제공하는 Exporter 를 각 대상에 설치하고, prometheus.yml의 scrape_configs에 타깃을 추가해야 합니다.
| Exporter | 대상 | 기본 포트 |
|---|---|---|
| Node Exporter | 서버 하드웨어/OS 메트릭 | 9100 |
| RabbitMQ Exporter | RabbitMQ 큐/연결 메트릭 | 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로 문법을 검증한 뒤 서비스를 시작합니다.
정리
| 단계 | 명령 / 설정 |
|---|---|
| 바이너리 다운로드 | wget → tar → /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 |