아침에 EC2에 Prometheus랑 Spring Actuator를 연결해보려고 했더니, Actuator Prometheus 엔드포인트가 잡히지 않는 문제를 겪었다. 어떻게 해결했는지 내 TIL을 정리해본다.
localhost:8080/actuator/prometheus
와 localhost:9090/metrics
엔드포인트 둘 다 스크랩 잘됨.localhost:9090/metrics
만 보이고, localhost:8080/actuator/prometheus
가 잡히지 않음.curl http://127.0.0.1:8080/actuator/prometheus
는 잘 열림. 문제는 Prometheus가 제대로 스크랩하지 못하는 것./actuator/prometheus
)를 스크랩해서 모니터링EC2(Ubuntu) 터미널에서 Prometheus 바이너리 다운로드 & 압축 해제
wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz
tar xvfz prometheus-2.47.0.linux-amd64.tar.gz
cd prometheus-2.47.0.linux-amd64
바이너리(prometheus
, promtool
)를 시스템 경로로 복사
sudo cp prometheus /usr/local/bin/
sudo cp promtool /usr/local/bin/
콘솔 템플릿, 라이브러리, 설정 파일을 /etc/prometheus
로 복사
sudo mkdir -p /etc/prometheus
sudo cp -r consoles /etc/prometheus/
sudo cp -r console_libraries /etc/prometheus/
sudo cp prometheus.yml /etc/prometheus/
/etc/prometheus/prometheus.yml
열어보면 기본값으로 localhost:9090/metrics
만 스크랩하도록 설정돼 있음.
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
→ 아직 Spring 애플리케이션 스크랩 설정 없음.
로컬 개발 환경에서 이미 다음 작업을 해뒀다.
build.gradle
또는 pom.xml
에
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-prometheus'
application.yml
에
management:
endpoints:
web:
exposure:
include: "*"
이 상태에서 http://localhost:8080/actuator/prometheus
접속하면 Micrometer 메트릭이 JSON으로 잘 찍힘.
로컬에서는 /actuator/prometheus
와 /metrics
둘 다 Prometheus UI에 잡힘.
EC2에 올려놓은 prometheus.yml
을 수정해서 Actuator 스크랩 잡아주려고 했다.
global:
scrape_interval: 15s
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
# 추가
- job_name: "spring-actuator"
metrics_path: '/actuator/prometheus'
scrape_interval: 15s
static_configs:
- targets: ['localhost:8080']
수정 후 Prometheus 재시작:
sudo systemctl daemon-reload
sudo systemctl restart prometheus
근데 Prometheus 웹 UI → Targets 가서 봐도 여전히 "spring-actuator" job이 등록되지 않고 localhost:9090/metrics
만 보였다.
즉, 설정이 반영되지 않는 듯한 증상.
/etc/prometheus/prometheus.yml
에 수정이 안 된 문제nano /etc/prometheus/prometheus.yml
열어보니, 내가 수정한 내용이 반영되어 있지 않았다.~/prometheus-2.47.0.linux-amd64/prometheus.yml
만 수정했고, 실제로 Prometheus가 읽는 /etc/prometheus/prometheus.yml
은 그대로 기본값이었다.확인:
cat /etc/prometheus/prometheus.yml
# ... 스크랩 설정이 기본상태로 남아 있었음
결국 홈 디렉터리에서 수정한 prometheus.yml
을 /etc/prometheus/
로 복사한 뒤에야 설정이 먹혔다.
sudo cp ~/prometheus-2.47.0.linux-amd64/prometheus.yml /etc/prometheus/prometheus.yml
sudo systemctl daemon-reload
sudo systemctl restart prometheus
이제 Prometheus UI → Targets에서 “spring-actuator → localhost:8080/actuator/prometheus”가 UP 상태로 떠 있었다.
서비스 유닛 파일은 이렇게 만들었다.
(/etc/systemd/system/prometheus.service
)
[Unit]
Description=Prometheus Monitoring Service
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
그리고 실행:
sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus
sudo systemctl status prometheus # Active: active (running) 확인
—> 이로써 nohup prometheus
같은 백그라운드 실행 없이,
EC2가 재부팅돼도 Prometheus가 자동 시작되도록 설정 완료.
EC2 내부(SSH 터미널)에서:
curl -v http://127.0.0.1:8080/actuator/prometheus
→ 200 OK, Micrometer 메트릭 JSON 출력됨.
Prometheus UI (http\://EC2_PUBLIC_IP:9090) → Targets 탭 확인
prometheus → localhost:9090/metrics
→ UPspring-actuator → localhost:8080/actuator/prometheus
→ UPGrafana 대시보드에서 Prometheus 데이터 소스로 http://EC2_PUBLIC_IP:9090
추가 후 시각화 가능해졌다.
/etc/prometheus/prometheus.yml
)를 수정해야 한다.public IP:8080
이 아니라 **localhost:8080
**을 targets에 넣어야 EC2 내부에서 제대로 접근 가능하다.이상으로 “EC2 Prometheus, Spring Actuator 엔드포인트가 잡히지 않을 때”에 대한 내 TIL 정리 끝.