본문 바로가기

ELK

[ELK] SpringBoot Logback 과 ELK Stack 연동

스프링 부트를 사용한 예제 애플리케이션을 AWS를 통해 모노리식에서 MSA로 MSA에서 다시 컨테이너 오케스트레이션으로 개선해나가는 과정을 모두 담은 강의를 출시하게 되었습니다.
강의 과정에서 15개 이상의 서비스를 사용하게 됩니다.
그래서 클라우드 개발자가 아닌 개발자, 학생 분들도 AWS의 폭넓은 지식 쉽고 빠르게 습득할 수 있는 기회가 될 수 있다고 생각합니다!
배너를 누르면 강의로 이동됩니다.

블로그를 통해 구매하시는 분들에게만 10%할인 쿠폰을 증정중입니다.
꼭 아래 쿠폰번호를 입력해 주세요!

16861-259843d6c2d7


 

Logstash 설치 및 실행 테스트 (mac 기준)

 

logstash 설치

 

brew install elastic/tap/logstash-full

* 기존에 설치된 logstash 가 있으면 brew unlink logstash 명령어를 통해 Unlink 후 재시도

 

brew 를 통해 mac 에서 설치하면 logstash 의 설정 파일의 경로는 /usr/local/etc/logstash 에 생성된다.

logstash 폴더

 


 

logstash 기본 설정 및 실행

 

실행 전 /usr/local/etc/logstash/pipelines.yml 파일을 수정해 준다.

 

기존 내용의 9번, 15번 라인의 주석을 풀어주고 15번 라인에 설치된 logstash 환경설정 파일들의 경로와 와일드카드 및 확장자로 지정

 

*추가로 앞으로 환경설정의 변동이 있을거고 매번 재시작하기 번거롭다면 /usr/local/etc/logstash/logstash.yml 파일의 다음 부분을 수정해주 면 된다.

 

logstash 실행

brew services start elastic/tap/logstash-full

 

logstash 로그 확인

cat /usr/local/var/log/logstash.log

 

 

정상적으로 설정 후 실행을 하게 되면 위와 같이 에러 없이 로그가 출력된다.

 


 

SpringBoot Logback 을 통해 Logstash로 로그 출력

 

logstash 입출력 설정

로그파일 입력 및 출력을 설정하기 위해 logstash 설정파일을 /usr/local/etc/logstash 에 추가해준다.

vi /usr/local/etc/logstash/logstash-example.conf

 

input{
  tcp {
    port => 8900
    codec => json_lines
  }
}
output{
  stdout{}
}

 

  • input{} - 입력 받을 로그 정보
    • tcp {} - tcp 입력을 받음
      • port - tcp 입력 받을 포트 (8900번 포트로 출력되는 로그들을 입력 받는다)
      • codec - 디코딩할 코덱 (json_lines - 행 구분을 위한 코덱으로 여러 json 이 한번에 들어올 경우 사용)
  • output{} - 로그 출력 정보
    • stdout {} - 입력받은 로그를 logstash 로그로 그대로 출력, 디버깅용으로 주로 사용 

 


 

SpringBoot Logback 설정

 

spring boot 에서 로그를 logstash 가 읽을 수 있는 json 형태로 변환하기 위해 encoder 종속성을 추가해준다.

dependencies {
    implementation("net.logstash.logback:logstash-logback-encoder:7.2")
}

  최신버전 확인 -  https://mvnrepository.com/artifact/net.logstash.logback/logstash-logback-encoder

 

logstash encoder 를 적용한 appender 작성 및 로그 적용을 위해 logback-spring.xml 파일 수정

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <springProfile name="burger">
        <property resource="logback-burger.properties"/>
    </springProfile>

    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashAccessTcpSocketAppender">
        <destination>127.0.0.1:8900</destination>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>

    <springProfile name="burger">
        <root level="INFO">
            <appender-ref ref="LOGSTASH"/>
        </root>
    </springProfile>
</configuration>

 

위의 설정들이 끝났으면 logstash 와 spring boot 를 각각 재시작 하고 logstash 의 로그를 확인해보면,

logstash 로그

위와 같은 spring boot 의 INFO 로그들이 출력되어있다.

 

 

 

 

Logstash로 입력받은 로그를 ElasticSearch에 전달

 

 

Elasticsearch 설치 및 실행

 

Homebrew로 설치하려면 먼저 Elastic Homebrew 리포지토리를 탭해야 한다

brew tap elastic/tap

 

Homebrew 를 통해 elasticsearch 설치

brew install elastic/tap/elasticsearch-full
 
 

다른 설치 방법은 아래 링크에서 확인

https://www.elastic.co/guide/en/elasticsearch/reference/7.17/install-elasticsearch.html

 

Installing Elasticsearch | Elasticsearch Guide [7.17] | Elastic

Installing Elasticsearchedit Hosted Elasticsearchedit You can run Elasticsearch on your own hardware or use our hosted Elasticsearch Service that is available on AWS, GCP, and Azure. Try the Elasticsearch Service for free. Installing Elasticsearch Yourself

www.elastic.co

 

elasticsearch 실행

brew services start elasticsearch

 

실행 후 다음 명령어 또는 localhost:9200 접속을 통해 정상적으로 실행되었는지 확인할 수 있다.

$curl -XGET 'localhost:9200'

 

 


 

Logstash 에서 Elasticsearch 로 출력하도록 Logstash 환경설정 수정 

 

spring boot 로 부터 입력받은 로그를 elasticsearch 로 출력하기 위해 다음과 같이 output 설정에 elasticsearch 플러그인을 사용하여 설정을 입력해 준다.

input{
  tcp {
    port => 8900
    codec => json_lines
  }
}
output{
  elasticsearch{
    hosts => "http://localhost:9200"
    index => "logstash-spring-boot-%{+YYYY.MM.dd}"
  }
}

 

  • elasticsearch {} - 출력 플러그인
    • hosts - 출력받을 elasticsearch 주소
    • index - 출력받은 로그의 index ( %{+YYYY.MM.dd} 의 식을 통해 생성일이 index 이름으로 사용됨)

 


 

Elasticsearch 가 받은 로그 데이터 확인

 

http://localhost:9200/[index이름]/_search 로 접속하여 logstash로부터 전달받은 로그 데이터를 확인한다.

*위 설정의 경우 작성일 기준  http://localhost:9200/logstash-spring-boot-2022.12.29/_search 로 접속

elasticsearch 의 인덱스

 


 

ElasticSearch의 인덱스를 Kibana를 통해 시각화

 

kibana 설치

brew install elastic/tap/kibana-full

 


 

kibana 실행

brew services start elastic/tap/kibana-full

 


 

Kibana 접속

 

http://localhost:5601 접속

*5601 포트는 다른 설정을 하지 않았을 경우 kibana 의 기본 포트

kibana console

 


 

생성한 인덱스 관리 설정

 

관리할 인덱스 생성을 위해 탭의 Stack Management 선택

 

Stack Management 의 Create Index Pattern 선택

 

생성된 인덱스가 포함되는 이름 및 와일드카드로 필터링하여 항목이 보이면 Next step 선

 

타임 필터로 사용할 index 의 필드를 선택 후 Create index pattern 클릭

 

 


 

관리에 포함된 인덱스의 데이터 확인

확인을 위해 탭의 Discover 로 이동

 

 

Discover 페이지로 이동하면 다음과 같이 인덱스에 쌓인 로그들을 확인할 수 있다.

* elasticsearch 에서는 보였는데 kibana에서는 안 보일 경우 우측 상단의 Show dates 를 클릭하여 필터할 데이터 시간을 조정해 준다.