본문 바로가기
BIG-DATA/LOGSTASH

[LOGSTASH] 무작정 시작하기 (2) - filter

by 허도치 2019. 11. 26.

2019/11/26 - [전체글] - [LOGSTASH] 무작정 시작하기 (1) - 설치 & 실행

 

 

  지난 포스트에서 Logstash를 설치하고 간단하게 input과 output을 설정하여 실행까지 해보았다. 이번 포스트에서는 분석, 변환 단계인 filter에 대해서 알아보고 자주 사용하는 라이브러리들을 위주로 직접 활용해보도록 하겠다.

  아무래도 실제 로그 데이터를 활용하여 진행하는 것이 이해하기가 수월할 것으로 판단되어, Chrome 브라우저의 로그를 file input plugin으로 읽어서 처리하도록 하겠다.

 

 

 

1. filter란?

   1-1. input으로 집계한 데이터를 분석하고 변환하는 단계로 Logstash의 핵심.

   1-2. grok, ruby, mutate 등 다양한 라이브러리를 지원.

 

 

2. Chrome 브라우저 로그 생성.

   2-1. Chrome Debug 모드 실행.

1
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --enable-logging --v=1 --user-data-dir=C:\work\chrome
cs

         - 위와 같이 실행하면 [ C:\work\chrome\chrome_debug.log ] 로그 파일이 생성됨.

         - 참고: 2019/11/25 - [BIG-DATA/FILEBEAT] - [FILEBEAT] 무작정 시작하기 (2) - Multiline

 

 

3. 로그 분석.

   3-1. 로그 확인. 

         - 처음에 일정한 패턴으로 시간처럼 보여지는 텍스트가 확인되지만 복잡하므로 무시.

         - 세미콜론(:)으로 텍스트를 구분하고 두번째로 Log Level이 확인됨.

         - 이후 뒤에 나오는 텍스트는 패턴이 명확하지 않으므로 무시하기로 함.

 

   3-2. 로그 변환.

         - Log Level을 Field로 추출하여 Log Level별로 Output을 지정.

 

 

4. 실행환경 설정.

   4-1. [ ./conf.d/logstash.conf ] 작성.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
input {
  file {
    path => "C:/work/chrome/chrome_debug.log"
    start_position => "beginning"
    stat_interval => 5
    sincedb_write_interval => 5
    sincedb_path => "C:/work/logstash-7.3.1/data/plugins/inputs/file/chrome_log.sincedb"
  }
}
 
filter {
  grok {
    match => { "message" => "^(?<log_time>\[\d+:\d+:\d+[/]\d+[.]\d+)[:](?<log_level>\w+)[:].+" }
  }
  if [log_level] == "INFO" {
    ruby {
      code => "event.set('message', event.get('message') + 10.chr)"
    }
  }
  mutate {
    lowercase => [ "log_level" ]
  }
}
 
output {
  if [log_level] {
    file {
      path => "C:/work/logstash-7.3.1/data/plugins/outputs/file/%{log_level}.log"
      codec => plain {
        format => "%{message}\n"
      }
    }
  }
  else {
    file {
      path => "C:/work/logstash-7.3.1/data/plugins/outputs/file/etc.log"
    }
  }
}
cs

 

   4-2. File Input Plugin.

         - 파일을 모니터링할 때 사용되는 Plugin.

         - [ path ]: 모니터링할 파일 지정, Windows도 경로를 역슬래쉬( \ )가 아니라 슬래쉬( / )로 구분해야함.

         - [ start_position ]: 시작할 때 데이터를 읽을 Offset 위치, default 'end'.

         - [ stat_interval ]: 대상 파일에 신규 추가된 데이터가 있는지 확인하는 주기, default '1'.

         - [ sincedb_path ]: *sincedb 파일 위치 지정.

         - [ sincedb_write_interval ]: 최종 작업 이력 저장 주기, 주기가 길면 데이터 유실율이 높아짐. default '15'.

           *sincedb는 최종 작업 이력을 남기는 파일로써 작업 시간, 파일, Offset 위치 등이 기록됨.

         - 옵션에 대한 자세한 설명은 공식 문서 참조.

 

File input plugin | Logstash Reference [7.4] | Elastic

Discovering new files and checking whether they have grown/or shrunk occurs in a loop. This loop will sleep for stat_interval seconds before looping again. However, if files have grown, the new content is read and lines are enqueued. Reading and enqueuing

