초보 개발자의 스터디룸

[Logstash] 로그스태시란? 개요, 기능, 특징

justdoIT0730 2023. 1. 9. 10:01
728x90
728x90

1. Logstash 개요

 - ELK stack(Elasticsearch, Logstash, Kibana의 세 가지 프로젝트로 구성된 스택을 의미하는 약어) 중 하나

 - 데이터 수집과 가공기능을 제공하는 ETL(Extract(추출), Transform(변환), Load(적재)의 약어) Tool

 - 로그(비정형 데이터)를 수집 및 분석하고 시스템에서 인식 가능하도록 정제하는 작업에 용이

 - 데이터 수집 - 데이터 가공(Logstash) - 데이터 저장(ES) - 분석 및 시각화(Kibana)

 

2. Logstash의 기능

 2.1 Pipeline(파이프라인)

 

  - 비정형 데이터를 입력받아 실시간으로 변경하고 이를 타 시스템에 전달하는 역할 : Logstash의 핵심 부분

더보기

  - 비정형 데이터(Unstrctured data)란?

   미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 정리되지 않은 정보(예, file, http, tcp 등)

  - 자체적으로 내장되어 있는 메모리와 파일 기반의 Queue(큐)를 사용

  - 메모리는 휘발성이기 때문에 문제 발생 시 1회 전송을 보장하기 위한 별도의 큐 보유

  - 큐의 종류

Queue 설명
Memory Queue - 기본적으로 사용하는 큐
- 속도가 빠르고 용량이 적지만, 장애 발생 시 데이터가 유실됨
Persistent Queue - Disk 내부의 큐에 이벤트를 저장하여 시스템 장애 시 데이터 손실 방지 가능
- Memory 큐에 비해  처리 속도가 10% 정도 느리고, 용량이 큼
Dead letter Queue - 처리할 수 없는 이벤트에 대한 Disk 저장소를 제공하여 사용자가 이벤트 평가 가능

 

  - 입력(input, 필수 구성 요소), 필터(filter, 선택 요소), 출력(output, 필수 구성 요소) 순으로 구성

  - [파이프라인의 구성요소 상세]

 

  2.1.1 Input(입력)

   - 파이프라인의 가장 앞부분에 위치

   - 소스 원본으로부터 데이터를 입력받는 단계 : 직접 받을 수도 있지만, 서버를 열어서 받아들일 수도 있음

   - 자주 사용하는 입력 플러그인

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

 

  2.1.2 Filter(필터)

   - 비정형 데이터를 유의미한 정형화 데이터로 가공

   - 데이터 분석을 위한 구조를 잡아줌

   - 자주 사용하는 필터 플러그인

플러그인 설명
grok - grok 패턴을 사용해 메시지를 구조화된 형태로 분석
- grok 패턴은 일반적인 정규식과 유사
dissect - 간단한 패턴을 사용해 메시지를 구조화 된 현태로 분석
- grok에 비해 조금 낮은 자유도 /  빠른 처리 속도 제공 : 정규식 미사용
mutate 필드명을 변경, 문자열 처리 등 일반적인 가공 함수들을 제공
date 문자열을 지정한 패턴의 날짜형으로 분석

 

  2.1.3 Output(출력)

   - 파이프 라인의 입력과 필터를 거쳐 가공된 데이터를 지정한 대상으로 내보내는 단계

   - 자주 사용하는 출력 플러그인

플러그인 설명
elasticsearch bulk API를 사용해 엘라스틱서치에 인덱싱을 수행
file 지정한 파일의 새로운 줄에 데이터를 기록
kafka 카프카 토픽에 데이터를 기록

 

 2.2 Codec(코덱)

  - 입력/출력/필터와 달리 독립적으로 동작하지 않고 입력과 출력 과정에 사용되는 플러그인

  - 입/출력 시 메시지를 적절한 형태로 변환하는 스트림 필터

  - 자주 사용하는 코덱 플러그인 

플러그인 설명
json 입력 시 json 형태의 메시지를 객체로 읽어 들인다
plain 메시지를 단순 문자열로 읽어들인다 : 출력 시 원하는 포맷 지정 가능
rubydbug - 설정 테스트 및 파이프라인 설정 오류 디버깅 목적으로 사용
- Ruby 언어의 해시 형태로 이벤트 기록
- 입력 시엔 미사용

 

 2.3 다중 파이프라인

  - 하나의 로그스태시에서 여러 개의 파이프라인을 동작하는 방법

더보기

  - 하나에 서버에 존재하는 여러 로그를 하나의 Elasticsearch에 전송하는 방법

   1) 로그스태시를 여러 개 실행 : 독립적인 JVM 인스턴스이기 때문에 모니터링과 관리가 어려움

   2)  조건문을 두어 분리 : 필터 처리가 복잡

   3)  다중 파이프라인을 활용 : 하나의 로그 스태시에서 여러 개의 파이프라인을 동작 : 가장 용이하고 효율적

  -  기본적인 파이프라인 설정 yml

yml 설명
pipeline.id 파이프 라인의 고유ID
path.config 파이프 라인 설정 파일의 위치
pipline.workers 필터와 출력을 병렬로 처리하기 위한 워커 수
pipline.batch.size 입력 시 하나의 워커 당 이벤트를 동시 처리할 최대 개수
queue.type 파이프 라인에서 사용할 큐의 종류

 

 2.4 모니터링

  - 로그스태시가 제공하는 api

  - 9600 포트로 로그스태시가 제공하는 REST API 사용 가능

 

3. Logstash의 특징

 3.1 플러그인 기반

  - 로그스태시의 파이프라인을 구성하는 각 요소들은 전부 플러그인 형태로 제작

  - 플러그인 개발을 위한 프레임워크를 포함하고, 플로그인을 관리할 수 있는 기능도 제공

 

 3.1 모든 형태의 데이터 처리

  - 기본 제공되는 플러그인들의 조합만으로 대다수의 데이터 소스에서 JSON,XML 등의 구조화된 텍스트 뿐만 아니라 다양한 형태의 데이터를 입력받아 가공한 후 저장 가능

 

 3.1 성능

  - 자체적으로 내장되어 있는 메모리와 파일 기반의 큐를 사용하여 높은 처리속도와 안정성

  - 인덱싱할 도큐먼트의 수와 용량을 종합적으로 고려해 벌크 인덱싱을 수행

  - 파이프라인 배치 크기 조정을 통해 병목현상 방지 및 성능 최적화 가능

 

 3.1 안정성

  - ES의 장애 상황에 대응하기 위한 재시도 로직 내장

  - 발생 오류 도큐먼트 보관하는 데드 레터 큐 내장

 

 

[출처]

https://blog.naver.com/PostView.nhn?blogId=wideeyed&logNo=222153700165

https://velog.io/@fj2008/Logstash-%EB%9E%80#%ED%8C%8C%EC%9D%B4%ED%94%84-%EB%9D%BC%EC%9D%B8

https://aws.amazon.com/ko/opensearch-service/the-elk-stack/

https://leediz.tistory.com/7

https://cornswrold.tistory.com/568

728x90
728x90