From a26b1e50f27fe32b2dad84fa956a2a5be9077563 Mon Sep 17 00:00:00 2001 From: can019 Date: Tue, 16 Sep 2025 21:27:26 +0900 Subject: [PATCH 1/8] =?UTF-8?q?chore:=20Loki=20Promtail=EC=9D=84=20?= =?UTF-8?q?=ED=86=B5=ED=95=B4=20file=20=EC=A0=84=EC=86=A1=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 --- .../src/main/resources/log4j2-develop.yml | 73 ++++++------------- docker/local/docker-compose.yml | 19 +++++ docker/local/promtail-config.yml | 47 ++++++++++++ 3 files changed, 89 insertions(+), 50 deletions(-) create mode 100644 docker/local/promtail-config.yml diff --git a/apps/user-service/src/main/resources/log4j2-develop.yml b/apps/user-service/src/main/resources/log4j2-develop.yml index 8e68569b..fd47edeb 100644 --- a/apps/user-service/src/main/resources/log4j2-develop.yml +++ b/apps/user-service/src/main/resources/log4j2-develop.yml @@ -13,10 +13,10 @@ Configuration: # DEBUG 환경용 콘솔 패턴 - 더 간단하고 가독성 좋게 - name: "console-layout-pattern" value: "%highlight{[%-5level]} [%X{traceId}] [%X{spanId}] %d{HH:mm:ss} [%t] %n %logger{20} - %msg%n%n " - # 파일용 패턴 + # 파일용 패턴 - Promtail이 파싱하기 쉽게 구조화 (UTC 시간 사용) - name: "file-layout-pattern" - value: "[%X{traceId}] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" - # 개발 환경용 로그 파일들 + value: "[%X{traceId}] %d{yyyy-MM-dd HH:mm:ss.SSS}{UTC} [%t] %-5level %logger{36} - %msg%n" + # 개발 환경용 로그 파일들 - 절대경로나 상대경로 설정 - name: "dev-log" value: ${log-path}/develop/app.log - name: "error-log" @@ -29,37 +29,8 @@ Configuration: target: SYSTEM_OUT PatternLayout: pattern: ${console-layout-pattern} -# disableAnsi: false - - # Loki Appender - 개발환경 모니터링용 - Loki: - name: loki-appender - host: localhost - port: 3100 - JsonLayout: - compact: true - eventEol: true - includeStacktrace: true - KeyValuePair: - - key: "app" - value: "${app-name}" - - key: "env" - value: "develop" - Label: - - name: "app" - value: "${app-name}" - - name: "env" - value: "develop" - - name: "traceId" - value: "${ctx:traceId}" - - name: "spanId" - value: "${ctx:spanId}" - - name: "executionType" - value: "${ctx:executionType:-application}" - - name: "sourceId" - value: "${ctx:sourceId}" - - name: "runId" - value: "${ctx:runId}" + + # JDBC Appender - 워크플로우 로그용 JDBC: name: workflow-appender tableName: "execution_log" @@ -80,20 +51,27 @@ Configuration: - name: "log_level" pattern: "%level" - name: "executed_at" - pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS}" # 패턴으로 시간 직접 지정 + pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS}" - name: "log_message" pattern: "%message" - name: "trace_id" pattern: "%X{traceId}" - name: "reserved1" pattern: "%X{spanId}" -# - name: "config_snapshot" -# pattern: "%X{configSnapshot}" + + # 파일 Appenders - Promtail이 이 파일들을 읽음 File: - name: file-dev-appender fileName: ${dev-log} PatternLayout: pattern: ${file-layout-pattern} + # 로그 로테이션 설정 (선택사항) + # Policies: + # SizeBasedTriggeringPolicy: + # size: 10MB + # DefaultRolloverStrategy: + # max: 10 + - name: file-error-appender fileName: ${error-log} PatternLayout: @@ -102,20 +80,19 @@ Configuration: level: ERROR Loggers: - # Root 로거 - 개발환경에서는 기본적으로 INFO 레벨 + # Root 로거 Root: level: INFO AppenderRef: - ref: console-appender Logger: - # 애플리케이션 로그 - 개발 시 모든 레벨 + Loki 전송 + # 애플리케이션 로그 - 파일로만 저장 (Promtail이 읽어감) - name: site.icebang additivity: "false" level: DEBUG AppenderRef: - ref: console-appender - - ref: loki-appender - ref: file-dev-appender - ref: file-error-appender @@ -124,12 +101,11 @@ Configuration: additivity: "false" AppenderRef: - ref: workflow-appender - - ref: loki-appender - ref: console-appender - ref: file-dev-appender - ref: file-error-appender - # Spring Framework - 개발 시 필요한 정보만 + # Spring Framework - name: org.springframework additivity: "false" level: INFO @@ -137,45 +113,42 @@ Configuration: - ref: console-appender - ref: file-dev-appender - # Spring Security - 인증 디버깅용 + # Spring Security - name: org.springframework.security level: DEBUG additivity: "false" AppenderRef: - ref: console-appender - ref: file-dev-appender - - ref: loki-appender - # 웹 요청 로그 - API 개발 시 유용 + # 웹 요청 로그 - name: org.springframework.web level: DEBUG additivity: "false" AppenderRef: - ref: console-appender - ref: file-dev-appender - - ref: loki-appender - # 트랜잭션 로그 - DB 작업 디버깅 + # 트랜잭션 로그 - name: org.springframework.transaction level: DEBUG additivity: "false" AppenderRef: - ref: console-appender - ref: file-dev-appender - - ref: loki-appender # HikariCP 로그 비활성화 - name: com.zaxxer.hikari level: "OFF" - # SQL 로그 - 개발 시 쿼리 확인용 (필요시 활성화) + # SQL 로그 - name: org.hibernate.SQL level: DEBUG additivity: "false" AppenderRef: - ref: console-appender - # 파라미터 바인딩 로그 (필요시 활성화) + # 파라미터 바인딩 로그 - name: org.hibernate.type.descriptor.sql.BasicBinder level: TRACE additivity: "false" diff --git a/docker/local/docker-compose.yml b/docker/local/docker-compose.yml index c69ea697..8bd162d6 100644 --- a/docker/local/docker-compose.yml +++ b/docker/local/docker-compose.yml @@ -48,6 +48,25 @@ services: timeout: 5s retries: 5 + promtail: + image: grafana/promtail:2.9.0 + container_name: promtail + restart: unless-stopped + ports: + - "9080:9080" + volumes: + - ./promtail-config.yml:/etc/promtail/config.yml:ro +# - ../../logs:/logs:ro # 프로젝트 루트의 logs 디렉토리 + - ./logs:/logs:ro + command: -config.file=/etc/promtail/config.yml + depends_on: + - loki + healthcheck: + test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:9080/ready || exit 1"] + interval: 30s + timeout: 10s + retries: 5 + grafana: image: grafana/grafana:10.1.0 container_name: grafana diff --git a/docker/local/promtail-config.yml b/docker/local/promtail-config.yml new file mode 100644 index 00000000..ebc38465 --- /dev/null +++ b/docker/local/promtail-config.yml @@ -0,0 +1,47 @@ +server: + http_listen_port: 9080 + grpc_listen_port: 0 + +positions: + filename: /tmp/positions.yaml + +clients: + - url: http://loki:3100/loki/api/v1/push + +scrape_configs: + - job_name: user-service-logs + static_configs: + - targets: + - localhost + labels: + job: user-service + app: user-service + env: develop + __path__: /logs/develop/app.log + pipeline_stages: + - regex: + expression: '^\[(?P[^\]]*)\] (?P\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) \[(?P[^\]]+)\] (?P\w+)\s+(?P\S+) - (?P.*)$' + - labels: + traceId: + level: + thread: + logger: + + - job_name: user-service-errors + static_configs: + - targets: + - localhost + labels: + job: user-service-errors + app: user-service + env: develop + log_type: error + __path__: /logs/develop/error.log + pipeline_stages: + - regex: + expression: '^\[(?P[^\]]*)\] (?P\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) \[(?P[^\]]+)\] (?P\w+)\s+(?P\S+) - (?P.*)$' + - labels: + traceId: + level: + thread: + logger: \ No newline at end of file From 52480d4fd29990719c454541d2ab21572a3e0830 Mon Sep 17 00:00:00 2001 From: can019 Date: Tue, 16 Sep 2025 21:35:31 +0900 Subject: [PATCH 2/8] =?UTF-8?q?chore:=20Promtail=EC=9D=84=20=ED=86=B5?= =?UTF-8?q?=ED=95=B4=20loki=20=EC=A0=84=EC=86=A1=20(local)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/user-service/src/main/resources/log4j2-develop.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/user-service/src/main/resources/log4j2-develop.yml b/apps/user-service/src/main/resources/log4j2-develop.yml index fd47edeb..7d6f89a0 100644 --- a/apps/user-service/src/main/resources/log4j2-develop.yml +++ b/apps/user-service/src/main/resources/log4j2-develop.yml @@ -7,7 +7,7 @@ Configuration: - name: "app-name" value: "user-service" - name: "log-path" - value: "./logs" + value: "./docker/local/logs" - name: "charset-UTF-8" value: "UTF-8" # DEBUG 환경용 콘솔 패턴 - 더 간단하고 가독성 좋게 From e295dc254c51af303dbe4addf86dbc65266ce19a Mon Sep 17 00:00:00 2001 From: can019 Date: Wed, 17 Sep 2025 10:20:29 +0900 Subject: [PATCH 3/8] chore: Exception handler error, warn logging - warn: Data duplicate - error: Exception --- .../global/handler/exception/GlobalExceptionHandler.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/user-service/src/main/java/site/icebang/global/handler/exception/GlobalExceptionHandler.java b/apps/user-service/src/main/java/site/icebang/global/handler/exception/GlobalExceptionHandler.java index 4eba15ae..8243acde 100644 --- a/apps/user-service/src/main/java/site/icebang/global/handler/exception/GlobalExceptionHandler.java +++ b/apps/user-service/src/main/java/site/icebang/global/handler/exception/GlobalExceptionHandler.java @@ -9,10 +9,13 @@ import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.resource.NoResourceFoundException; +import lombok.extern.slf4j.Slf4j; + import site.icebang.common.dto.ApiResponse; import site.icebang.common.exception.DuplicateDataException; @RestControllerAdvice +@Slf4j public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) @@ -24,6 +27,7 @@ public ApiResponse handleValidation(MethodArgumentNotValidException ex) @ExceptionHandler(Exception.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public ApiResponse handleGeneric(Exception ex) { + log.error(ex.getMessage(), ex); return ApiResponse.error("Internal error: ", HttpStatus.INTERNAL_SERVER_ERROR); } @@ -48,6 +52,7 @@ public ApiResponse handleAccessDenied(AccessDeniedException ex) { @ExceptionHandler(DuplicateDataException.class) @ResponseStatus(HttpStatus.CONFLICT) public ApiResponse handleDuplicateData(DuplicateDataException ex) { + log.warn(ex.getMessage(), ex); return ApiResponse.error("Duplicate: " + ex.getMessage(), HttpStatus.CONFLICT); } } From f049cb506bc6ba5838222733d5547c0e1b2af6e1 Mon Sep 17 00:00:00 2001 From: can019 Date: Wed, 17 Sep 2025 14:10:00 +0900 Subject: [PATCH 4/8] =?UTF-8?q?fix:=20spanid=20logging=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/user-service/src/main/resources/log4j2-develop.yml | 2 +- docker/local/docker-compose.yml | 9 +++++---- docker/local/promtail-config.yml | 8 +++++--- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/apps/user-service/src/main/resources/log4j2-develop.yml b/apps/user-service/src/main/resources/log4j2-develop.yml index 7d6f89a0..21790eea 100644 --- a/apps/user-service/src/main/resources/log4j2-develop.yml +++ b/apps/user-service/src/main/resources/log4j2-develop.yml @@ -15,7 +15,7 @@ Configuration: value: "%highlight{[%-5level]} [%X{traceId}] [%X{spanId}] %d{HH:mm:ss} [%t] %n %logger{20} - %msg%n%n " # 파일용 패턴 - Promtail이 파싱하기 쉽게 구조화 (UTC 시간 사용) - name: "file-layout-pattern" - value: "[%X{traceId}] %d{yyyy-MM-dd HH:mm:ss.SSS}{UTC} [%t] %-5level %logger{36} - %msg%n" + value: "[%X{traceId}] [%X{spanId}] %d{yyyy-MM-dd HH:mm:ss.SSS}{UTC} [%t] %-5level %logger{36} - %msg%n" # 개발 환경용 로그 파일들 - 절대경로나 상대경로 설정 - name: "dev-log" value: ${log-path}/develop/app.log diff --git a/docker/local/docker-compose.yml b/docker/local/docker-compose.yml index 8bd162d6..37392085 100644 --- a/docker/local/docker-compose.yml +++ b/docker/local/docker-compose.yml @@ -55,9 +55,9 @@ services: ports: - "9080:9080" volumes: - - ./promtail-config.yml:/etc/promtail/config.yml:ro -# - ../../logs:/logs:ro # 프로젝트 루트의 logs 디렉토리 - - ./logs:/logs:ro + - ./promtail-config.yml:/etc/promtail/config.yml:ro # config 파일 + - ./logs:/logs:cached + - promtail_positions:/var/lib/promtail # positions 파일용 writable volume command: -config.file=/etc/promtail/config.yml depends_on: - loki @@ -88,4 +88,5 @@ services: volumes: mariadb_data: loki_data: - grafana_data: \ No newline at end of file + grafana_data: + promtail_positions: {} # Promtail positions 파일용 named volume diff --git a/docker/local/promtail-config.yml b/docker/local/promtail-config.yml index ebc38465..6b906e2c 100644 --- a/docker/local/promtail-config.yml +++ b/docker/local/promtail-config.yml @@ -20,12 +20,13 @@ scrape_configs: __path__: /logs/develop/app.log pipeline_stages: - regex: - expression: '^\[(?P[^\]]*)\] (?P\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) \[(?P[^\]]+)\] (?P\w+)\s+(?P\S+) - (?P.*)$' + expression: '^\[(?P[^\]]*)\] \[(?P[^\]]*)\] (?P\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) \[(?P[^\]]+)\] (?P\w+)\s+(?P\S+) - (?P.*)$' - labels: traceId: level: thread: logger: + spanId: - job_name: user-service-errors static_configs: @@ -39,9 +40,10 @@ scrape_configs: __path__: /logs/develop/error.log pipeline_stages: - regex: - expression: '^\[(?P[^\]]*)\] (?P\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) \[(?P[^\]]+)\] (?P\w+)\s+(?P\S+) - (?P.*)$' + expression: '^\[(?P[^\]]*)\] \[(?P[^\]]*)\] (?P\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) \[(?P[^\]]+)\] (?P\w+)\s+(?P\S+) - (?P.*)$' - labels: traceId: level: thread: - logger: \ No newline at end of file + logger: + spanId: \ No newline at end of file From e9d5bd370d159db28bec5bff678fa9d07427c0c4 Mon Sep 17 00:00:00 2001 From: can019 Date: Wed, 17 Sep 2025 14:48:18 +0900 Subject: [PATCH 5/8] =?UTF-8?q?chore:=20production=20grafana=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/log4j2-production.yml | 11 ++-- docker/production/docker-compose.yml | 19 ++++++- docker/production/promtail-config.yml | 52 +++++++++++++++++++ 3 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 docker/production/promtail-config.yml diff --git a/apps/user-service/src/main/resources/log4j2-production.yml b/apps/user-service/src/main/resources/log4j2-production.yml index 455b2f22..2e88bd19 100644 --- a/apps/user-service/src/main/resources/log4j2-production.yml +++ b/apps/user-service/src/main/resources/log4j2-production.yml @@ -12,10 +12,10 @@ Configuration: value: "UTF-8" # 프로덕션 환경용 콘솔 패턴 - 구조화된 로그 - name: "console-layout-pattern" - value: "%highlight{[%-5level]} [%X{traceId}] [%X{spanId}] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n" - # 파일용 패턴 + value: "%highlight{[%-5level]} [%X{traceId}] [%X{spanId}] %d{HH:mm:ss}{UTC} [%t] %logger{20} - %msg% " + # 파일용 패턴 - Promtail이 파싱하기 쉽게 구조화 (UTC 시간 사용) - name: "file-layout-pattern" - value: "[%X{traceId}] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" + value: "[%X{traceId}] [%X{spanId}] %d{yyyy-MM-dd HH:mm:ss.SSS}{UTC} [%t] %-5level %logger{36} - %msg%n" # 프로덕션 환경용 로그 파일들 - name: "prod-log" value: ${log-path}/production/app.log @@ -33,8 +33,9 @@ Configuration: # Loki Appender - 프로덕션 모니터링용 Loki: name: loki-appender - host: localhost - port: 3100 + url: ${LOKI_URL} # Grafana Cloud Loki URL + basicAuthUsername: ${LOKI_USERNAME} # Grafana Cloud 사용자 이름 + basicAuthPassword: ${LOKI_PASSWORD} # Grafana Cloud API Key JsonLayout: compact: true eventEol: true diff --git a/docker/production/docker-compose.yml b/docker/production/docker-compose.yml index f3016096..6f2677be 100644 --- a/docker/production/docker-compose.yml +++ b/docker/production/docker-compose.yml @@ -27,6 +27,21 @@ services: - .env.prod environment: - SPRING_PROFILES_ACTIVE=production + volumes: + - logs_volume:/logs + + promtail: + image: grafana/promtail:2.9.0 + container_name: promtail + restart: unless-stopped + volumes: + - ./promtail-config.yml:/etc/promtail/config.yml:ro + - logs_volume:/logs # Spring 로그 읽기 + command: -config.file=/etc/promtail/config.yml + depends_on: + - user-service + env_file: + - .env.prod pre-processing-service: image: ghcr.io/kernel180-be12/final-4team-icebang/pre-processing-service:latest @@ -39,11 +54,13 @@ services: env_file: - .env.prod volumes: - - onnx_models:/app/models # ONNX 모델 저장용 볼륨 -> 서버에 만들어야함 + - onnx_models:/app/models # ONNX 모델 저장용 볼륨 volumes: caddy_data: caddy_config: + logs_volume: + driver: local onnx_models: driver: local diff --git a/docker/production/promtail-config.yml b/docker/production/promtail-config.yml new file mode 100644 index 00000000..be66588b --- /dev/null +++ b/docker/production/promtail-config.yml @@ -0,0 +1,52 @@ +server: + http_listen_port: 9080 + grpc_listen_port: 0 + +positions: + filename: /tmp/positions.yaml + +clients: + - url: ${LOKI_URL} # Grafana Cloud Loki URL + basicAuth: + username: ${LOKI_USERNAME} # Grafana Cloud 사용자 이름 + password: ${LOKI_PASSWORD} # Grafana Cloud API Key + +scrape_configs: + - job_name: user-service-logs + static_configs: + - targets: + - localhost + labels: + job: user-service + app: user-service + env: production + __path__: /logs/production/app.log + pipeline_stages: + - regex: + expression: '^\[(?P[^\]]*)\] \[(?P[^\]]*)\] (?P\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) \[(?P[^\]]+)\] (?P\w+)\s+(?P\S+) - (?P.*)$' + - labels: + traceId: + level: + thread: + logger: + spanId: + + - job_name: user-service-errors + static_configs: + - targets: + - localhost + labels: + job: user-service-errors + app: user-service + env: production + log_type: error + __path__: /logs/production/error.log + pipeline_stages: + - regex: + expression: '^\[(?P[^\]]*)\] \[(?P[^\]]*)\] (?P\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) \[(?P[^\]]+)\] (?P\w+)\s+(?P\S+) - (?P.*)$' + - labels: + traceId: + level: + thread: + logger: + spanId: From 2ac9e9d03a398f8da2f5eb0ca9c5034c1e7026b0 Mon Sep 17 00:00:00 2001 From: can019 Date: Wed, 17 Sep 2025 14:57:14 +0900 Subject: [PATCH 6/8] =?UTF-8?q?chore:=20Promtail=20=EB=B3=B5=EC=82=AC=20ci?= =?UTF-8?q?=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy-java.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/workflows/deploy-java.yml b/.github/workflows/deploy-java.yml index eb2865d6..d7526506 100644 --- a/.github/workflows/deploy-java.yml +++ b/.github/workflows/deploy-java.yml @@ -28,6 +28,9 @@ jobs: echo "DB_USER=${{ secrets.DB_USER }}" >> .env.prod echo "DB_PASS=${{ secrets.DB_PASS }}" >> .env.prod echo "DB_NAME=${{ secrets.DB_NAME }}" >> .env.prod + echo "ENV_NAME=${{ secrets.LOKI_URL }}" >> .env.prod + echo "ENV_NAME=${{ secrets.LOKI_USERNAME }}" >> .env.prod + echo "ENV_NAME=${{ secrets.LOKI_PASSWORD }}" >> .env.prod echo "ENV_NAME=${{ secrets.ENV_NAME }}" >> .env.prod - name: Set repo lowercase @@ -62,6 +65,17 @@ jobs: target: "~/app/docker/production/" overwrite: true + - name: Copy promtail-config to EC2 + uses: appleboy/scp-action@v0.1.7 + with: + host: ${{ secrets.SERVER_HOST }} + username: ubuntu + key: ${{ secrets.SERVER_SSH_KEY }} + source: "docker/production/promtail-config.yml" + target: "~/app/docker/production/" + overwrite: true + + - name: Deploy on EC2 uses: appleboy/ssh-action@v1.0.3 with: From 479b3718e78342eb3060d266c0c760c68f20362a Mon Sep 17 00:00:00 2001 From: can019 Date: Wed, 17 Sep 2025 14:58:25 +0900 Subject: [PATCH 7/8] =?UTF-8?q?chore:=20User-service=20promtail=20?= =?UTF-8?q?=EC=9D=B4=20=ED=9B=84=20container=ED=99=94=20=EB=90=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/production/docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/production/docker-compose.yml b/docker/production/docker-compose.yml index 6f2677be..71839532 100644 --- a/docker/production/docker-compose.yml +++ b/docker/production/docker-compose.yml @@ -19,6 +19,8 @@ services: image: ghcr.io/kernel180-be12/final-4team-icebang/user-service:latest container_name: user-service restart: on-failure:3 + depends_on: + - promtail ports: - "8080:8080" networks: @@ -38,8 +40,6 @@ services: - ./promtail-config.yml:/etc/promtail/config.yml:ro - logs_volume:/logs # Spring 로그 읽기 command: -config.file=/etc/promtail/config.yml - depends_on: - - user-service env_file: - .env.prod From 9cbdf394f3afcca408e51c35c796d0a6b2cb4d68 Mon Sep 17 00:00:00 2001 From: can019 Date: Wed, 17 Sep 2025 16:28:58 +0900 Subject: [PATCH 8/8] =?UTF-8?q?chore:=20Production,=20grafana=20=EC=97=B0?= =?UTF-8?q?=EB=8F=99=20=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/local/docker-compose.yml | 10 ++++++++-- docker/local/promtail-config.yml | 2 +- docker/production/docker-compose.yml | 8 +++++++- docker/production/promtail-config.yml | 7 ++----- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/docker/local/docker-compose.yml b/docker/local/docker-compose.yml index 4385e4d2..6e27be91 100644 --- a/docker/local/docker-compose.yml +++ b/docker/local/docker-compose.yml @@ -60,7 +60,13 @@ services: - ./promtail-config.yml:/etc/promtail/config.yml:ro # config 파일 - ./logs:/logs:cached - promtail_positions:/var/lib/promtail # positions 파일용 writable volume - command: -config.file=/etc/promtail/config.yml + command: + - -config.file=/etc/promtail/config.yml + - -config.expand-env=true + ulimits: + nofile: + soft: 65535 + hard: 65535 depends_on: - loki healthcheck: @@ -97,4 +103,4 @@ volumes: networks: icebang-network: - driver: bridge + driver: bridge \ No newline at end of file diff --git a/docker/local/promtail-config.yml b/docker/local/promtail-config.yml index 6b906e2c..a55c64db 100644 --- a/docker/local/promtail-config.yml +++ b/docker/local/promtail-config.yml @@ -6,7 +6,7 @@ positions: filename: /tmp/positions.yaml clients: - - url: http://loki:3100/loki/api/v1/push + - url: http://localhost:3100/loki/api/v1/push scrape_configs: - job_name: user-service-logs diff --git a/docker/production/docker-compose.yml b/docker/production/docker-compose.yml index 71839532..deff1ca4 100644 --- a/docker/production/docker-compose.yml +++ b/docker/production/docker-compose.yml @@ -39,7 +39,13 @@ services: volumes: - ./promtail-config.yml:/etc/promtail/config.yml:ro - logs_volume:/logs # Spring 로그 읽기 - command: -config.file=/etc/promtail/config.yml + command: + - -config.file=/etc/promtail/config.yml + - -config.expand-env=true + ulimits: + nofile: + soft: 65535 + hard: 65535 env_file: - .env.prod diff --git a/docker/production/promtail-config.yml b/docker/production/promtail-config.yml index be66588b..30beb73a 100644 --- a/docker/production/promtail-config.yml +++ b/docker/production/promtail-config.yml @@ -6,10 +6,7 @@ positions: filename: /tmp/positions.yaml clients: - - url: ${LOKI_URL} # Grafana Cloud Loki URL - basicAuth: - username: ${LOKI_USERNAME} # Grafana Cloud 사용자 이름 - password: ${LOKI_PASSWORD} # Grafana Cloud API Key + - url: https://${LOKI_USERNAME}:${LOKI_PASSWORD}@${LOKI_HOST}/loki/api/v1/push scrape_configs: - job_name: user-service-logs @@ -49,4 +46,4 @@ scrape_configs: level: thread: logger: - spanId: + spanId: \ No newline at end of file