2017년 6월 18일 일요일

Logstash 필터 grok

데이터를 원본 상태 그대로 분석할 수만 있다면 참 좋겠지만 안타깝게도 그런 경우는 거의 없다. - 데이터 분석이 쉬워지는 정규표현식 (40페이지)

그래서 엘라스틱은 분석에 유용한 형태로 로그를 가공할 수 있는 정말 다양한 필터 플러그인을 제공한다. 그중 가장 빈번하게 사용되는 필터가 grok. 해당 필터는 정규표현식을 이용해서 원하는 데이터 영역만을 추출하는 기능을 제공한다.

가령 '출발지 IP는 1.2.3.4입니다'란 정보로 채워진 'message' 필드에서 IP 정보만을 추출하고 싶다면 다음과 같은 필터식을 작성하면 됨.
filter {
  grok {
    match => { "message" => ".+%{IP:client}.+" }
  }
}

grok 필터는 미리 정의된 다양한 정규표현식 패턴을 제공한다. 아래 구문은 'IP' grok 패턴과 일치하는 문자열을 추출한 후, 'client'란 필드로 저장한다는 의미.


사전 정의된 grok 패턴

사전 정의된 패턴명이 어떤 의미인지, 나름 이해하기 쉽게 지어졌기 때문에 정규표현식에 대한 이해가 있다면 원하는 grok 패턴을 찾는 데 큰 무리는 없을 듯하며, 매번 찾아서 사용하기 귀찮다면 직접 만들어 쓸 수도 있다.

다음은 IP 영역만을 추출해서 'client' 필드로 저장하는 사용자 정의 grok 필터식.
filter {
  grok {
    match => { "message" => ".+(?<client>\d+\.\d+\.\d+\.\d).+" }
  }
}


검사 결과를 별도로 저장하는 캡쳐 그룹에 이름을 준 후, 그 이름으로 저장 결과를 불러오는 기능을 이용해서 필드(녹색 영역)를 추출하는 방식.

메시지 전체를 검사하는 정규표현식
추출을 원하는 영역에 캡쳐 그룹 적용
캡쳐 그룹에 이름 지정

관련 글

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스