Architecture/ELK

Elastic Stack 아주 조금만 알아보자 - LogStash

KOOCCI 2019. 12. 12. 14:52

LogStash

LogStash 정의부터 알아보자.

LogStash는 픈 소스 서버의 데이터 처리 파이프라인이며, 다양한 소스에서 동시에 데이터를 수집하여 변환한 후 자주 사용하는 스태쉬(Stash)-보관소(저장소)로 전달한다.

 

LogStash 구조

LogStash의 구조는 크게 3가지, 입력 / 필터 / 출력으로 되어 있으며, 형식이나 복잡성과 관계 없이 데이터를 동적으로 수집, 전환, 전송한다.

grok을 통해 비구조적 데이터에서 구조를 도출하여 IP주소에서 위치 정보 좌표를 해독하고, 민감한 필드를 익명화하거나 제외시키며, 전반적인 처리를 손쉽게 도와준다.

 

LogStash 구조

입력

데이터는 여러 시스템에 다양한 형태로 보관된다. 모든 소스, 사이즈, 형태의 데이터 수집을 진행하기 위해, 다양한 입력 Plugin 지원을 하여, 여러 가지 공통 소스에서 이벤트를 동시에 가져오며, 모든 로그와 메트릭, 웹 애플리케이션, 데이터 저장소 등의 서비스를 연속 스트리밍 형태로 간편하게 수집한다.

 

다양한 입력 Plugin 예시는 다음과 같다.

Plugin Description Github repository
beats Receives events from the Elastic Beats framework logstash-input-beats
elasticsearch Reads query results from an Elasticsearch cluster logstash-input-elasticsearch
file Streams events from files logstash-input-file
github Reads events from a GitHub webhook logstash-input-github
http Receives events over HTTP or HTTPS logstash-input-http
jdbc Creates events from JDBC data logstash-input-jdbc
kafka Reads events from a Kafka topic logstash-input-kafka
redis Reads events from a Redis instance logstash-input-redis
stdin Reads events from standard input logstash-input-stdin
syslog Reads syslog messages as events logstash-input-syslog
tcp Reads events from a TCP socket logstash-input-tcp

필터

LogStash 필터는 데이터가 소스에서 저장소로 이동하는 과정에서 각 이벤트를 구문 분석하고 명명된 필드를 식별하여 구조를 구축하며, 이를 공통 형식으로 변환 통합하여 분석을 보다 빠르고 용이하게 만드는 동시에 비즈니스 가치를 높여준다.

1. grok을 통해 비정형 데이터에서 구조 도출
2. IP 주소에서 위치 좌표 해독
3. PII 데이터의 익명화, 민감한 정보 필드 완전 제외
4. 데이터 소스나 형태, 스키마의 용이한 처리

앞서 설명에도 나왔던 grok을 조금더 부연설명하자면,

grok은 다양한 필터 plugin중 가장 빈번하게 사용되는 plugin으로, 로그 데이터의 여러 정보 중 원하는 영역만을 추출한다.

 

특히, 미리 정의된 다양한 정규표현식 패턴을 제공해주어서, 손쉽게 가져와 사용할 수도 있다.

 

자세한 예시는 아래 블로그를 참조하자.

[출처 : http://kangmyounghun.blogspot.com/2017/06/elasticsearch-grok.html]

출력

LogStash는 원하는 곳으로 데이터를 라우팅할 수 있는 다양한 출력을 지원하여, 러 저장소로 데이터를 다운스트림하는 유연성을 확보할 수 있다.

 

Install 시작

실제로 해보는게 가장 좋은 방법이니, 설치부터 시작하자.

Install 전에 Java가 깔려있는지 확인은 필요하다.

 

https://www.elastic.co/kr/downloads/past-releases/logstash-7-4-2

그럼 위 링크에서 파일 다운 후, 설치가 가능하다. 참고로, 버전을 맞추기 위해, logstash 7.4.2를 설치해주었다.

sudo dpkg -i logstash-7.4.2.deb

설치가 완료되었다면, 다음과 같이 conf 파일을 만들어준다.

logstash-simple

input { 
	stdin { } 
}
output {
	stdout { }
}

가장 간단한 standard input / standard output 형태이다.

 

해당 파일을 만들고, 실행해보도록 하자.

 

먼저, 아래 위치로 이동 후,

/usr/share/logstash/bin

다음 명령어를 친다.

./logstash -f <DIR>/logstash-simple.conf

여기서 <DIR>은 해당 파일 위치를 말한다.

정상적으로 실행되면 다음과 같이 나온다.

logstash

혹시나 여기서, Path "/usr/share/logstash/data" must be a writable directory
와 같은 에러가 나온다면, 다음을 참고하자.

https://discuss.elastic.co/t/i-cannot-start-logstash-on-my-machine-error-message-inside/88900/2

그리고 하나씩 문구를 적어보자.

stdin

다음과 같이, 입력한 내용이 그대로 message로 나오는 것을 볼 수 있다.

 

다음 포스팅은 하나의 예시를 통해 전체적으로 진행할 수 있는 실습을 진행하자.

 


※ Inflearn 강의, Naver D2 블로그 등을 참고해 정리한 내용입니다.

 

1편 > Elastic Stack 아주 조금만 알아보자 - Elastic Stack 이란?

2편 > Elastic Stack 아주 조금만 알아보자 - ElasticSearch 기본 실습

3편 > Elastic Stack 아주 조금만 알아보자 - ElasticSearch Mapping/Search

4편 > Elastic Stack 아주 조금만 알아보자 - ElasticSearch 구조

5편 > Elastic Stack 아주 조금만 알아보자 - Aggregation

6편 > Elastic Stack 아주 조금만 알아보자 - Kibana

7편 > 현재 Post

8편 > Elastic Stack 아주 조금만 알아보자 - LogStash 실습 1