본문 바로가기
ELK/logstash

ELK - Logstash 1 : 로그스태시란

by 킹차니 2023. 6. 21.

로그스태시란

 

로그스태시는 플러그인 기반의 오픈소스 데이터 처리 파이프라인 도구이다. 복잡한 데이터 전처리 과정을 별도의 애플리케이션 작성 없이 간단한게 설정만으로 수행할 수 있다.

즉 데이터를 저장하기 전에 사용자가 원하는 형태로 변경할 수 있는 강력한 기능을 제공한다.

 

로그스태시는 비츠, 로그스태시, 엘라스틱서치, 키바나를 이용해 데이터를 수집-변환-저장-시각화 하는 서비스를 구상할 때 데이터를 저장하기 전에 원하는 형태로 가공하는 역할을 한다.

수집 - 변환 - 저장 - 시각화

 

로그스태시는 비츠를 포함한 여러 소스 파일을 입력으로 받을 수 있고, 데이터를 수정/삭제/추가해 엘라스틱서치나 다른 시스템으로 데이터를 전송할 수 있다.

 

 

 

 

로그스태시 특징

 

• 플러그인 기반 

로그스태시의 파이프라인을 구성하는 각 요소들은 전부 플러그인 형태로 만들어져 있다. 수많은 플러그인을 기본으로 제공하고 커뮤니티에서도 찾을 수 있다. 

 

• 모든 형태의 데이터 처리

기본 플러그인의 조합으로 JSON, XML 등 구조화된 텍스트 뿐 아니라 다양한 데이터를 입력받고 가공하여 저장할 수 있다. 특히 이벤트 데이터(시간에 따라 발생하는 데이터)를 처리하는 데 최적화되어 있다.

 

• 성능

자체적으로 내장된 메모리와 파일 기반의 큐를 사용하므로 처리 속도와 안정성이 높다. 파이프라인 배치 크기 조정을 통해 병목현상을 방지하고 성능을 최적화할 수 있다.

 

• 안정성

엘라스틱서치의 장애 상황에 대응하기 위한 재시도 로직이나 오류가 발생한 도큐먼트를 따로 보관하는 dead letter queue를 내장하고 있다.

 

 

로그스태시 실행

로그스태시를 설치했다면 bin폴더의 logstash 명령을 통해 로스스태시를 실행시킬 수 있다.(맥 기준) 이때 반드시 파이프라인 설정이 필요하다. 아래와 같이 터미널에서 -e 옵션으로 콘솔에서 직접 파이프라인을 설정할 수도 있다.

아래의 파이프라인은 운영체제의 표준 입력으로 전달받은 메시지를 표준 출력으로 표시한다.

./bin/logstash -e "input {stdin { } } output { stdout { } }"

실행이 됐다면 콘솔창에 hello world를 입력해보자.

결과를 보면 로그스태시가 JSON 형태로 데이터를 출력하는데, @version이나 @timestamp는 로그스태시가 만든 필드로 사용자가 만든 필드와 충돌할 것을 대비해 @기호가 붙어있다. message, host 필드는 각각 데이터와 시스템 사용자를 나타낸다.

==> @ 기호는 로그스태시에 의해 생성된 필드, 붙지 않은 필드는 수집을 통해 얻어진 정보라고 이해하자.

 

 

 

파이프라인

 

파이프라인은 로그스태시의 핵심이다.

파이프라인은 데이터를 입력받아 실시간으로 변경하고 이를 다른 시스템에 전달하는 역할을 하는 로그스태시의 핵심 기능이다.

파이프 라인은 입력, 필터, 출력 이라는 세가지 구성요소로 이루어저 있다. 입력과 출력은 필수이고 필터는 옵션이다.

https://www.devopsschool.com/blog/logstash-pipeline-config-example/

 

 

 

 

파이프라인 - 입력

파이프라인의 가장 앞부분에 위치하며 소스 원본으로부터 데이터를 입력받는 단계다. 직접 대상에 접근해 읽어 들이는 경우도 있지만 서버를 열어놓고 받아들이는 형태의 구성도 가능하다.

https://www.elastic.co/guide/kr/logstash/current/introduction.html

로그스태시는 위 그림과 같이 파일, 통계, 웹, 데이터베이스, 스트림 등 다양한 데이터 소스들로부터 받은 데이터를 인식할 수 있고, 이를 처리하기 위한 플러그인들을 가지고 있다. (예로 파일은 파일 플러그인, 실시간 트윗은 트위터 프러그인) 자주 사용되는 입력 플러그인은 아래와 같다.

입력 플러그인 설명
file 리눅스의 tail -f 명령처럼 파일을 스트리밍하여 이벤트를 읽어 들인다.
syslog 네트워크를 통해 전달되는 시스로그를 수신한다.
kafka 카프카 토픽에서 데이터를 읽어 들인다.
jdbc JDBC드라이버로 지정한 일정마다 쿼리를 실행해 결과를 읽어 들인다.

 

위에서 아래 명령을 통해 로그스태시를 실행해봤다.

./bin/logstash -e "input {stdin { } } output { stdout { } }"

이번에는 다른 입력 플러그인을 사용하기 위해 로그스태시가 설치된 폴더의 config에 logstash-test.conf라는 이름의 설정 파일을 만들어서 파일 입력 플러그인을 적용해보자.

 

본인은 로그스태시 폴더 이하의 config 폴더에 vi 명령어를 사용해 설정 파일을 만들었다. 

이제 해당 파일에 아래와 같이 입출력 플러그인을 입력해준다.

input {
  file {
    path => "/Users/****oung/elasticsearch-8.8.1/logs/elasticsearch.log"
    start_position => "beginning"
  }
}

output {
  stdout { }
}

 

path는 읽어 들일 파일 위치를 결정한다. 현재 /Users/****oung/elasticsearch-8.8.1/logs/elasticsearch.log 파일에 로그가 쌓이면 실시간으로 이를 감지해 읽어 들인다.

 

elasticsearch.log 파일에 임시로 넣어둔 예시 로그는 아래와 같다.

[2023-06-21 17:21] [ID1] 192.10.2.6 9500 [INFO] - connected.
[2023-06-21 17:31] [ID2] 211.25.3.1 1010 [warn] - busy server.


- elasticsearch.log 파일

 

start_position은 최초 파일을 발견했을 때 파일을 읽을 위치로, 파일의 시작부분부터 읽어 들일지 끝부분부터 새로운 라인만 읽어들일지 정할 수 있다. beginning은 시작부분부터를 의미한다.

 

출력은 표준 풀력을 사용했기 때문에 입력이 발생하면 콘솔창에 출력한다.

 

이제 이를 실행시켜보자.

위의 설정파일을 적용하여 실행시키기 위해서는 -f 옵션으로 설정파일을 지정해준다.

./bin/logstash -f ./config/logstash-test.conf

 

 

다음에는 다양한 필터들을 사용한 결과를 봐보자.

 

 

 

 

 

 

참고: 엘라스틱 스택 개발부터 운영까지 - 김준영, 정상운 저

'ELK > logstash' 카테고리의 다른 글

모니터링  (0) 2023.07.03
ELK - Logstash 1 : 로그스태시 output  (0) 2023.06.28
ELK - Logstash 1 : 로그스태시 filter  (0) 2023.06.22