From d8148a88b3327d133f7ee4b7ec864e0685374ed3 Mon Sep 17 00:00:00 2001 From: HyeonBin2379 Date: Thu, 14 May 2026 12:17:05 +0900 Subject: [PATCH 1/7] =?UTF-8?q?fix=20:=20=EA=B2=8C=EC=9D=B4=ED=8A=B8?= =?UTF-8?q?=EC=9B=A8=EC=9D=B4=20=ED=99=94=EC=9D=B4=ED=8A=B8=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 모니터링 관련 api를 게이트웨이 화이트리스트에 추가 --- .../java/org/pgsg/gateway/filter/JwtGatewayFilter.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/pgsg/gateway/filter/JwtGatewayFilter.java b/src/main/java/org/pgsg/gateway/filter/JwtGatewayFilter.java index b01b641..4956058 100644 --- a/src/main/java/org/pgsg/gateway/filter/JwtGatewayFilter.java +++ b/src/main/java/org/pgsg/gateway/filter/JwtGatewayFilter.java @@ -44,7 +44,12 @@ public class JwtGatewayFilter extends OncePerRequestFilter { "/api/v1/auth/reissue", "/actuator/health", "/actuator/health/**", - "/actuator/info" + "/actuator/info", + "/actuator/prometheus", + "/actuator/prometheus/**", + "/actuator/metrics", + "/actuator/metrics/**", + "/actuator/refresh" ); private final Tracer tracer; From 351be868376d4a725fdb39b72b1512698288bc1f Mon Sep 17 00:00:00 2001 From: HyeonBin2379 Date: Thu, 14 May 2026 12:50:56 +0900 Subject: [PATCH 2/7] =?UTF-8?q?chore=20:=20=EA=B2=8C=EC=9D=B4=ED=8A=B8?= =?UTF-8?q?=EC=9B=A8=EC=9D=B4=20=EA=B3=B5=ED=86=B5=EB=AA=A8=EB=93=88=20?= =?UTF-8?q?=EB=B2=84=EC=A0=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - build.gradle의 공통모듈 버전을 0.3.2-SNAPSHOT으로 업그레이드 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index dff3a95..32b1bba 100644 --- a/build.gradle +++ b/build.gradle @@ -30,7 +30,7 @@ ext { dependencies { - implementation('org.pgsg:common:0.2.5-SNAPSHOT') { + implementation('org.pgsg:common:0.3.2-SNAPSHOT') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-data-jpa' exclude group: 'com.querydsl', module: 'querydsl-jpa' } From 8dca0ff0e535a45ca8e48a95bb795b836252f763 Mon Sep 17 00:00:00 2001 From: HyeonBin2379 Date: Thu, 14 May 2026 16:49:08 +0900 Subject: [PATCH 3/7] =?UTF-8?q?chore=20:=20=EB=B6=84=EC=82=B0=20=EC=B6=94?= =?UTF-8?q?=EC=A0=81=20&=20=EB=A1=9C=EA=B7=B8=20=EC=88=98=EC=A7=91=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EC=84=A4=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - zipkin, loki 연동 관련 환경변수 추가 - application.yaml 파일에 zipkin 관련 설정 추가 - deploy/docker-compose.prod.yaml 파일 내 promtail 관련 설정 추가 - deploy/promtail-config.yml 파일 추가 - deploy/promtail-config.yml 파일이 원격 서버에 배포되도록 배포 워크플로우 수정 --- .env.example | 3 ++- .github/actions/deploy-vm/action.yaml | 11 +++++++++-- deploy/.env.template | 5 ++++- deploy/docker-compose.prod.yaml | 19 ++++++++++++++++++- deploy/promtail-config.yml | 14 ++++++++++++++ src/main/resources/application.yaml | 10 +++++++++- 6 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 deploy/promtail-config.yml diff --git a/.env.example b/.env.example index 120c9de..70971de 100644 --- a/.env.example +++ b/.env.example @@ -12,4 +12,5 @@ HOSTNAME=localhost GPR_USER=GitHub_ID GPR_TOKEN=GitHub_Personal_Access_Token(PAT) -EUREKA_SERVER_URL=http://localhost:8761/eureka/ \ No newline at end of file +EUREKA_SERVER_URL=http://localhost:8761/eureka/ +ZIPKIN_ENDPOINT=http://localhost:9411/api/v2/spans \ No newline at end of file diff --git a/.github/actions/deploy-vm/action.yaml b/.github/actions/deploy-vm/action.yaml index a51a749..d7c0037 100644 --- a/.github/actions/deploy-vm/action.yaml +++ b/.github/actions/deploy-vm/action.yaml @@ -75,6 +75,12 @@ runs: --zone="${{ inputs.zone }}" \ --project="${{ inputs.gcp_project }}" \ --tunnel-through-iap + + gcloud compute scp deploy/promtail-config.yml \ + ${{ inputs.vm }}:/tmp/promtail-config.yml \ + --zone="${{ inputs.zone }}" \ + --project="${{ inputs.gcp_project }}" \ + --tunnel-through-iap - name: Deploy and verify id: deploy_run @@ -94,6 +100,7 @@ runs: sudo mkdir -p ${{ inputs.work_dir }} sudo mv /tmp/docker-compose.prod.yaml ${{ inputs.work_dir }}/docker-compose.prod.yaml + sudo mv /tmp/promtail-config.yml ${{ inputs.work_dir }}/promtail-config.yml cd ${{ inputs.work_dir }} sudo env IMAGE_TAG=\"${{ inputs.image_tag }}\" AR_IMAGE_PATH=\"${{ inputs.ar_image_path }}\" \ @@ -144,12 +151,12 @@ runs: sudo env IMAGE_TAG=\"${{ steps.rollback.outputs.tag }}\" AR_IMAGE_PATH=\"${{ inputs.ar_image_path }}\" \ docker compose -f docker-compose.prod.yaml up -d - for i in \$(seq 1 18); do + for i in \$(seq 1 ${{ inputs.health_retries }}); do if curl -sf http://localhost:8090/actuator/health | grep -q '\"status\":\"UP\"'; then echo \"Rollback container UP (attempt \$i)\" exit 0 fi - sleep 10 + sleep ${{ inputs.health_interval }} done echo 'Rollback container did not become healthy.' diff --git a/deploy/.env.template b/deploy/.env.template index def43c2..54e2f43 100644 --- a/deploy/.env.template +++ b/deploy/.env.template @@ -9,4 +9,7 @@ JWT_REFRESH_EXPIRATION= HOSTNAME= # Eureka 서버 주소 -EUREKA_CLIENT_SERVICEURL_DEFAULTZONE= \ No newline at end of file +EUREKA_SERVER_URL= + +LOKI_URL= +ZIPKIN_ENDPOINT= \ No newline at end of file diff --git a/deploy/docker-compose.prod.yaml b/deploy/docker-compose.prod.yaml index cb2f765..92c7642 100644 --- a/deploy/docker-compose.prod.yaml +++ b/deploy/docker-compose.prod.yaml @@ -6,4 +6,21 @@ services: ports: - "8090:8090" env_file: - - .env \ No newline at end of file + - .env + networks: + - pgsg-network + + promtail: + image: grafana/promtail:2.9.1 + container_name: gateway-server-promtail + restart: always + volumes: + - /opt/gateway/promtail-config.yml:/etc/promtail/config.yml + - /opt/gateway/logs:/logs + command: -config.file=/etc/promtail/config.yml + networks: + - pgsg-network + +networks: + pgsg-network: + external: true \ No newline at end of file diff --git a/deploy/promtail-config.yml b/deploy/promtail-config.yml new file mode 100644 index 0000000..05284bc --- /dev/null +++ b/deploy/promtail-config.yml @@ -0,0 +1,14 @@ +server: + http_listen_port: 9080 + +clients: + - url: ${LOKI_URL:-http://loki:3100/loki/api/v1/push} + +scrape_configs: + - job_name: gateway-server + static_configs: + - targets: + - localhost + labels: + job: gateway-server + __path__: /logs/*.log \ No newline at end of file diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 70d5cc6..ec75bb3 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -27,4 +27,12 @@ eureka: defaultZone: ${EUREKA_SERVER_URL:http://localhost:8761/eureka/} server: - port: 8090 \ No newline at end of file + port: 8090 + +management: + tracing: + sampling: + probability: 0.1 + zipkin: + tracing: + endpoint: ${ZIPKIN_ENDPOINT:http://localhost:9411/api/v2/spans} From 63e1c3e27b58a1b81781bc8625dad390bd9ca3a3 Mon Sep 17 00:00:00 2001 From: HyeonBin2379 Date: Thu, 14 May 2026 17:04:56 +0900 Subject: [PATCH 4/7] =?UTF-8?q?chore=20:=20=EB=B0=B0=ED=8F=AC=20=EC=A4=91?= =?UTF-8?q?=20=EB=B0=9C=EC=83=9D=ED=95=9C=20=EB=8F=84=EC=BB=A4=20=EB=84=A4?= =?UTF-8?q?=ED=8A=B8=EC=9B=8C=ED=81=AC=20=EA=B4=80=EB=A0=A8=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 도커 이미지 기반으로 docker compose 명령어 실행 직전 도커 네트워크부터 먼저 탐색하도록 수정 --- .github/actions/deploy-vm/action.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/actions/deploy-vm/action.yaml b/.github/actions/deploy-vm/action.yaml index d7c0037..a4ce2f3 100644 --- a/.github/actions/deploy-vm/action.yaml +++ b/.github/actions/deploy-vm/action.yaml @@ -102,6 +102,11 @@ runs: sudo mv /tmp/docker-compose.prod.yaml ${{ inputs.work_dir }}/docker-compose.prod.yaml sudo mv /tmp/promtail-config.yml ${{ inputs.work_dir }}/promtail-config.yml cd ${{ inputs.work_dir }} + + if ! sudo docker network inspect pgsg-network > /dev/null 2>&1; then + echo 'pgsg-network not found. Creating...' + sudo docker network create pgsg-network + fi sudo env IMAGE_TAG=\"${{ inputs.image_tag }}\" AR_IMAGE_PATH=\"${{ inputs.ar_image_path }}\" \ docker compose -f docker-compose.prod.yaml pull From f34a2fdebe8461a03f2dc512ddce2a5b9367881b Mon Sep 17 00:00:00 2001 From: HyeonBin2379 Date: Thu, 14 May 2026 17:28:27 +0900 Subject: [PATCH 5/7] =?UTF-8?q?chore=20:=20docker-compose.prod.yaml=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - promtail 컨테이너명 수정 --- deploy/docker-compose.prod.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/docker-compose.prod.yaml b/deploy/docker-compose.prod.yaml index 92c7642..4e7d6ba 100644 --- a/deploy/docker-compose.prod.yaml +++ b/deploy/docker-compose.prod.yaml @@ -12,7 +12,7 @@ services: promtail: image: grafana/promtail:2.9.1 - container_name: gateway-server-promtail + container_name: promtail restart: always volumes: - /opt/gateway/promtail-config.yml:/etc/promtail/config.yml From 1435319b83145cd5cdaeda2e9a5335e37381844b Mon Sep 17 00:00:00 2001 From: HyeonBin2379 Date: Thu, 14 May 2026 19:19:50 +0900 Subject: [PATCH 6/7] =?UTF-8?q?chore=20:=20=EC=BD=94=EB=93=9C=EB=9E=98?= =?UTF-8?q?=EB=B9=97=20=ED=94=BC=EB=93=9C=EB=B0=B1=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 게이트웨이 내부 로그파일 생성 및 저장 경로 지정 - 게이트웨이 로그파일 생성 및 관리 관련 설정은 configs의 gateway-server/application.yml에 반영 --- deploy/docker-compose.prod.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/deploy/docker-compose.prod.yaml b/deploy/docker-compose.prod.yaml index 4e7d6ba..7921545 100644 --- a/deploy/docker-compose.prod.yaml +++ b/deploy/docker-compose.prod.yaml @@ -7,6 +7,8 @@ services: - "8090:8090" env_file: - .env + volumes: + - /opt/gateway/logs:/logs # 게이트웨이에서 생성한 로그 파일을 저장할 경로 networks: - pgsg-network @@ -16,7 +18,7 @@ services: restart: always volumes: - /opt/gateway/promtail-config.yml:/etc/promtail/config.yml - - /opt/gateway/logs:/logs + - /opt/gateway/logs:/logs # 로그 파일을 저장한 경로와 동일하게 지정 command: -config.file=/etc/promtail/config.yml networks: - pgsg-network From 6e0efe49708267ed89653b313f558cd0140fbbea Mon Sep 17 00:00:00 2001 From: HyeonBin2379 Date: Thu, 14 May 2026 19:32:11 +0900 Subject: [PATCH 7/7] =?UTF-8?q?chore=20:=20=EC=BD=94=EB=93=9C=EB=9E=98?= =?UTF-8?q?=EB=B9=97=20=ED=94=BC=EB=93=9C=EB=B0=B1=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - promtail-config.yml에 환경변수 값을 적용하기 위한 설정 추가 - 게이트웨이 화이트리스트에서 /actuator/refresh 삭제 --- deploy/docker-compose.prod.yaml | 5 ++++- src/main/java/org/pgsg/gateway/filter/JwtGatewayFilter.java | 3 +-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/deploy/docker-compose.prod.yaml b/deploy/docker-compose.prod.yaml index 7921545..1b7ba93 100644 --- a/deploy/docker-compose.prod.yaml +++ b/deploy/docker-compose.prod.yaml @@ -19,7 +19,10 @@ services: volumes: - /opt/gateway/promtail-config.yml:/etc/promtail/config.yml - /opt/gateway/logs:/logs # 로그 파일을 저장한 경로와 동일하게 지정 - command: -config.file=/etc/promtail/config.yml + # promtail 2.9.1 버전은 명시적으로 환경변수 플래그를 지정해야 promtail-config.yml에 설정한 환경변수값 적용 가능 + command: -config.file=/etc/promtail/config.yml -config.expand-env=true + env_file: + - .env networks: - pgsg-network diff --git a/src/main/java/org/pgsg/gateway/filter/JwtGatewayFilter.java b/src/main/java/org/pgsg/gateway/filter/JwtGatewayFilter.java index 4956058..ab8fc30 100644 --- a/src/main/java/org/pgsg/gateway/filter/JwtGatewayFilter.java +++ b/src/main/java/org/pgsg/gateway/filter/JwtGatewayFilter.java @@ -48,8 +48,7 @@ public class JwtGatewayFilter extends OncePerRequestFilter { "/actuator/prometheus", "/actuator/prometheus/**", "/actuator/metrics", - "/actuator/metrics/**", - "/actuator/refresh" + "/actuator/metrics/**" ); private final Tracer tracer;