Skip to content

Commit daea588

Browse files
authored
chore: Alloy를 이용한 로깅 추가 (#284)
* chore: logback으로 파일 로깅 설정 * chore: alloy 추가 * fix: EOF 개행 * chore: alloy 설정 적용, env 적용
1 parent 260dcbf commit daea588

File tree

5 files changed

+99
-0
lines changed

5 files changed

+99
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ build/
44
!gradle/wrapper/gradle-wrapper.jar
55
!**/src/main/**/build/
66
!**/src/test/**/build/
7+
logs/
78

89
### STS ###
910
.apt_generated

docker-compose.prod.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,18 @@ services:
2828
- SPRING_PROFILES_ACTIVE=prod
2929
- SPRING_DATA_REDIS_HOST=redis
3030
- SPRING_DATA_REDIS_PORT=6379
31+
volumes:
32+
- ./logs:/var/log/spring
3133
depends_on:
3234
- redis
35+
36+
alloy:
37+
image: grafana/alloy:latest
38+
container_name: alloy
39+
ports:
40+
- "12345:12345"
41+
volumes:
42+
- ./logs:/var/log/spring
43+
- ./docs/config.alloy:/etc/alloy/config.alloy:ro
44+
environment:
45+
- ALLOY_ENV=production

docker-compose.stage.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,19 @@ services:
2828
- "8080:8080"
2929
environment:
3030
- SPRING_PROFILES_ACTIVE=stage
31+
volumes:
32+
- ./logs:/var/log/spring
3133
depends_on:
3234
- redis
3335
network_mode: host
36+
37+
alloy:
38+
image: grafana/alloy:latest
39+
container_name: alloy
40+
ports:
41+
- "12345:12345"
42+
volumes:
43+
- ./logs:/var/log/spring
44+
- ./docs/config.alloy:/etc/alloy/config.alloy:ro
45+
environment:
46+
- ALLOY_ENV=stage

docs/config.alloy

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
livedebugging {
2+
enabled = true
3+
}
4+
5+
logging {
6+
level = "info"
7+
format = "logfmt"
8+
}
9+
10+
local.file_match "spring_logs" {
11+
path_targets = [{ __path__ = "/var/log/spring/*.log" }] // 서비스 로그 파일 경로
12+
}
13+
14+
loki.source.file "spring_source" {
15+
targets = local.file_match.spring_logs.targets // 위에서 정의한 로그 파일 경로 사용
16+
forward_to = [loki.process.spring_labels.receiver] // 읽은 로그를 처리 단계로 전달
17+
}
18+
19+
loki.process "spring_labels" {
20+
forward_to = [loki.write.grafana_loki.receiver] // 처리된 로그를 Loki로 전송
21+
22+
stage.static_labels {
23+
values = {
24+
service = "backend",
25+
env = sys.env("ALLOY_ENV"),
26+
}
27+
}
28+
}
29+
30+
loki.write "grafana_loki" {
31+
endpoint {
32+
url = "http://monitor.solid-connection.com:3100/loki/api/v1/push"
33+
tenant_id = "fake" // Loki 테넌트 ID (싱글 테넌시이기에 fake로 설정)
34+
batch_wait = "1s" // 로그 배치 전송 대기 시간
35+
batch_size = "1MB" // 로그 배치 크기
36+
}
37+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<configuration scan="true" scanPeriod="60 seconds">
3+
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
4+
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
5+
<include resource="org/springframework/boot/logging/logback/file-appender.xml"/>
6+
7+
<springProperty scope="context" name="activeProfile" source="spring.profiles.active"/>
8+
9+
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
10+
<file>/var/log/spring/solid-connection-server.log</file>
11+
12+
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
13+
<!-- 매일 로그를 롤링 -->
14+
<fileNamePattern>/var/log/spring/solid-connection-server.%d{yyyy-MM-dd}.log</fileNamePattern>
15+
<maxHistory>30</maxHistory> <!-- 최근 30일 로그 보관 -->
16+
</rollingPolicy>
17+
18+
<encoder>
19+
<!-- Loki에서 읽기 좋은 logfmt 형식 (간단한 key=value 스타일) -->
20+
<pattern>timestamp=%d{yyyy-MM-dd'T'HH:mm:ss.SSS} level=%-5level thread=%thread logger=%logger{36}
21+
message=%msg%n
22+
</pattern>
23+
</encoder>
24+
</appender>
25+
26+
<root level="INFO">
27+
<appender-ref ref="CONSOLE"/>
28+
</root>
29+
30+
<springProfile name="prod,stage">
31+
<root level="INFO">
32+
<appender-ref ref="FILE"/>
33+
</root>
34+
</springProfile>
35+
</configuration>

0 commit comments

Comments
 (0)