Page History
Info |
---|
스프링내에 발생하는 수많은 로그를 즉시 수집하고 엘라서틱서치와 연동하기 위한 방법 엘라스틱서치를 기본적으로 사용가능한 대상으로 정리하였습니다. |
목표:
- 기존 사용하는 로그(LogBack)기능을 사용하여 , 폴링방식이아닌 실시간 방식으로 연동
- LogBack의 SocketAppend가 사용됨
- 집계를 위해서 보고되는 필드처리가 Json화되어여함
LogStash셋팅
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
# [Beats input plugin]
# listen on port 5044 for incoming Beats connections
input {
tcp {
port => 5044
codec => json_lines
}
}
filter {
json {
source => "message"
}
}
# [Elasticsearch output plugin]
# index into Elasticsearch
output {
elasticsearch {
hosts => "localhost:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
} |
의존Lib 셋팅
Code Block | ||||
---|---|---|---|---|
| ||||
<!-- LogBack for LogStash -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.1</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
</dependency> |
LogBack.xml 설정
Code Block | ||||
---|---|---|---|---|
| ||||
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<keepAliveDuration>5 minutes</keepAliveDuration>
<reconnectionDelay>10 second</reconnectionDelay>
<waitStrategyType>sleeping</waitStrategyType>
<writeBufferSize>16384</writeBufferSize>
<destination>180.70.98.37:5044</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<version>6</version>
</encoder>
</appender>
<logger name="org.springframework.data" level="error" />
<root level="info">
<appender-ref ref="STASH"/>
</root>
</configuration> |
Log에 사용되는 Class
Code Block | ||||
---|---|---|---|---|
| ||||
import java.io.Serializable;
import com.fasterxml.jackson.databind.ObjectMapper;
public class InFlowLog implements Serializable {
// 로그를 정의한다.
@Override
public String toString() {
ObjectMapper mapper = new ObjectMapper();
String jsonString ="";
try {
jsonString = mapper.writeValueAsString(this);
} catch(IOException e) {
jsonString = "jsonerror";
}
return jsonString;
}
} |
Log에 사용되는 Class
Code Block | ||||
---|---|---|---|---|
| ||||
InFlowLog addLog = new InFlowLog();
logger.info( "{}",addLog.toString() ); //이것이 의미가 있는 로그.... |