본문 바로가기

빅데이터

[Fluentbit] Fluentbit에서 지원하는 Parser 모두 알아보기!

728x90
반응형

Fluent Bit에서 사용되는 파서(parser)는 로그 데이터를 특정 형식으로 변환하여 처리할 수 있도록 도와줍니다. 다양한 파서 종류와 각 파서의 특징을 표로 정리해 보겠습니다.

구분 내용 사용 예시
Configuring 
Parser
사전 구성된 구문 분석기 세트를 제공합니다. 
  • Apache
  • Nginx
  • Docker
  • Syslog rfc5424
  • Syslog rfc3164
아래와 같이 parsers.conf 파일에 사전 정의되어 있기 때문에 사용자는 parser name으로 사용하시면 됩니다.

[PARSER]
    Name        docker
    Format      json
    Time_Key    time
    Time_Format %Y-%m-%dT%H:%M:%S.%L
    Time_Keep   On

[PARSER]
    Name        syslog-rfc5424
    Format      regex
    Regex       ^\ .... <생>
    Time_Key    time
    Time_Format %Y-%m-%dT%H:%M:%S.%L
    Time_Keep   On
    Types pid:integer

[SERVICE]
    Parsers_File /path/to/parsers.conf

[INPUT]
    Name dummy
    Tag  dummy.data
    Dummy {"data":"100 0.5 true This is example"}

[FILTER]
    Name parser
    Match dummy.*
    Key_Name data
    Parser docker

[OUTPUT]
    Name stdout
    Match *
JSON JSON 파서는 가장 간단한 옵션으로, 원본 로그 소스가 JSON 맵 문자열인 경우 그 구조를 가져와 내부 바이너리 표현으로 직접 변환합니다. [PARSER]
    Name        docker
    Format      json
    Time_Key    time
    Time_Format %Y-%m-%dT%H:%M:%S %z
Regular
Experession
정규식 구문 분석기를 사용하면 네임드 캡처 기능을 사용하여 어떤 콘텐츠가 어떤 키 이름에 속하는지 정의하는 사용자 지정 루비 정규식을 정의할 수 있습니다. [PARSER]
    Name   apache
    Format regex
    Regex  ^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$
    Time_Key time
    Time_Format %d/%b/%Y:%H:%M:%S %z
    Types code:integer size:integer
LTSV ltsv 파서를 사용하면 LTSV 형식의 텍스트를 구문 분석할 수 있습니다.

레이블이 지정된 탭으로 구분된 값(LTSV 형식은 탭으로 구분된 값(TSV)의 변형입니다. LTSV 파일의 각 레코드는 한 줄로 표시됩니다. 각 필드는 탭으로 구분되며 레이블과 값이 있습니다. 레이블과 값은 ':'로 구분되어 있습니다.

ex) host:127.0.0.1  ident:- user:-  time:[10/Jul/2018:13:27:05 +0200]       req:GET / HTTP/1.1      status:200      size:16218      referer:http://127.0.0.1/       ua:Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0
[PARSER]
    Name        access_log_ltsv
    Format      ltsv
    Time_Key    time
    Time_Format [%d/%b/%Y:%H:%M:%S %z]
    Types       status:integer size:integer
Logfmt logfmt 파서를 사용하면 https://brandur.org/logfmt 에 설명된 logfmt 형식을 구문 분석할 수 있습니다. 보다 공식적인 설명은 https://godoc.org/github.com/kr/logfmt 에 있습니다.

ex) key1=val1 key2=val2 key3
[PARSER]
    Name        logfmt
    Format      logfmt
    Logfmt_No_Bare_Keys true
Decoders 구문 분석 중인 로그 메시지에 인코딩된 데이터가 포함되어 있는 경우가 있는데, 일반적인 사용 사례는 Docker를 사용하는 컨테이너화된 환경에서 찾을 수 있습니다. 애플리케이션이 JSON 형식으로 데이터를 기록하지만 이스케이프된 문자열이 되는 경우, 고려하십시오.

ex) {"log":"{\"status\": \"up and running\"}\r\n","stream":"stdout","time":"2018-03-09T01:01:44.851160855Z"}
[PARSER]
    Name         docker
    Format       json
    Time_Key     time
    Time_Format  %Y-%m-%dT%H:%M:%S.%L
    Time_Keep    On
    # Command       |  Decoder  | Field | Optional Action   |
    # ==============|===========|=======|===================|
    Decode_Field_As    escaped     log


Decoders
1. json : 필드 콘텐츠를 JSON 맵으로 처리합니다. JSON 맵을 찾으면 콘텐츠를 구조화된 맵으로 바꿉니다.
2. escaped : 이스케이프 문자열을 디코딩합니다.
3. escaped_utf8 : UTF8 이스케이프 문자열을 디코딩합니다.

 

728x90
반응형