Skip to content

Commit 3764e64

Browse files
committed
[#130] feat: elk 로깅 추가
1 parent 87fe407 commit 3764e64

File tree

11 files changed

+121
-34
lines changed

11 files changed

+121
-34
lines changed

.github/workflows/cd.yml

+5-4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ on:
44
push:
55
branches:
66
- main
7+
- feature/**
78

89
env:
910
NCP_ACCESS_KEY: ${{ secrets.NCP_ACCESS_KEY }}
@@ -56,8 +57,8 @@ jobs:
5657
tags: |
5758
${{ env.REGISTRY_URL }}/${{ env.SERVICE_NAME }}:${{ env.BUILD_NUMBER }}
5859
${{ env.REGISTRY_URL }}/${{ env.SERVICE_NAME }}:latest
59-
cache-from: type=registry,ref=${{ env.REGISTRY_URL }}/${{ env.SERVICE_NAME}}:buildcache,image-manifest=true,oci-mediatypes=true
60-
cache-to: type=registry,ref=${{ env.REGISTRY_URL }}/${{ env.SERVICE_NAME}}:buildcache,mode=max,image-manifest=true,oci-mediatypes=true
60+
cache-from: type=registry,ref=${{ env.REGISTRY_URL }}/${{ env.SERVICE_NAME}}:buildcache
61+
cache-to: type=registry,ref=${{ env.REGISTRY_URL }}/${{ env.SERVICE_NAME}}:buildcache,mode=max
6162

6263
- name: Setting NCP CLI & Credentials
6364
run: |
@@ -96,7 +97,7 @@ jobs:
9697
username: ${{ env.NCP_SERVER_USERNAME }}
9798
password: ${{ env.NCP_SERVER_PASSWORD }}
9899
port: ${{ env.SSH_PORT }}
99-
source: "docker-compose.yml,.env,nginx/default.conf,scripts/server/*"
100+
source: "docker-compose.yml,.env,nginx/default.conf,scripts/server/*,logstash.conf,docker-compose.elk.yml"
100101
target: "~/"
101102
overwrite: true
102103

@@ -111,7 +112,7 @@ jobs:
111112
docker login ${{ env.REGISTRY_URL }} -u ${{ env.NCP_ACCESS_KEY }} -p ${{ env.NCP_SECRET_KEY }}
112113
113114
docker-compose -f ~/docker-compose.yml pull
114-
docker-compose -f ~/docker-compose.yml up -d --remove-orphans
115+
docker-compose -f ~/docker-compose.elk.yml up -d -f ~/docker-compose.yml up -d
115116
docker-compose exec nginx nginx -s reload
116117
117118
chmod +x ~/scripts/server/register-certbot-cron-job.sh

build.gradle.kts

+5-16
Original file line numberDiff line numberDiff line change
@@ -43,39 +43,28 @@ subprojects {
4343
dependsOn("spotlessApply")
4444
}
4545

46-
configurations {
47-
compileOnly {
48-
extendsFrom(configurations.annotationProcessor.get())
49-
}
50-
all {
51-
exclude(group = "org.springframework.boot", module = "spring-boot-starter-logging")
52-
}
53-
}
54-
5546
dependencies {
5647
implementation("org.springframework.boot:spring-boot-starter-web")
5748
compileOnly("org.projectlombok:lombok")
5849
annotationProcessor("org.projectlombok:lombok")
5950
testCompileOnly("org.projectlombok:lombok")
6051
testAnnotationProcessor("org.projectlombok:lombok")
6152

53+
implementation("org.springframework.boot:spring-boot-starter-logging")
54+
implementation("org.slf4j:slf4j-api")
6255
testImplementation("org.springframework.boot:spring-boot-starter-test")
6356

6457
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
6558

66-
// log4j2
67-
implementation("org.springframework.boot:spring-boot-starter-log4j2")
68-
implementation("com.lmax:disruptor:4.0.0")
69-
7059
// p6spy (local db query log)
7160
implementation("p6spy:p6spy:3.9.1")
7261
implementation("com.github.vertical-blank:sql-formatter:2.0.5")
7362

74-
// log4jdbc
75-
implementation("org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16")
76-
7763
// Jackson
7864
implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.18.2")
65+
66+
// Logstash
67+
implementation("net.logstash.logback:logstash-logback-encoder:7.4")
7968
}
8069
}
8170

docker-compose.elk.yml

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
version: '3.8'
2+
3+
services:
4+
elasticsearch:
5+
image: docker.elastic.co/elasticsearch/elasticsearch:8.10.0
6+
container_name: elasticsearch
7+
environment:
8+
- discovery.type=single-node
9+
- xpack.security.enabled=false
10+
- xpack.security.http.ssl.enabled=false
11+
- TZ=Asia/Seoul
12+
ports:
13+
- "9200:9200"
14+
networks:
15+
- elastic-network
16+
volumes:
17+
- elasticsearch-data:/usr/share/elasticsearch/data
18+
19+
logstash:
20+
image: docker.elastic.co/logstash/logstash:8.10.0
21+
container_name: logstash
22+
environment:
23+
- TZ=Asia/Seoul
24+
ports:
25+
- "5044:5044"
26+
- "9600:9600"
27+
volumes:
28+
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
29+
depends_on:
30+
- elasticsearch
31+
networks:
32+
- elastic-network
33+
34+
kibana:
35+
image: kibana:8.10.1
36+
container_name: kibana
37+
environment:
38+
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
39+
- TZ=Asia/Seoul
40+
ports:
41+
- "5601:5601"
42+
depends_on:
43+
- elasticsearch
44+
networks:
45+
- elastic-network
46+
47+
networks:
48+
elastic-network:
49+
driver: bridge
50+
51+
volumes:
52+
elasticsearch-data:

docker-compose.yml

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ services:
4040
- mysql
4141
networks:
4242
- jaknaeso-network
43+
- elastic-network
4344
restart: on-failure
4445

4546
nginx:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<configuration>
2+
<property name="LOG_FILE" value="application.log"/>
3+
4+
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
5+
<destination>logstash:5044</destination>
6+
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
7+
<includeCallerData>true</includeCallerData>
8+
</encoder>
9+
</appender>
10+
11+
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
12+
<file>${LOG_FILE}</file>
13+
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
14+
<fileNamePattern>application.%d{yyyy-MM-dd_HH-mm}.log.gz</fileNamePattern>
15+
<maxHistory>5</maxHistory>
16+
</rollingPolicy>
17+
<encoder>
18+
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n%throwable</pattern>
19+
</encoder>
20+
</appender>
21+
22+
<root level="info">
23+
<appender-ref ref="FILE" />
24+
<appender-ref ref="LOGSTASH" />
25+
</root>
26+
</configuration>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<configuration>
2+
<property name="LOG_FILE" value="application.log"/>
3+
4+
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
5+
<encoder>
6+
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n</pattern>
7+
</encoder>
8+
</appender>
9+
10+
<root level="info">
11+
<appender-ref ref="CONSOLE" />
12+
</root>
13+
</configuration>

jaknaeso-server/src/main/java/org/nexters/jaknaesoserver/domain/auth/controller/dto/KakaoLoginRequest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.nexters.jaknaesoserver.domain.auth.controller.dto;
22

3-
import org.apache.logging.log4j.core.config.plugins.validation.constraints.NotBlank;
3+
import jakarta.validation.constraints.NotBlank;
44
import org.nexters.jaknaesocore.domain.auth.service.dto.KakaoLoginCommand;
55

66
public record KakaoLoginRequest(@NotBlank String code, @NotBlank String redirectUri) {

jaknaeso-server/src/main/java/org/nexters/jaknaesoserver/domain/auth/controller/dto/KakaoLoginWithTokenRequest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.nexters.jaknaesoserver.domain.auth.controller.dto;
22

3-
import org.apache.logging.log4j.core.config.plugins.validation.constraints.NotBlank;
3+
import jakarta.validation.constraints.NotBlank;
44
import org.nexters.jaknaesocore.domain.auth.service.dto.KakaoLoginWithTokenCommand;
55

66
public record KakaoLoginWithTokenRequest(@NotBlank String accessToken) {
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
logging:
2-
config: classpath:log/log4j2-dev.yml
2+
config: classpath:log/logback-dev.yml
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,16 @@
11
spring:
22

33
datasource:
4-
url: jdbc:log4jdbc:p6spy:mysql://${DATABASE_HOST}/${DATABASE_NAME}
4+
url: jdbc:p6spy:mysql://${DATABASE_HOST}/${DATABASE_NAME}
55
hikari:
66
username: ${DATABASE_USER}
77
password: ${DATABASE_PASSWORD}
8-
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
8+
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
99

1010
jpa:
1111
hibernate:
1212
ddl-auto: create-drop
1313

1414

1515
logging:
16-
config: classpath:log/log4j2-local.yml
17-
decorator:
18-
datasource:
19-
p6spy:
20-
enable-logging: true
21-
multiline: true
22-
logging: SLF4J
23-
tracing:
24-
include-parameter-values: true
16+
config: classpath:log/logback-local.xml

logstash.conf

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
input {
2+
tcp {
3+
port => 5044
4+
codec => json
5+
}
6+
}
7+
8+
output {
9+
elasticsearch {
10+
hosts => ["http://elasticsearch:9200"]
11+
index => "application-logs-%{+YYYY.MM.dd}"
12+
}
13+
}

0 commit comments

Comments
 (0)