[Elastic Stack] Logstash Multi Grok Pattern 적용하기

허주환·2023년 3월 16일
0

Elastic Stack

목록 보기
2/6
post-thumbnail

0. Summary

Logstash에서 Grok Pattern을 적용해서 사용중에 있다.
그러다가 같은 log에서 UUID, MongoDB의 ObjectId 등을 Grok Pattern으로 걸러내고 싶은 경우가 생겨 여러 시도를 해본결과 Grok Pattern을 여러개 적용한 방법을 기록해볼려고 한다.

1. 이전 설정 파일

  • Spring Logback의 Log 패턴만 적용함
# ...

filter {
	grok {
    	match => {
        	"message" => "%{TIMESTAMP_ISO8601:timestamp} \[%{LOGLEVEL:logLevel}\s?\] %{DATA:method}:%{NUMBER:line} \- %{GREEDYDATA:msg}"
        }
    }
}

# ...

I, input

2023-03-16 12:43:29,528 [INFO ] com.test.service.Service.findTest:218 - ObejctId: 6bbdd18c24b0473d9a8cd983, uuid: 94600563-5af3-4f62-8a3b-b90bba92c79e

II, output

{
  "_index": "test-dev-log-2023.03.16",
  "_version": 1,
  "_score": 0,
  "message": "2023-03-16 12:43:29,528 [INFO ] com.test.service.Service.findTest:218 - ObejctId: 6bbdd18c24b0473d9a8cd983, uuid: 94600563-5af3-4f62-8a3b-b90bba92c79e",
  "timestamp": "2023-03-16 12:43:29,528",
  "logLevel": "INFO",
  "method": "com.test.service.Service.findTest",
  "line": 218,
  "msg": "ObejctId: 6bbdd18c24b0473d9a8cd983, uuid: 94600563-5af3-4f62-8a3b-b90bba92c79e"
},

기존 grok 패턴 하나일 때 output을 보면 걸러내고 싶던 objectIduuid가 인덱스에 적용안된 것을 확인 할 수 있다.

2. 수정한 설정 파일

  • Spring Logback의 Log 패턴 + UUID + MongoDB ObejctId
    • UUID 패턴은 grok patern reference에 이미 정의되어 있어 그대로 사용함
    • MongoDB Object 값은 소문자+숫자가 24자리수를 가진 값을 정규식으로 뽑아내어 사용함
# ...

filter {
	grok {
    	match => {
        	"message" => "%{UUID:uuid}"
		}
    }
    grok {
    	match => {
        	"message" => "(?<objectId>[a-z0-9]{24})"
        }
    }
	grok {
    	match => {
        	"message" => "%{TIMESTAMP_ISO8601:timestamp} \[%{LOGLEVEL:logLevel}\s?\] %{DATA:method}:%{NUMBER:line} \- %{GREEDYDATA:msg}"
        }
    }
}

# ...

I, input

2023-03-16 12:43:29,528 [INFO ] com.test.service.Service.findTest:218 - ObejctId: 6bbdd18c24b0473d9a8cd983, uuid: 94600563-5af3-4f62-8a3b-b90bba92c79e

II, output

{
  "_index": "test-dev-log-2023.03.16",
  "_version": 1,
  "_score": 0,
  "message": "2023-03-16 12:43:29,528 [INFO ] com.test.service.Service.findTest:218 - ObejctId: 6bbdd18c24b0473d9a8cd983, uuid: 94600563-5af3-4f62-8a3b-b90bba92c79e",
  "timestamp": "2023-03-16 12:43:29,528",
  "logLevel": "INFO",
  "method": "com.test.service.Service.findTest",
  "line": 218,
  "msg": "ObejctId: 6bbdd18c24b0473d9a8cd983, uuid: 94600563-5af3-4f62-8a3b-b90bba92c79e",
  "obejctId": "6bbdd18c24b0473d9a8cd983",
  "uuid": "94600563-5af3-4f62-8a3b-b90bba92c79e"
},

여러 grok 패턴을 적용했을 때 objectIduuid가 인덱스에 적용된 것을 볼 수 있다.
따라서 하나의 로그에서 여러 다른 패턴을 적용하기 싶으면 위와 같이 사용하면 됩니다.

3. Reference

  • Grok Pattern Reference (링크)
profile
Junior BE Developer

0개의 댓글