From 629dfd4c559d8cde7243bd2c8629463843257c9e Mon Sep 17 00:00:00 2001 From: hyomee2 Date: Fri, 20 Mar 2026 01:21:12 +0900 Subject: [PATCH 1/4] =?UTF-8?q?[Feat]=20#195=20=EB=AA=A8=EB=8B=88=ED=84=B0?= =?UTF-8?q?=EB=A7=81=20=EA=B4=80=EB=A0=A8=20=EC=84=A4=EC=A0=95=20(Promethe?= =?UTF-8?q?us,=20Grafana,=20Loki)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 5 ++ deployment/docker-compose-monitoring.yml | 54 +++++++++++++++++++ deployment/loki/config.yml | 20 +++++++ deployment/prometheus/prometheus.yml | 10 ++++ .../config/security/SecurityConfig.java | 1 + src/main/resources/application.yml | 11 ++++ 6 files changed, 101 insertions(+) create mode 100644 deployment/docker-compose-monitoring.yml create mode 100644 deployment/loki/config.yml create mode 100644 deployment/prometheus/prometheus.yml diff --git a/build.gradle b/build.gradle index a8395e8..debdb21 100644 --- a/build.gradle +++ b/build.gradle @@ -86,6 +86,11 @@ dependencies { annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" + // OCR + implementation 'net.sourceforge.tess4j:tess4j:5.13.0' + + // Prometheus + implementation 'io.micrometer:micrometer-registry-prometheus' } // Q클래스 생성 경로 설정 diff --git a/deployment/docker-compose-monitoring.yml b/deployment/docker-compose-monitoring.yml new file mode 100644 index 0000000..df40c9d --- /dev/null +++ b/deployment/docker-compose-monitoring.yml @@ -0,0 +1,54 @@ +version: "3.8" + +networks: + monitoring: + driver: bridge + +services: + prometheus: + image: prom/prometheus:latest + container_name: prometheus + networks: + - monitoring + ports: + - "9090:9090" + volumes: + - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml + - prometheus_data:/prometheus # 디스크에 데이터 저장 + command: + - "--config.file=/etc/prometheus/prometheus.yml" + restart: unless-stopped + + grafana: + image: grafana/grafana:latest + container_name: grafana + networks: + - monitoring + ports: + - "3000:3000" + volumes: + - grafana_data:/var/lib/grafana + depends_on: + - prometheus + - loki + restart: unless-stopped + + loki: + image: grafana/loki:latest + container_name: loki + networks: + - monitoring + ports: + - "3100:3100" + command: "-config.file=/etc/loki/config.yml" + volumes: + # Loki 설정 파일 컨테이너에 삽입 (read-only) + - ./loki/config.yml:/etc/loki/config.yml:ro + # 로그 데이터 디스크에 남김 + - loki_data:/loki + restart: unless-stopped + +volumes: + prometheus_data: + grafana_data: + loki_data: diff --git a/deployment/loki/config.yml b/deployment/loki/config.yml new file mode 100644 index 0000000..2892206 --- /dev/null +++ b/deployment/loki/config.yml @@ -0,0 +1,20 @@ +auth_enabled: false # 인증 사용없이 Promtail이 바로 로그 보낼 수 있음 + +server: + http_listen_port: 3100 # Loki가 HTTP로 요청 받을 포트 (Promtail, Grafana에서 접근) + +storage_config: + boltdb: + directory: /loki/index # 인덱스 저장 위치. Preometheus-style 로그 검색을 위한 메타데이터 저장 + filesystem: + directory: /loki/chunks # 로그 청크 데이터 저장 위치. Loki는 로그를 청크 단위로 저장 + +schema_config: # Loki 내부 스키마 설정 + configs: + - from: 2026-03-20 + store: boltdb + object_store: filesystem + schema: v11 + index: + prefix: index_ + period: 24h # 하루 단위로 인덱스 파일 생성 \ No newline at end of file diff --git a/deployment/prometheus/prometheus.yml b/deployment/prometheus/prometheus.yml new file mode 100644 index 0000000..0981092 --- /dev/null +++ b/deployment/prometheus/prometheus.yml @@ -0,0 +1,10 @@ +global: + scrape_interval: 15s + evaluation_interval: 15s + +scrape_configs: + - job_name: 'kareer_server' + metrics_path: '/actuator/prometheus' + static_configs: + - targets: ['api.ka-reer.com:443'] # HTTPS를 통해 접근 + scheme: https \ No newline at end of file diff --git a/src/main/java/org/sopt/kareer/global/config/security/SecurityConfig.java b/src/main/java/org/sopt/kareer/global/config/security/SecurityConfig.java index 59f7561..bed78af 100644 --- a/src/main/java/org/sopt/kareer/global/config/security/SecurityConfig.java +++ b/src/main/java/org/sopt/kareer/global/config/security/SecurityConfig.java @@ -40,6 +40,7 @@ public class SecurityConfig { "/login/oauth2/**", "/api/v1/job-postings/crawl", "/api/v1/members/roadmap/test", + "/actuator/prometheus", }; private final CustomAuthenticationEntryPoint authenticationEntryPoint; diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 5236a73..e094aa9 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -96,6 +96,17 @@ auth: same-site: ${AUTH_REFRESH_TOKEN_COOKIE_SAMESITE} token-blacklist: redis-prefix: ${AUTH_TOKEN_BLACKLIST_REDIS_PREFIX} + +management: + endpoints: + web: + exposure: + include: health, info, prometheus + endpoint: + prometheus: + enabled: true + health: + show-details: always --- spring: config: From f3ca0001bf46790aa456e999cf2553850056cf57 Mon Sep 17 00:00:00 2001 From: hyomee2 Date: Sat, 21 Mar 2026 13:18:30 +0900 Subject: [PATCH 2/4] =?UTF-8?q?[Refactor]=20#195=20Loki3=EC=97=90=20?= =?UTF-8?q?=EB=A7=9E=EA=B2=8C=20config=20=ED=8C=8C=EC=9D=BC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EB=B2=84?= =?UTF-8?q?=EC=A0=84=20=EA=B3=A0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deployment/docker-compose-monitoring.yml | 6 +++--- deployment/loki/config.yml | 9 +++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/deployment/docker-compose-monitoring.yml b/deployment/docker-compose-monitoring.yml index df40c9d..105a6fd 100644 --- a/deployment/docker-compose-monitoring.yml +++ b/deployment/docker-compose-monitoring.yml @@ -6,7 +6,7 @@ networks: services: prometheus: - image: prom/prometheus:latest + image: prom/prometheus:3.5.1 container_name: prometheus networks: - monitoring @@ -20,7 +20,7 @@ services: restart: unless-stopped grafana: - image: grafana/grafana:latest + image: grafana/grafana:12.4.1 container_name: grafana networks: - monitoring @@ -34,7 +34,7 @@ services: restart: unless-stopped loki: - image: grafana/loki:latest + image: grafana/loki:3.5.12 container_name: loki networks: - monitoring diff --git a/deployment/loki/config.yml b/deployment/loki/config.yml index 2892206..6f57b40 100644 --- a/deployment/loki/config.yml +++ b/deployment/loki/config.yml @@ -4,17 +4,18 @@ server: http_listen_port: 3100 # Loki가 HTTP로 요청 받을 포트 (Promtail, Grafana에서 접근) storage_config: - boltdb: - directory: /loki/index # 인덱스 저장 위치. Preometheus-style 로그 검색을 위한 메타데이터 저장 + tsdb_shipper: + active_index_directory: /loki/tsdb-index + cache_location: /loki/tsdb-cache filesystem: directory: /loki/chunks # 로그 청크 데이터 저장 위치. Loki는 로그를 청크 단위로 저장 schema_config: # Loki 내부 스키마 설정 configs: - from: 2026-03-20 - store: boltdb + store: tsdb object_store: filesystem - schema: v11 + schema: v13 index: prefix: index_ period: 24h # 하루 단위로 인덱스 파일 생성 \ No newline at end of file From e9c345ca06222bb38dcf07854a6c37787b2faaf5 Mon Sep 17 00:00:00 2001 From: hyomee2 Date: Sat, 21 Mar 2026 13:34:18 +0900 Subject: [PATCH 3/4] =?UTF-8?q?[Chore]=20#195=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=20=EB=B2=84=EC=A0=84=20DockerHub=20=ED=83=9C=EA=B7=B8?= =?UTF-8?q?=EC=97=90=20=EB=A7=9E=EB=8A=94=20=ED=98=95=EC=8B=9D=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deployment/docker-compose-monitoring.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deployment/docker-compose-monitoring.yml b/deployment/docker-compose-monitoring.yml index 105a6fd..2cc8bf7 100644 --- a/deployment/docker-compose-monitoring.yml +++ b/deployment/docker-compose-monitoring.yml @@ -6,7 +6,7 @@ networks: services: prometheus: - image: prom/prometheus:3.5.1 + image: prom/prometheus:v3.5.1 container_name: prometheus networks: - monitoring @@ -20,7 +20,7 @@ services: restart: unless-stopped grafana: - image: grafana/grafana:12.4.1 + image: grafana/grafana:12.4 container_name: grafana networks: - monitoring From 9423dfe4df09ac1eb177a4d78b90f3c4cb344ffc Mon Sep 17 00:00:00 2001 From: hyomee2 Date: Sat, 21 Mar 2026 16:01:09 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[Chore]=20#195=20Tesseract=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=84=A4=EC=A0=95=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 3 --- 1 file changed, 3 deletions(-) diff --git a/build.gradle b/build.gradle index debdb21..7517d6d 100644 --- a/build.gradle +++ b/build.gradle @@ -86,9 +86,6 @@ dependencies { annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" - // OCR - implementation 'net.sourceforge.tess4j:tess4j:5.13.0' - // Prometheus implementation 'io.micrometer:micrometer-registry-prometheus' }