어플리케이션 수행 중 발생하는 예외(Exception)를 모니터링 할 수 있는 시스템을 위해 ELK를 로컬환경에 구성한다.
Logback Logstash용 Appender를 활용하여 WARN 이상 레벨의 로그를 Logstash에 적재 (https://jsonobject.tistory.com/243), Logstash에서 Elasticsearch로 색인
* LogstashEncoder
는 스프링앱에서 발생하는 로그를 ELK스택에서 사용되는 JSON형태로 변환
* LogstashSocketAppender
는 Logstash 서버에 로그 전송
WAS -> Logstash: 수집
Logstash -> Elasticsearch: 색인
Elasticsearch -> Kibana: 시각화
테스트를 위해 표준 입출력 (터미널 입력, 출력)으로 설정하고 실행
설치경로/config/logstash-example.conf 파일 생성하고 아래와 같이 입력
input {
stdin {} // 표준 입력
}
output {
stdout {} // 표준 출력
}
실행
cd 설치경로/bin
logstash ../config/logstash-example.conf
logstash Input 설정에 아래와 같이 설정
# 입력은 TCP 4560포트로, 출력은 표준 출력 사용
input {
tcp {
port => 4560
codec => json_lines
}
}
output {
stdout {} // 표준 출력
}
Spring Boot pom.xml에 logstash appender 디펜던시 추가
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.11</version>
</dependency>
logback.xml에 Logstash Appender 추가
<!-- logstash 4560포트 설정에 맞춰 설정 -->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>127.0.0.1:4560</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder"></encoder>
</appender>
logstash Input/Output 설정에 아래와 같이 설정
# 입력은 TCP 4560포트로, 출력은 표준 출력 사용
input {
tcp {
port => 4560
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "logstash-%{+YYYY.MM.dd}"
}
}
cd 설치경로/bin
elasticsearch
이후 http://localhost:9200 로 접속해봤을 때 페이지가 정상적으로 뜨는지 확인
cd 설치경로/bin
kibana
이후 http://localhost:5601 로 접속해봤을 때 페이지가 정상적으로 뜨는지 확인