개발 일지

Logstash 란

북극곰은콜라 2022. 11. 23. 07:01
반응형


개요

  • 원작자는 Jordan Sissel
  • 초기 개발 목적은 다양한 데이터 수집과 저장을 위해 개발된 프로젝트
  • Logstash가 출력 API로 ElasticSearch를 지원 이후 통합됨
  • 개발언어는 JRuby로 JVM위에서 동작한다.
  • 라이센스는 Apache 2.0을 따른다

FLow

DataSource로 부터 데이터를 컬랙팅하여 뒤로 넘기는 파이프라인 역할을 한다. 다양한 종류의 DataSource에서 데이터를 받을 수 있으며, 다양한 application으로 데이터를 넘길 수 있는 interface를 제공한다. pipeLine 내부에서는 필터링 등 설정에 의한 비즈니스를 수행한다.


LogStash 동작 원리

dataSource로 부터 설정된 이벤트 단위로 Queue에 입력받는다.

특정 모듈이 Queue로부터 이벤트들을 꺼내 WorkerThread에게 할당한다.

내부적으로 Worker Thread들이 Pool에 의해서 관리되며, 각 Worker Thread가 비동기로 Filter 처리를 한다.

작업을 마친 WorkerThread는 Output Queue로 다시 이벤트를 넘긴다.

특정 모듈에서 Output Queue에 쌓이는 이벤트를 다음 파이프라인으로 넘긴다.


LogStash With SpringBoot

dependency 추가

<!-- logging -->
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>5.2</version>
</dependency>

logback 확장

1. logstash appender 추가

<!--Tcp 통신, 비동기 -->
<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <destination>목적지 ip:port</destination>
    <!-- JSON 형태로 인코딩-->
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
        <providers>
            <mdc />
            <pattern>
                    <!-- 아래와 같은 키밸류 타입이 들어가면서 나중에 키바나에서 찾기 수월함-->
                <pattern>{"serviceID":"myServiceName"}</pattern>
            </pattern>
            <timestamp />
            <!--<version />-->
            <context />
            <threadName />
            <logLevel />
            <message />
            <loggerName />
            <logstashMarkers />
            <stackTrace />
            <callerData />
        </providers>
    </encoder>
</appender>

2. Appender 추가

<root level="INFO">
   <appender-ref ref="FILE" />
   <appender-ref ref="FILE_EVENT" />
   <appender-ref ref="stash"/>
</root>

Reference

 - https://www.elastic.co/kr/logstash
 - https://www.elastic.co/guide/en/logstash/7.6/introduction.html
 - https://www.elastic.co/guide/en/logstash/current/index.html

 

 

반응형

'개발 일지' 카테고리의 다른 글

Nginx vs HAProxy  (0) 2022.11.23
OIDC 란  (0) 2022.11.23
[외부자료] Java ClassLoader 요약 글  (0) 2022.11.22
JsonPath란  (0) 2022.11.22
HikariCP 동작원리  (0) 2022.11.16