Springboot MSA 구성5 - Logging(ELK 연동)

Published: by Creative Commons Licence

Docker-Compose를 이용해서 로컬PC에 ELK Stack 환경구성이 완료되었다. 이번에는 기존에 진행했던 Springboot MSA 프로젝트에 ELK Stack을 붙여 중앙 집중식 로깅 환경을 구성해 보려고 한다.

PreSetting

기존 Springboot-MSA 프로젝트에는 logging 관련 설정이 안되어 있기 때문에 logback 설정과 적재된 로그를 logstash로 보낼때 필요한 인코딩 라이브러리 logstash-logback-encoder Dependency 추가가 필요하다.

logback.xml

FileAppender 설정없이 Console과 Logstash 관련 설정만 추가.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--콘솔에 로그를 남깁니다.-->
    <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="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>127.0.0.1:5000</destination>

        <!-- encoder is required -->
        <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>

    <root level="INFO">
        <appender-ref ref="console"/>
        <appender-ref ref="stash"/>
    </root>

</configuration>

build.gradle

공통 Dependency에 logstash-logback-encoder Dependency 추가

dependencies {
    implementation group: 'net.logstash.logback', name: 'logstash-logback-encoder', version: '6.6' 
}

Controller info레벨 로그추가

// Resource 모듈 info 로그 추가
@GetMapping("/db")
public String db() {
    log.info("ResourceController db : " + ip + ":" + port + " [" + id +" : " + password + "]");
    return "ResourceController db : " + ip + ":" + port + " [" + id +" : " + password + "]";
}

// Resource2 모듈 info 로그 추가
@GetMapping("/health")
public String health() {
    log.info("PayController running");
    return "PayController running";
}

로그 추가한 API 호출

Reource 모듈 API - http://localhost:9100/v1/resource/db

INFO  08:51:08.607 [http-nio-8080-exec-9] c.s.s.m.r.c.ResourceController - ResourceController db : 10.10.10.10:3333 [dbid : dbpass]
INFO  08:51:09.411 [http-nio-8080-exec-10] c.s.s.m.r.c.ResourceController - ResourceController db : 10.10.10.10:3333 [dbid : dbpass]
INFO  08:51:10.227 [http-nio-8080-exec-5] c.s.s.m.r.c.ResourceController - ResourceController db : 10.10.10.10:3333 [dbid : dbpass]
INFO  08:51:11.856 [http-nio-8080-exec-4] c.s.s.m.r.c.ResourceController - ResourceController db : 10.10.10.10:3333 [dbid : dbpass]
INFO  08:51:12.638 [http-nio-8080-exec-2] c.s.s.m.r.c.ResourceController - ResourceController db : 10.10.10.10:3333 [dbid : dbpass]

Reource2 모듈 API - http://localhost:9100/v1/pay/health

INFO  08:51:14.138 [http-nio-8090-exec-3] c.s.s.m.r.controller.PayController - PayController running
INFO  08:51:14.945 [http-nio-8090-exec-2] c.s.s.m.r.controller.PayController - PayController running
INFO  08:51:15.720 [http-nio-8090-exec-1] c.s.s.m.r.controller.PayController - PayController running
INFO  08:51:16.516 [http-nio-8090-exec-10] c.s.s.m.r.controller.PayController - PayController running
INFO  08:51:17.260 [http-nio-8090-exec-5] c.s.s.m.r.controller.PayController - PayController running

logback 설정에 console,stash에 로그가 적재되도록 설정을 했고 위에서 Console 로그는 확인되었다. 이제 Kibana에서 로그가 정상적으로 출력되었는지 확인해 보자.

Kibana 설정/확인

Index 생성을 위해 Manage 클릭

Kibana > Index Pattern 클릭

Create Index Pattern 버튼 클릭

Create Index Step1 - index명 설정(index => "logstash-%{+YYYY.MM.dd}")

이전 노트 ELK Stack Docker-Compose 설치에서 정리했던 logstash.conf 파일내용 참고해서 index명 설정

Create Index Step2 - Time Field 설정

Analytics >Discover 메뉴에서 결과확인

여기까지 해서 분산된 로그를 하나의 저장소로 모으는 일이 끝났다. 앞으로 중앙 집중식으로 모인 로그에 대한 추적 및 분석이 용이하도록 하기 위한 설정이 필요할 것 같다.

참고

MSA 와 Log - 중앙 집중식 로깅 ELK stack 편
Elasticsearch + Logstash + Kibana 구축하기 (2) - Spring boot와 연동

Github

https://github.com/sisipapa/Springboot-MSA.git