Prometheus와 Spring Actuator 엔드포인트 문제 해결

coldrice99·2025년 6월 4일
0

아침에 EC2에 Prometheus랑 Spring Actuator를 연결해보려고 했더니, Actuator Prometheus 엔드포인트가 잡히지 않는 문제를 겪었다. 어떻게 해결했는지 내 TIL을 정리해본다.


문제 상황

  • 로컬에서는 Prometheus가 localhost:8080/actuator/prometheuslocalhost:9090/metrics 엔드포인트 둘 다 스크랩 잘됨.
  • 그런데 EC2에 올리자 Prometheus UI에서는 localhost:9090/metrics만 보이고, localhost:8080/actuator/prometheus가 잡히지 않음.
  • EC2 내부에서 curl http://127.0.0.1:8080/actuator/prometheus는 잘 열림. 문제는 Prometheus가 제대로 스크랩하지 못하는 것.

0. 전체 목표

  • EC2에 Prometheus 설치
  • Spring Boot(8080) Actuator Prometheus 엔드포인트(/actuator/prometheus)를 스크랩해서 모니터링
  • 최종적으로 Grafana 대시보드에 시각화

1. Prometheus 설치 및 기본 설정

  1. 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
  2. 바이너리(prometheus, promtool)를 시스템 경로로 복사

    sudo cp prometheus /usr/local/bin/
    sudo cp promtool /usr/local/bin/
  3. 콘솔 템플릿, 라이브러리, 설정 파일을 /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/
  4. /etc/prometheus/prometheus.yml 열어보면 기본값으로 localhost:9090/metrics만 스크랩하도록 설정돼 있음.

    global:
      scrape_interval: 15s
    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
          - targets: ['localhost:9090']

    → 아직 Spring 애플리케이션 스크랩 설정 없음.


2. Spring Boot Actuator 설정 확인

로컬 개발 환경에서 이미 다음 작업을 해뒀다.

  • 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에 잡힘.


3. Prometheus에 Spring Actuator 잡아주기

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만 보였다.
즉, 설정이 반영되지 않는 듯한 증상.


4. /etc/prometheus/prometheus.yml에 수정이 안 된 문제

  • EC2 터미널에서 nano /etc/prometheus/prometheus.yml 열어보니, 내가 수정한 내용이 반영되어 있지 않았다.
  • 그냥 ~/prometheus-2.47.0.linux-amd64/prometheus.yml만 수정했고, 실제로 Prometheus가 읽는 /etc/prometheus/prometheus.yml은 그대로 기본값이었다.

확인:

cat /etc/prometheus/prometheus.yml
# ... 스크랩 설정이 기본상태로 남아 있었음

5. 홈 디렉터리 수정본을 실제 경로로 복사

결국 홈 디렉터리에서 수정한 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 상태로 떠 있었다.


6. Prometheus 서비스 등록(별도 사용자를 만들진 않고 바로 실행)

서비스 유닛 파일은 이렇게 만들었다.
(/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가 자동 시작되도록 설정 완료.


7. 최종 확인

  1. EC2 내부(SSH 터미널)에서:

    curl -v http://127.0.0.1:8080/actuator/prometheus

    → 200 OK, Micrometer 메트릭 JSON 출력됨.

  2. Prometheus UI (http\://EC2_PUBLIC_IP:9090) → Targets 탭 확인

    • prometheus → localhost:9090/metrics → UP
    • spring-actuator → localhost:8080/actuator/prometheus → UP
  3. Grafana 대시보드에서 Prometheus 데이터 소스로 http://EC2_PUBLIC_IP:9090 추가 후 시각화 가능해졌다.


TIL 포인트

  • Prometheus 설정 파일은 실제 서비스가 읽는 경로(/etc/prometheus/prometheus.yml)를 수정해야 한다.
  • Spring Boot Actuator 메트릭 스크랩은 절대 public IP:8080이 아니라 **localhost:8080**을 targets에 넣어야 EC2 내부에서 제대로 접근 가능하다.

이상으로 “EC2 Prometheus, Spring Actuator 엔드포인트가 잡히지 않을 때”에 대한 내 TIL 정리 끝.

profile
서두르지 않으나 쉬지 않고

0개의 댓글