Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejava
themeEmacs
titlelogstash.conf
# [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 }
 }

5044 tcp 포트를 통해, json 로그를 실시간으로 수집처리를 하겠다란 설정입니다.



의존Lib 셋팅

Code Block
languagejava
themeEmacs
	 <!-- 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의 logstash-logback-encoder가 엘라스틱이 이해할수 있는 형태의 로그로 만들어줍니다.


LogBack.xml 설정

Code Block
languagejava
themeEmacs
<?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>

로그기능은 파일및 DB또는 콘솔등 다양한 아웃풋지정이 가능하며

여기서는 LogStash Socket 전송기능을 설정을 하였습니다.

몇가지  LogsStash가 띄워진 서버정보가 설정이됩니다.

Log에 사용되는 Class

Code Block
languagejava
themeEmacs
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;
	}

}

로그를 구조를 정의할수 있는 가장 간단한 방법입니다.

다양한 로그에 필요한 멤버정의후, toString만 재정의하여 JsonString으로 표현하게 설정을 합니다.

Log에 사용되는 Class

Code Block
languagejava
themeEmacs
InFlowLog addLog = new InFlowLog();
logger.info( "{}",addLog.toString()  );	//이것이 의미가 있는 로그....

로그를 쌓거나 전송하는 가장 일반적인 방법이며, 우리가 원하는 로그정보를 채운후

전송을 하면됩니다.


연동결과 확인

우리가 정의한 로그 Class의 멤버 필드가, 정확하게 엘라스틱이 이해하는 필드명이 되면 성공입니다.

이것이 중요한 이유는, 추후 이렇게 정의된 필드를 통해서 다양한 집계처리및 리포팅이 가능하기때문입니다.



Image Added

신규 로그형태가 추가 때문에, 새로운 인덱스 패턴을 추가해야..우리가 정한 로그 멤버를 통해 집계처리가가능해집니다.