반응형
개요
- 원작자는 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 |