www.elastic.co

 

   4-3. Grok Filter Plugin.

         - 비정형화된 데이터를 분석하여 정형화할 때 사용되는 Plugin.

         - [ patterns_dir ]: 패턴이 정의 되어 있는 파일을 담고 있는 폴더 경로.

         - [ match ]: *Field에서 패턴에 맞는 데이터를 탐색하고 Field로 추출. { match => { 필드명 => *패턴 } }

           *Field는 Logstash에서 사용되는 변수의 개념.

           *패턴은 두가지 형식을 제공.

           *패턴1: (?<필드명>정규표현식)으로 정규표현식에 match되는 데이터를 필드에 저장.

           *패턴2: %{패턴명:필드명}으로 기본 패턴 및 Custom 패턴에 match되는 데이터를 필드에 저장.

         - 기본 패턴은 약 120개 정도 제공되며, [ patterns_dir ]에 Custom 패턴을 생성하여 사용 가능.

 

elastic/logstash

Logstash - transport and process your logs, events, or other data - elastic/logstash

github.com

 

   4-4. Ruby Filter Plugin.

         - Ruby 언어를 이용해서 Field를 컨트롤 할 수 있음.

         - [ code ]: inline 스크립트로 스크립트를 바로 실행. { code => 스크립트 }

         - [ path  ]: 실행할 ruby 스크립트 파일. { path => 파일위치 }

         - [ script_params ]: 실행할 스크립트의 Parameters. { Param명 => 값 }

         - 옵션에 대한 자세한 설명은 공식 문서 참조.

 

Ruby filter plugin | Logstash Reference [7.4] | Elastic

Value type is stringThere is no default value for this setting. Add a unique ID to the plugin configuration. If no ID is specified, Logstash will generate one. It is strongly recommended to set this ID in your configuration. This is particularly useful whe

www.elastic.co

 

 

   4-5. Mutate Filter Plugin.

         - Field의 값을 변경할 때 주로 사용되는 Plugin.

         - [ lowercase ]: Field의 값을 소문자로 치환. { lowercase => [ 필드명, ... ] }

         - [ uppercase ]: Field의 값을 대문자로 치환. { uppercase => [ 필드명, ... ] }

         - [ update ]: Field의 값을 변경, { update => { 필드명 => 데이터 } }

         - [ gsub ]: Field의 값을 패턴으로 탐색하고 변경, { gsub => [ 필드명1, 패턴1, 변경값1, 필드명2, ...  ] }

         - [ add_field ]: Field를 추가, { add_field => { 필드명 => 데이터 } }

         - [ remove_field ]: Field를 삭제, { remove_field => [ 필드명, ... ] }

         - 옵션에 대한 자세한 설명은 공식 문서 참조.

 

Mutate filter plugin | Logstash Reference [7.4] | Elastic

Value type is stringThere is no default value for this setting. Add a unique ID to the plugin configuration. If no ID is specified, Logstash will generate one. It is strongly recommended to set this ID in your configuration. This is particularly useful whe

www.elastic.co

 

   4-6. File Output Puglin.

         - 분석, 변환된 데이터를 파일로 내보내는 Plugin.

         - [ path ]: 내보낼 파일의 경로, 예제에서는 추출한 [ log_level ]로 파일을 구분하여 저장.

         - [ codec ]: 데이터를 인코딩하는 방식이며 format으로 특정 데이터만 추출 가능. default 'json_line'

         - 옵션에 대한 자세한 설명은 공식 문서 참조.

 

File output plugin | Logstash Reference [7.4] | Elastic

Value type is stringThere is no default value for this setting. Add a unique ID to the plugin configuration. If no ID is specified, Logstash will generate one. It is strongly recommended to set this ID in your configuration. This is particularly useful whe

www.elastic.co

 

5. 실행.

   5-1. [ logstash_start.bat ] 실행.

실행결과

         - 파일이 Opening, Closing 되면서 로그가 쌓이는 것이 확인됨.

 

    5-2. 파일 생성 확인.

         - 추출한 [ log_level ]로 파일명이 생성됨.

 

 

 

  지금까지 Logstash에서 File Input Plugin으로 Chrome Debug 로그를 모니터링하고, Grok, Mutate Filter Plugin으로 분석, 변환하여 File Output Plugin으로 결과값을 저장하여 보았다. 예제로는 하나의 파일을 읽어서 간단하게 처리하였지만, 여러개의 파일을 읽을 수도 있고 동시에 Filebeat이나 Kafka와 같은 Producer로부터 데이터를 얻을 수도 있다. 수집한 로그가 많아질수록 Filter의 역할이 중요해질 것이다.

  다음 포스트에서는 Beat Input Plugin을 사용하여 Filebeat에서 보내주는 로그를 수집하고 Kafka Ouput Plugin을 사용하여 Kafka에 적재해볼 예정이다. Filebeat과 Kafka를 반드시 선행학습 해야한다.

 

 

# Filebeat

2019/11/25 - [BIG-DATA/FILEBEAT] - [FILEBEAT] 무작정 시작하기 (1) - 설치 및 실행

 

# Kafka

2019/11/19 - [BIG-DATA/KAFKA] - [KAFKA] 무작정 시작하기 (1) - 설치 & 실행

댓글