diff --git a/.gitignore b/.gitignore index 9f59fa8d9..d5df4047a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ build/ !gradle/wrapper/gradle-wrapper.jar !**/src/main/**/build/ !**/src/test/**/build/ +logs/ ### STS ### .apt_generated diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 9517a07aa..30b0c9fc1 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -28,5 +28,18 @@ services: - SPRING_PROFILES_ACTIVE=prod - SPRING_DATA_REDIS_HOST=redis - SPRING_DATA_REDIS_PORT=6379 + volumes: + - ./logs:/var/log/spring depends_on: - redis + + alloy: + image: grafana/alloy:latest + container_name: alloy + ports: + - "12345:12345" + volumes: + - ./logs:/var/log/spring + - ./docs/config.alloy:/etc/alloy/config.alloy:ro + environment: + - ALLOY_ENV=production diff --git a/docker-compose.stage.yml b/docker-compose.stage.yml index 3a97a6411..c4ccd687f 100644 --- a/docker-compose.stage.yml +++ b/docker-compose.stage.yml @@ -28,6 +28,19 @@ services: - "8080:8080" environment: - SPRING_PROFILES_ACTIVE=stage + volumes: + - ./logs:/var/log/spring depends_on: - redis network_mode: host + + alloy: + image: grafana/alloy:latest + container_name: alloy + ports: + - "12345:12345" + volumes: + - ./logs:/var/log/spring + - ./docs/config.alloy:/etc/alloy/config.alloy:ro + environment: + - ALLOY_ENV=stage diff --git a/docs/config.alloy b/docs/config.alloy new file mode 100644 index 000000000..bd3aedf9a --- /dev/null +++ b/docs/config.alloy @@ -0,0 +1,37 @@ +livedebugging { + enabled = true +} + +logging { + level = "info" + format = "logfmt" +} + +local.file_match "spring_logs" { + path_targets = [{ __path__ = "/var/log/spring/*.log" }] // 서비스 로그 파일 경로 +} + +loki.source.file "spring_source" { + targets = local.file_match.spring_logs.targets // 위에서 정의한 로그 파일 경로 사용 + forward_to = [loki.process.spring_labels.receiver] // 읽은 로그를 처리 단계로 전달 +} + +loki.process "spring_labels" { + forward_to = [loki.write.grafana_loki.receiver] // 처리된 로그를 Loki로 전송 + + stage.static_labels { + values = { + service = "backend", + env = sys.env("ALLOY_ENV"), + } + } +} + +loki.write "grafana_loki" { + endpoint { + url = "http://monitor.solid-connection.com:3100/loki/api/v1/push" + tenant_id = "fake" // Loki 테넌트 ID (싱글 테넌시이기에 fake로 설정) + batch_wait = "1s" // 로그 배치 전송 대기 시간 + batch_size = "1MB" // 로그 배치 크기 + } +} diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 000000000..390c7c606 --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,35 @@ + + + + + + + + + + /var/log/spring/solid-connection-server.log + + + + /var/log/spring/solid-connection-server.%d{yyyy-MM-dd}.log + 30 + + + + + timestamp=%d{yyyy-MM-dd'T'HH:mm:ss.SSS} level=%-5level thread=%thread logger=%logger{36} + message=%msg%n + + + + + + + + + + + + + +