본문 바로가기
Engineering WIKI/Docs

로그스태시 개념 뿌수기

by wonos 2023. 10. 19.

로그는 시스템이나 애플리케이션 상태 및 행위와 관련된 풍부한 정보를 포함.
일반적으로 로그를 처리하려면 필요한 정보를 수집하고 추출, 분석하는 과정이 필요
로그스태시는 주로 ETL(Extract, Transform, Load) 엔진으로 사용
로그 = 타임스탬프 + 데이터
로그스태시는 오픈소스 데이터 수집 엔진으로, 실시간 파이프라인 기능을 갖춤
로그스태시 핵심 특징

  1. 플러그형 데이터 파이프라인 아키텍처 : 플러그인은 데이터 처리를 위한 파이프라인 구축에 있어 다양한 입력, 필터, 출력을 혼합, 일치, 조율하는 데 사용
  2. 확장성 : JRuby 언어로 작성된 로그스태시는 플러그형 파이프라인 아키텍처를 지원하므로 사용자 요구 사항에 따라 맞춤형 플러그인을 손쉽게 구축
  3. 중앙 집중형 데이터 처리 : 로그스태시가 제공하는 여러 입력 플러그인을 사용해 서로 다른 자원에 위치한 데이터를 손쉽게 가져온 후, 데이터를 가공하고 변환해 다른 목적지로 보낼 수 있다.
  4. 다양성 및 볼륨 : 아파치 또는 엔진엑스 로그, 시스템 로그, 윈도우 이벤트 로그와 같이 모든 로그 타입을 처리할 수 있으며, TCP와 UDP를 기반으로 다양한 애플리케이션 플랫폼에서 로그를 수집할 수 있다. 기존의 관계형 데이터베이스와 NoSQL, Kafka, RabbitMQ 등 여러 큐에서 소비하는 데이터를 지원

로그스태시의 파이프라인은 입력, 필터, 출력이라는 세가지 구성요소로 이뤄진다. 입력과 출력은 필수이며, 필터는 옵션이다. 입력은 소스로부터 데이터를 받아들이는 모듈, 필터는 입력으로 들어오는 데이터를 원하는 형태로 가공하는 모듈, 출력은 데이터를 외부로 전달하는 모듈이다.
로그스태시는 기본적으로 파이프라인 단계(입력 → 필터, 필터 → 출력)마다 이벤트를 버퍼에 담기 위해 인메모리 바운드 큐를 사용.
(불안정한 상태로 종료되면 인메모리에 저장된 이벤트는 손실. 데이터 손실 방지를 위해 영구 큐를 사용해 실행중인 이벤트를 디스크에 유지할 수 있음)
(영구 큐는 ‘로그스태시 설치경로/config’ 디렉터리 아래에 있는 logstash.yml 파일에서 queue.type: persisted 속성을 설정하면 활성화 할 수 있다.)
(기본적으로 로그스태시의 힙 크기는 1GB를 사용하므로 ‘로그스태시 설치경로/config’ 디렉터리 아래에 있는 jvm.options 파일에서 Xms와 Xmx 속성을 사용해 변경)

입력 (Input)

로그스태시의 입력은 file, syslog, kafka, jdbc에서 입력을 받게 된다.
입력 플러그인 설명

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

필터(Filter)

필터는 받은 데이터를 의미 있는 데이터로 구조화하는 역할을 한다. 즉, 비정형 데이터를 정형화하고 데이터 분석을 위한 구조를 잡아준다.
필터 플러그인 설명

grokgrok 패턴을 사용해 메시지를 구조화된 형태로 분석한다. grok 패턴은 일반적인 정규식과 유사하나, 추가적으로 미리 정의된 패턴이나 필드 이름 설정, 데이터 타입 정의 등을 도와준다.
dissect간단한 패턴을 사용해 메시지를 구조화된 형태로 분석한다. 정규식을 사용하지 않아 grok에 비해 자유도는 조금 떨어지지만 더 빠른 처리가 가능하다.
mutate필드명을 변경하거나 문자열을 처리 등 일반적인 가공 함수들을 제공한다.
date문자열을 지정한 패턴의 날짜형으로 분석한다.
Geoip로그 정보를 강화 하는데, 사용 IP주소 있을때 Geoip 필터를 활요해 IP 주소의 위치 정보 추가 가능

출력(Output)

출력은 파이프라인의 입력과 필터를 거쳐 가공된 데이터를 지정한 대상으로 내보내는 단계다. 파이프라인의 마지막 단계이다.
출력 플러그인 설명

elasticsearch가장 많이 사용되는 출력 플러그인으로, bulk API를 사용해 엘라스틱서치에 인덱스을 수행한다.
file지정한 파일의 새로운 줄에 데이터를 기록한다.
kafka카프카 토픽에 데이터를 기록한다.

코덱 플러그인 : 로그스태시에 나가고 들어오는 이벤트를 인코딩하거나 디코딩하는 데 사용
로그스태시 실행 시 -r 옵션을 지정하면 설정을 변경하고 저장할 때마다 자동으로 환경 설정 파일을 다시 로드.