본문 바로가기
ELK

[ELK] 설치 2) Logstash

by kyunb 2021. 12. 23.

Logstash란?

 - 다양한 소스로부터 데이터를 수집하고 곧바로 전환하여 원하는 대상에 전송할 수 있도록 하는 경량의 오픈 소스 서버측 데이터 처리 파이프라인


Logstash 설치

 

logstash tar 설치파일 다운로드

압축해제 

logstash또한 압축해제 만으로 설치가 완료 됐습니다.

 


 

Logstash 테스트

 

압축해제한 파일 내의 logstash/bin 디렉토리로 이동하여 아래와 같이 명령을 실행합니다.

 - ./logstash -e 'input { stdin { } } output { stdout {} }'

input { stdin { } } output { stdout {} } 의 뜻은 입력한대로 출력한다는 것입니다.

나중에는 tcp 통신을 통해 입력도 받고 필터를 사용하여 입력받은 데이터를 파싱하기도 하는데 지금은 정상작동 테스트만 진행하도록 하겠습니다.

 

약간의 시간이 소요된 이후에 마지막 Line에 'Pipelines running'이 출력되면 정상적으로 실행된 것입니다.

 

아무 문자나 입력해보도록 합니다.

"Hello My name is Lightvirus"를 입력하였고 입력한내용이 'message'필드에 출력되고 있으며, host와 시간정보가 출력되고 있습니다.


Logstash 파이프라인

logstash의 전체적인 파이프라인에는 Input, Filters, 그리고 Output이 존재합니다.

이 중에서는 Input, Output은 필수적인 요소 이며, 파싱 여부에 따라 filter는 선택적으로 사용이 가능합니다.

conf.d/custom.conf(logstash 설정 파일)

custom.conf의 파일명은 확장자를 제외하고 원하는 대로 설정한다. 

 

Input

현재는 운영중인 서버의 실시간 로그를 분석하는것이 아니라 샘플데이터를 이용해 테스트중이기 때문에 INPUT데이터의 형식이 위와 같습니다. 

 

(아래는 예시입니다.)

Filter

 - 엘라스틱에 전달하기 전에 원하는 데이터의 타입, 형태 등으로 필터렁/전처리 하는 과정

sample data가 csv파일이며, 각 field를 elasticsearch에서 사용가능 한 field로 변환

아래는 설명을 위한 예시입니다.

실제 사용하는 필터의 첫 번째 예제

1. [log][file][path] : 로그의 위치

 - 노출 로그를 정제하는 과정으로 log를 읽어오는 경로로 다른 로그와 구분해준다.

 

2. mutate의 gsub

 - 가장 상단에서 grok에 보낼 메시지를 미리 전처리할 작업이 있을 때 사용

 - 현재는 , 구분자를 | 로 변경하는 작업을 진행

 - 사용법 : mutate { gsub => [필드명, 원래 값, 변경할 값] }

 

3. grok 플러그인

 - 우선 읽어드린 로그는 message안에 담겨서 온다.

 - grok을 여러 번 사용하면, multiple grok을 적용할 수 있다.

   하나의 grok패턴에서 파싱이 안되면 message가 그대로 다음 grok으로 넘어오게 되고 재시도를 한다.

   다양한 예외상황이 있을 경우 이렇게 처리할 수 있다.

   하지만, 여러 개에 grok에 파싱이 되는 메시지의 경우 여러번 grok이 적용되는 문제도 발생하니 주의해서 사용하자.

 - 사용법 : grok { match => {"message" => [grok 정규표현식] }, removed_field => [지우고 싶은 필드명] }

 

4. date 플러그인

 - 엘라스틱에 데이터가 저장될 떄, 엘라스틱에 데이터를 보내는 시간이 아닌 실제 로그 파일에 적힌 시간으로 엘라스틱에 적재하기 위해 원하는 field로 재 설정을 해줘야 한다.

 - 사용법 : data { match => {변경할 필드명, 날짜 format}, target => "@timestamp", timezone=> "Asia/Seoul" }

 

5. mutate 플러그인

 - 위에서 설명한 gsub 외에도 다양한 기능이 존재

 - ealstic에 로그스테이시에서 파싱한 데이터가 넘어갈 경우, 필드의 타입을 변경해주어야 원하는 타입으로 데이터가 들어간다.

 - 데이터 타입을 변경하지 않고 적재하면 무조건 String으로 넘어간다.

 - 사용법 : mutate { convert => [ 변경할 필드명, 데이터 타입 ] }


 

실제 사용하는 필터의 두 번째 예제

1.  [log][file][path] : 로그의 위치

- 로그를 정제하는 과정으로 우선 log를 읽어오는 경로로 다른 로그와 구분해준다.

- 여기서는 로그 경로에 "access"가 포함되어 있으면 이곳에서 필터링이 된다

 

2. grok 패턴 적용

- 작성한 grok 패턴이 나의 로그에 잘 적용되는지 확인하기 위해서는 다양한 툴이 존재하지만, kibana에 존재하는 툴을 사용하면 좋다.

- 아래와 같이 Dev Tools > Grok Debugger 에서 sample data와 grok pattern을 입력하고 simulate 버튼을 누르면 작성한 grok 패턴이 잘 적용되는지를 미리 알 수 있다.

 

3. kv 필터 플러그인

- key "구분자" value 구조의 데이터를 분류하는데 특화되어있다.

- 여기서는 &? 구분자를 사용하여 nginx의 access param을 분리하는데 사용하였다.

- 사용 법 : filter { kv { source ⇒ 필드명, field_split ⇒ 구분자로 필드분리, value_split ⇒ 구분자로 key value 분리 } }

 

4. mutate 플러그인 

- 위에서 부터 자주 사용 된 플러그인으로 필드 삭제, 필드명 변경, 필드 추가 등 다양한 기능이 더 존재한다.

- 사용법 : filter { mutate { remove_field ⇒ 삭제할 필드, rename ⇒ 필드명 변경, add_field ⇒ 필드추가 } }

 

Output

 - logstash에서 전처리 한 데이터를 전송할 곳을 지정

[실제 사용 예시]

 - 여러개의 파일비트에서 하나의 Logstash로 보낼 경우, 파일에 따라 다른 인덱스명으로 엘라스틱에 적재를 해야하는 경우는 위와 같이 조건문을 사용하여 인덱스로 보내준다.

 

[출처] : https://ksr930.tistory.com/39

 

[ElasticStack] logstash 설치및 실행

Logstash 설치 이전에 쓴 logstash 설치및 실행 포스팅이 다소 부실하다고 생각되어서 리눅스 최초 설치시점 부터 좀더 자세하게 설명해보겠습니다. 우선 Logstash 설치를 하기전에 Java가 설치되있어야

ksr930.tistory.com

[출처] : https://soyoung-new-challenge.tistory.com/99

 

[Logstash] 로그스테이시 사용법 (설정파일) + Elastic

이번 포스팅은 로그 스테이시에서 사용하는 다양한 설정과 로그를 필터링하는 방법에 대한 내용입니다. Logstash란 로그 스테이시는 실시간 파이프라인 기능을 가진 데이터 수집 엔진 오픈소스이

soyoung-new-challenge.tistory.com

 

'ELK' 카테고리의 다른 글

[ELK] Logstash를 이용해 Elasticsearch csv파일 import  (0) 2022.03.07
[ELK] ELK 설치(Elasticsearch, Logstash, Kibana)  (0) 2022.02.11
[ELK] 개념 정리  (0) 2022.01.04
[ELK] 설치 3) Kibana  (0) 2021.12.23
[ELK] 설치 1) Elasticsearch  (0) 2021.12.22