로그스태시

xellos·2023년 8월 14일
0

ELK

목록 보기
3/4

소개

로그스태시는 플러그인 기반의 오픈소스 데이터 처리 파이프라인 도구다.

여기서 파이프라인이란, 데이터를 수집 -> 가공 -> 전송 하는 일련의 과정을 의미한다. 이러한 다소 복잡하고 귀찮은 데이터 전처리 과정을 별도의 애플리케이션 작성없이 비교적 간단한 설정만으로 수행할 수 있다.

파이프라인

로그스태시의 가장 중요한 부분은 파이프라인이다. 파이프라인은 데이터를 입력받아 실시간으로 변경하고 이를 다른 시스템에 전달하는 역할을 하는 로그스태시의 핵심기능이다. 파이프라인은 입력, 필터, 출력이라는 세 가지 구성요소로 이루어진다.

입력과 출력은 필수 구성요소이고, 필터는 옵션이다.

1) 파이프라인 실행 순서

  • 파이프라인 기본 템플릿
input {
	{ 입력 플러그인 }
}

filter {
	{ 필터 플러그인 }	
}

output {
	{ 출력 플러그인 }
}

2) 입력

파이프라인의 가장 앞부분에 위치하며 소스 원본으로부터 데이터를 입력받는 단계다. 직접 대상에 접근해 읽어들이는 경우도 있지만, 서버를 열어놓고 받아들이는 형태의 구성도 가능하다. 로그스태시는 다양한 형태의 데이터를 인식할 수 있고, 이를 쉽게 처리하기 위해 다양한 입력 플러그인들이 존재한다.

예를 들어 특정 파일은 플러그인을, 실시간 트윗을 트위터 플러그인을 통해 가져올 수 있다.

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

  • 플러그인 추가 예제
    • file 플러그인
      • path: 특정 경로에 있는 파일을 읽어온다.
      • start_position: 어느 지점부터 읽을지 결정한다.
input {
  file {
    path => "/Users/xellos/Desktop/elasticsearch-7.10.1/logs/elasticsearch.log"
    start_position => "beginning"
  }
}

3) 필터

입력 플러그인이 받은 데이터를 의미있는 데이터로 구조화하는 역할을 한다. 필수 구성요소가 아니라서 필터 없이 파이프라인을 구성할 수 있지만, 필터없는 파이프라인은 그 기능을 온전히 발휘하기 힘들다.

일반적으로 사용하는 필터 플러그인 종류


예제: 로그를 공백(띄어쓰기) 기준으로 나누는 필터

  • 예제 내용
[2020-01-02 14:17] [ID1] 192.10.2.6 9500 [INFO] - connected.

  • 필터 적용: 문장을 공백으로 잘라 배열화한다.
filter {
  mutate {
    split => { "message" => " " }
  }
}

  • 결과
{
  ...
  "message" => [
        [0] "[2020-01-02",
        [1] "14:17]",
        [2] "[ID1]",
        [3] "192.10.2.6",
        [4] "9500",
        [5] "[INFO]",
        [6] "-",
        [7] "connected."
    ],
  ...
}

4) 출력

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

자주 사용하는 플러그인

예제

  • file: 가공한 데이터를 파일의 형태로 지정된 경로에 저장한다.
  • elasticsearch: 가공한 데이터를 엘라스틱 서치에 전송한다.
output {
  file {
    path => "/Users/xellos/Desktop/logstash-7.10.1/config/output.json"
  }
  elasticsearch {
    index => "output"
  }
}

코덱

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

즉, 입﹒출력시 메세지를 적절한 형태로 변환하는 스트림이다.

1) 코덱의 구성

2) 코덱 플러그인

3) 예제

  • 아래는 입력 플러그인에 JSON 코덱을 사용하는 예제이다.
  • 설정 구조를 보면 특정 입력플러그인 (여기서는 file 플러그인) 내부에 종속적으로 붙어있는 것을 확인할 수 있다.
  • 파일의 형태가 JSON 형태의 문자열 구조가 아니라면 예외가 발생한다.
input {
  file  {
    path => "/Users/zeros/Desktop/logstash-7.10.1/config/filter-example.log"
    start_position => "beginning"
    codec => "json"
  }
}

0개의 댓글