diff --git a/.github/workflows/deploy-java.yml b/.github/workflows/deploy-java.yml index d7526506..32ba3224 100644 --- a/.github/workflows/deploy-java.yml +++ b/.github/workflows/deploy-java.yml @@ -28,9 +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 "LOKI_HOST=${{ secrets.LOKI_HOST }}" >> .env.prod + echo "LOKI_USERNAME=${{ secrets.LOKI_USERNAME }}" >> .env.prod + echo "LOKI_PASSWORD=${{ secrets.LOKI_PASSWORD }}" >> .env.prod echo "ENV_NAME=${{ secrets.ENV_NAME }}" >> .env.prod - name: Set repo lowercase @@ -44,6 +44,7 @@ jobs: key: ${{ secrets.SERVER_SSH_KEY }} source: "docker/production/docker-compose.yml" target: "~/app" + overwrite: true - name: Copy .env.prod file to EC2 uses: appleboy/scp-action@v0.1.7 @@ -62,7 +63,7 @@ jobs: username: ubuntu key: ${{ secrets.SERVER_SSH_KEY }} source: "docker/production/Caddyfile" - target: "~/app/docker/production/" + target: "~/app" overwrite: true - name: Copy promtail-config to EC2 @@ -72,8 +73,7 @@ jobs: username: ubuntu key: ${{ secrets.SERVER_SSH_KEY }} source: "docker/production/promtail-config.yml" - target: "~/app/docker/production/" - overwrite: true + target: "~/app" - name: Deploy on EC2 diff --git a/apps/user-service/src/main/resources/log4j2-production.yml b/apps/user-service/src/main/resources/log4j2-production.yml index 2e88bd19..ae8e9aba 100644 --- a/apps/user-service/src/main/resources/log4j2-production.yml +++ b/apps/user-service/src/main/resources/log4j2-production.yml @@ -7,12 +7,12 @@ Configuration: - name: "app-name" value: "user-service" - name: "log-path" - value: "./logs" + value: "/logs" - name: "charset-UTF-8" value: "UTF-8" # 프로덕션 환경용 콘솔 패턴 - 구조화된 로그 - name: "console-layout-pattern" - value: "%highlight{[%-5level]} [%X{traceId}] [%X{spanId}] %d{HH:mm:ss}{UTC} [%t] %logger{20} - %msg% " + value: "%highlight{[%-5level]} [%X{traceId}] [%X{spanId}] %d{HH:mm:ss}{UTC} [%t] %logger{20} - %msg%n" # 파일용 패턴 - Promtail이 파싱하기 쉽게 구조화 (UTC 시간 사용) - name: "file-layout-pattern" value: "[%X{traceId}] [%X{spanId}] %d{yyyy-MM-dd HH:mm:ss.SSS}{UTC} [%t] %-5level %logger{36} - %msg%n" @@ -30,37 +30,6 @@ Configuration: PatternLayout: pattern: ${console-layout-pattern} - # Loki Appender - 프로덕션 모니터링용 - Loki: - name: loki-appender - url: ${LOKI_URL} # Grafana Cloud Loki URL - basicAuthUsername: ${LOKI_USERNAME} # Grafana Cloud 사용자 이름 - basicAuthPassword: ${LOKI_PASSWORD} # Grafana Cloud API Key - JsonLayout: - compact: true - eventEol: true - includeStacktrace: true - KeyValuePair: - - key: "app" - value: "${app-name}" - - key: "env" - value: "production" - Label: - - name: "app" - value: "${app-name}" - - name: "env" - value: "production" - - 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: name: workflow-appender tableName: "execution_log" @@ -89,9 +58,11 @@ Configuration: - name: "reserved1" pattern: "%X{spanId}" - File: + # RollingFile로 변경 (File 대신) + RollingFile: - name: file-prod-appender fileName: ${prod-log} + filePattern: ${log-path}/production/app.%d{yyyy-MM-dd}.%i.log PatternLayout: pattern: ${file-layout-pattern} # 로그 파일 롤링 설정 @@ -103,10 +74,10 @@ Configuration: size: "100 MB" DefaultRolloverStrategy: max: 30 - filePattern: ${log-path}/production/app.%d{yyyy-MM-dd}.%i.log - name: file-error-appender fileName: ${error-log} + filePattern: ${log-path}/production/error.%d{yyyy-MM-dd}.%i.log PatternLayout: pattern: ${file-layout-pattern} ThresholdFilter: @@ -119,7 +90,6 @@ Configuration: size: "100 MB" DefaultRolloverStrategy: max: 30 - filePattern: ${log-path}/production/error.%d{yyyy-MM-dd}.%i.log Loggers: # Root 로거 - 프로덕션에서는 WARN 레벨 @@ -135,7 +105,6 @@ Configuration: level: INFO AppenderRef: - ref: console-appender - - ref: loki-appender - ref: file-prod-appender - ref: file-error-appender @@ -144,7 +113,6 @@ Configuration: additivity: "false" AppenderRef: - ref: workflow-appender - - ref: loki-appender - ref: console-appender - ref: file-prod-appender - ref: file-error-appender @@ -172,7 +140,6 @@ Configuration: AppenderRef: - ref: console-appender - ref: file-prod-appender - - ref: loki-appender # 트랜잭션 로그 - 프로덕션에서는 WARN 레벨 - name: org.springframework.transaction diff --git a/docker/production/promtail-config.yml b/docker/production/promtail-config.yml index 30beb73a..f5e1e709 100644 --- a/docker/production/promtail-config.yml +++ b/docker/production/promtail-config.yml @@ -17,7 +17,7 @@ scrape_configs: job: user-service app: user-service env: production - __path__: /logs/production/app.log + __path__: /logs/production/app.log # **path** → __path__로 변경 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.*)$' @@ -37,7 +37,7 @@ scrape_configs: app: user-service env: production log_type: error - __path__: /logs/production/error.log + __path__: /logs/production/error.log # **path** → __path__로 변경 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.*)$'