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() ); //이것이 의미가 있는 로그.... |