Back-End/work

HTTPS 적용 후 grafana & Prometheus No-data

Meluu_ 2025. 11. 10. 18:26

cloudflare로 HTTPS를 적용하고, spring security에서 https 사용을 강제하였더니

prometheus가 spring metrics를 가져오지 못하는 상황이 발생하였다.

 

spring의 https 사용 강제를 해제하면 간단하게 해결되지만

웬만하면 https 요청만 받아 안전성을 유지하고 싶었다.

 

또한 grafana도 https로 접근하고 싶다. 

 

따라서 번거롭지만 문제를 찾아서 세팅해보자.

 

grafana

grafana의 https 적용은 간단했다.

nginx를 사용하므로  스프링과 같은 도메인 하위 경로로 접근 가능하게 한다.

docker로 nginx와 grafana, prometheus를 설치했으므로 

아래와 같이 세팅한다. 

 

nginx.conf

    location /grafana/ {
        proxy_pass http://grafana:3000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

 

핵심은 환경변수다. 해당 설정이 있어야 HTTPS 정상 접근이 가능하다.

  grafana:
    image: grafana/grafana
    container_name: grafana
    environment:
      - GF_SERVER_ROOT_URL=https://[내 도메인]/grafana/
      - GF_SERVER_SERVE_FROM_SUB_PATH=true

 

 

Prometheus

기존 prometheus는 스프링의 /actuator/prometheus로 http 요청을 보낸다.

하지만 스프링은 현재 HTTP가 막혀있으므로 도커 컨테이너 내부 요청은 무시된다.

따라서 Prometheus의 요청을 HTTPS로 바꿀 필요가 있다. 

 

prometheus.yml

scrape_configs:
  - job_name: 'spring'
    metrics_path: '/actuator/prometheus'
    scheme: https                # HTTPS를 사용하므로 추가하기
    static_configs:
      - targets: ['mydomain.com'] # 443 기본이므로 생략
    tls_config:
      insecure_skip_verify: true

 

insecure_skip_verify: true  해당 설정을 한 이유는

CloudFlare가 리버스 프록시를 이용했기에 

CloudFlare <=> server 간의 인증서는 Cloudflare 전용 인증서이기에 

공식 CA가 아니다. 그래서 신뢰되지 않은 인증서요도 무시하고 접근 가능하게 설정한다.

 

 

 

 

'Back-End > work' 카테고리의 다른 글

nginx 프록시 설정값  (0) 2025.11.10
geojson을 스프링을 통해서 MySQL에 넣어보자  (0) 2025.10.01