logstash grok pattern

2021. 3. 24. 03:34 Elastic Stack/logstash

grok은 비정형 데이터를 파싱하여 정형데이터로 만드는 라이브러리다. key/value형태로 적재된다. 골때리는건 정규표현식쓰는 방법이 독특하다는 거다..

 

참조문서 : https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html

1. 기본문법

%{SYNTAX:SEMANTIC}

  • SYNTAX = 텍스트와 일치하는 패턴의 이름
  • SEMANTIC = 식별자

(ex)

  %{NUMBER:duration} %{IP:client}
  
  (필터링) 
  SEMANTIC SYNTAX
  식별자 텍스트

  (결과)
  버전 3.44
  클라이언트 1.1.1.1

 

2. 기존 패턴 라이브러리

https://github.com/elastic/logstash/blob/v1.4.0/patterns/grok-patterns

3. 사용자 정의 패턴

3-1. 정의

logstash-5.4.0/patterns에 파일을 하나 만들고 여기서 기존 grok-pattern들 처럼 사용자가 정의해주고 임포트해주면 된다. (디렉터리명과 파일명은 아무 상관이 없다)

ex.

POSTFIX_QUEUEID [0-9A-F]{10,11}

3-2. 사용자패턴 만든거 사용할 때

grok {
    patterns_dir => ["./patterns"]
}

테스트

  • log : 127.0.0.1 - - [29/May/2017:05:08:09 +0900] "GET /index HTTP/1.1" 200 1272
  • 패턴 : ^%{IPORHOST:clientip} (?:-|%{USER:ident}) (?:-|%{USER:auth}) [%{HTTPDATE:timestamp}] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|-)" %{NUMBER:response} (?:-|%{NUMBER:bytes})
  • 코드
  input {
  	stdin { }
  }
  
  filter {
  	grok {
  		patterns_dir => ["./patterns"]
      	match => { "message" => "%{TEST}" }
    	}
  }
  
  output {
          stdout {
                  codec => rubydebug { }
          }
  }
  • 결과

4. 웹 디버거

  1. https://grokdebug.herokuapp.com/
  2. http://grokconstructor.appspot.com/do/match



출처: https://sjh836.tistory.com/69?category=680973 [빨간색코딩]

'Elastic Stack > logstash' 카테고리의 다른 글

logstash 5.4 설치  (0) 2021.03.24