땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • ㅗ
  • I
  • E
  • D
  • 이것이 리눅스다 with Rocky Linux9

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원

땅지원's Personal blog

[Elastic Stack] Grok Pattern에 대해
DevOps/ELK

[Elastic Stack] Grok Pattern에 대해

2024. 3. 8. 13:18

파이프라인

데이터를 입력받아 실시간으로 변경하고 이를 다른 시스템에 전달하는 역할

입력, 필터, 출력의 3가지 옵션으로 이루어져 있으며 필터에 다양한 옵션이 있는데 그 중 Grok pattern을 사용하는 법에 대해 정리해보려고 한다.

 

입력 플러그인은 file, syslog, kafka, jdbc 등의 플러그인으로 데이터를 받아온다.

필터 플러그인은 grok, dissect, mutate, date 등의 플러그인으로 데이터를 필터링 한다.

 

Grok Pattern - 예악어 활용

Grok은 정규 표현식을 이용해 문자열을 파싱할 수 있다. 자주 사용하는 정규 표현식들을 패턴화해뒀으며 패턴을 이용해

%{패턴명:변수명} 형태로 데이터에서 특정 필드를 파싱할 수 있다.

패턴명 설명
NUMBER 십진수를 인식한다. 부호와 소수점을 포함할 수 있다.
SPACE 스페이스, 탭 등 하나 이상의 공백을 인식한다.
URI URI를 인식한다. 프로토콜, 인증 정보, 호스트, 경로, 파라미터를 포함할 수 있다.
IP IP 주소를 인식한다. IPv4나 IPv6를 모두 인식할 수 있다.
SYSLOBASE 시스로그의 일반적인 포맷에서 타임스탬프, 중요도, 호스트, 프로세스 정보까지 메시지외의 헤더 부분을 인식한다.
TIMESTAMP_ISO86701 ISO8601 포맷의 타임스탬프를 인식한다. 2020-01-01T12:00:00+09:00과 같은 형태이며, 타임존까지 정확한 정보를 기록하고 로그에선 많이 쓰이는 날짜 포맷이기에 유용하다
DATA 이 패턴의 직전 패턴부터 다음 패턴 사이를 모두 인식한다. 특별히 인식하고자 하는 값의 유형을 신경 쓸 필요가 없으므로 특별히 값이 검증될 필요가 없다면 가장 많이 쓰이는 패턴 중 하나이다.
GREENYDATA DATA 타입과 동일하나, 표현식의 가장 뒤에 위치시킬 경우 해당 위치부터 이벤트의 끝까지를 값으로 인식한다.

 

- '[' , ']', '-', '.'과 같은 기호는 백슬래시(\)를 붙여 이스케이프 할 수 있다.

 

.*   .*?와 같은 표현은 왜 넣는걸까?

{%예약어:필드명} 이렇게 사용하면 무조껀 데이터를 매핑한다는건데 필요없는 데이터를 굳이 매핑하고 싶지 않을때도 있기 때문에 그냥 정규식으로 넘겨버릴때 사용한다.

 

Grok Pattern - 정규식 활용(?<field>REGEX)

Logstash 의 텍스트 파싱에 활용되는 주요 정규표현식은 다음과 같습니다.

\w 문자 하나를 나타내는 패턴 (word)
\w+ 문자 여러개
\d 숫자 하나를 나타내는 패턴 (digit)
\d+ 숫자 여러개
\s 공백 하나를 나타내는 패턴 (space)
\s+ 공백 여러개
\특수기호 특수기호를 나타내는 패턴 (\ 를 통해 Escape)

위의 SYNTAX 예시에 활용된 Sample Data 를 정규표현식을 활용하여 필드 추출 테스트를 진행하면

 

 

 

 

자세하고 더 많은 관련 패턴 설명은 아래 사이트를 참조한다.

elasticsearch/libs/grok/src/main/resources/patterns/legacy/grok-patterns at main · elastic/elasticsearch (github.com)

 

EX1) 

08 10:52:49.922 [INFO ] [tokenInfo] <141998> action=test action data, desc=신용카드빌링승인요청API, result={TEST result}

위처럼 입력으로 받은 데이터를 아래와 같은 Grok Pattern을 사용하여 데이터를 구조화 시키면 

%{NUMBER:day} %{TIME:time} \[%{LOGLEVEL:loglevel}.*\] \[%{DATA:token}\] <%{NUMBER:lognumber}> action=%{DATA:action}, desc=%{DATA:desc}, result=\{%{GREEDYDATA:result}\}

다음과 같은 구조화된 데이터가 만들어진다.

{
  "result": "TEST result",
  "lognumber": "141998",
  "loglevel": "INFO",
  "action": "test action data",
  "time": "10:52:49.922",
  "day": "08",
  "token": "tokenInfo",
  "desc": "신용카드빌링승인요청API"
}

 

 

EX2)

Mar  8 15:35:18 nmail02 postfix/qmgr[6555]: 3BBF9B74E: removed

 

%{SYSLOGTIMESTAMP:timestamp} %{DATA:host} %{DATA:dataset}/%{DATA:protocol}\[%{NUMBER:code}\]: %{GREEDYDATA:body}

 

'DevOps > ELK' 카테고리의 다른 글

[Elastic Stack] Elasticsearch Command line tools  (2) 2024.03.19
[Elastic Stack] Elasticsearch.yml 파일 세팅  (0) 2024.03.18
[Elastic Stack] Ingest Pipeline + processor  (0) 2024.03.14
[Elastic Stack] Fleet and Elastic Agent  (0) 2024.03.12
[Elastic Stack] 검색어 자동완성 구현(Spring Data Elasticsearch)  (0) 2023.05.04
    'DevOps/ELK' 카테고리의 다른 글
    • [Elastic Stack] Elasticsearch.yml 파일 세팅
    • [Elastic Stack] Ingest Pipeline + processor
    • [Elastic Stack] Fleet and Elastic Agent
    • [Elastic Stack] 검색어 자동완성 구현(Spring Data Elasticsearch)
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바