본문 바로가기
Spring Boot

[Spring Boot] Elastic Stack 연동 (ELK 연동)

by byeongoo 2021. 11. 28.

이번 포스팅에서는 Elastic Stack을 연동하는 방법에 대해서 포스팅하려고한다. 서버에 Elastic Stack을 설치하지 않았다면 여기를 참고하면된다.

 

1. logstash dependency 추가 (build.gradle)

implementation 'net.logstash.logback:logstash-logback-encoder:6.6'

 

2. logback-spring.xml 파일 추가

logback-spring.xml을 resources 폴더 아래에 추가한다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%-5level %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5level] : %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <file>mylog.txt</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- or whenever the file size reaches 100MB -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>[%-5level] %d{HH:mm:ss.SSS} %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- Log Stash 사용시 사용할 TCP 통신 정보 -->
    <appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>서버ip정보:logstash포트</destination>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder"></encoder>
    </appender>

    <!-- root레벨 설정 -->
    <root level="INFO">
        <appender-ref ref="console" />
        <appender-ref ref="stash" />
    </root>

</configuration>

 

3. application.yml logback-spring.xml 추가

logging:
  config: classpath:logback-spring.xml

 

4. spring-cloud-starter-sleuth 추가(build.gradle)

만약 로그를 traceId, spanId별로 보고 싶다면 spring-cloud-starter-sleuth 의존성을 추가한다. msa 환경에서 로그를 추적하기 위해서 많이 사용한다.

implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-sleuth', version: '3.0.4'

 

5. Kibana 조회

Kibana에서 조회하려면 index patterns을 생성 후 로그는 Discover에서 조회할 수 있는데 이 과정은 생략하도록 하겠다.

로그를 다음과 같이 조회할 수 있다.