본문 바로가기

APM

Grok Pattern으로 Log Parsing 후 APM에 연동

1.파싱할 Log 원본을 확인

Sep 19 03:59:41 whatap-multi kernel: [5529208.441433] systemd-journald[405]: /var/log/journal/545ff0c185f846ec98f5f370bec3cb05/system.journal: Journal header limits reached or header out-of-date, rotating.

 

 

와탭 로그뷰어에서 해당 로그를 조회했을 , 기본태그인 file, pcode, oname, category 외에 로그 본문에서 분류가 필요한 항목이 있다면, Grok 패턴으로 파싱하여 커스텀 태그를 추가할 있습니다.

예시에서는 로그 본문 순서대로 timestamp, hostname, logtype, processname, pid 태그를 추가하겠습니다.

 

2.기본 Grok 패턴 작성

%{preset:key} 형식으로 작성합니다. 기본 뼈대는 gpt 질의하여 작성할 있습니다.

 

 

3.Grok 패턴 테스트

Grok Debugger: https://grokdebugger.com/

 

문법에 오류가 있을 Output null 출력되기 때문에 패턴씩 떼어 테스트합니다.

 

 

 

가장 부분인 timestamp 정상적으로 출력됩니다. 다음 tag host 패턴을 붙여보겠습니다.

 

 

 

Output 정상 출력되었으나 host whatap-multi 대신 whatap 저장되었습니다. 이는 WORD 프리셋이 특수문자를 포함하지 않기 때문입니다.

WORD -> DATA 수정해보겠습니다.

추가로, 블록의 시작과 끝을 인식시키기 위해 %{DATA:host} 앞뒤로 공백기호 \s 추가합니다.

 

 

 

host: whatap-multi 정상 인식되었습니다.

 

첫번째 블록의 timestamp 문자열 사이에 공백이 있음에도 정상인식이 가능한 이유는 Grok 패턴에 'SYSLOGTIMESTAMP'라는 프리셋이 정규식으로 선언되어 있기 때문입니다.

Grok Pattern Repository: https://github.com/cjslack/grok-debugger/blob/master/public/patterns/grok-patterns

 

 

4.3번째 tag: logtype 패턴에 추가

 

주의) kernel: 콜론은 특수문자이므로 Grok패턴에서 이스케이핑(\) 추가합니다.

 

 

5.버릴 문자열 처리

 

 

logtype 뒤의 [5529208 .441433] 사용하지 않을 문자열입니다.

%{preset:key} 형태에서 key 제외한 %{preset} 작성하면 해당 문자열은 버려집니다. 앞뒤의 대괄호는 특수문자이므로 이스케이핑을 추가하고 공백기호 \s 추가합니다.

 

 

6.나머지 패턴 추가

 

 

같은 요령으로 나머지 패턴을 추가합니다.

GREEDYDATA 프리셋은 공백 포함 문자열이 끝나는 부분까지를 뜻합니다.

 

 

 

7.ui에서 Grok 패턴 추가

 

 

 

 

 

 

 

파서 시뮬레이션에 로그 원문과 Grok 패턴을 입력 시뮬레이션결과에 모든 블록이 ok 뜨면 정상입니다.

 

 

 

패턴 추가 저장버튼까지 눌러야 정상 적용됩니다.

 

 

 

 

로그가 추가되면 새롭게 등록한 tag 붙어서 출력되는것을 확인해 있습니다.

 

 

'APM' 카테고리의 다른 글

Grok패턴 파싱 예제  (0) 2023.09.21
원시적인 시계열 데이터 만들기  (0) 2022.05.30