준호씨의 블로그

logstash array 내용 중 이메일만 추출하기 본문

개발이야기

logstash array 내용 중 이메일만 추출하기

준호씨 2016. 5. 29. 23:06
반응형

logstash 에서 value 내용 중 이메일만 추출하는건 grok filter 에서 match %{EMAILADDRESS} 를 이용하면 추출 해 낼 수 있다.
하지만 특정항목을 이미 array 로 분리 해 낸 상태에서 해당 array 값들 중 email 만 추출 해 내는 방법을 딱히 찾지 못하였다.

하지만 ruby filter 로 ruby 언어로 직접 코딩 하면 가능하다.

예를 들어 아래와 같이 array 에 이메일 정보가 들어가 있는데 순수하게 이메일 주소만 있는 것이 아니라 이름정보나 꺽쇠기호 같은게 섞여 있는 경우 순수이메일주소만 추출하고자 한다.
array1 = ['"test1" <testaddress1@daum.net>', 'testaddress1@gmail.com']
array2 = ['"test2" <testaddress2@daum.net>', 'testaddress2@gmail.com']
array3 = ['"test3" <testaddress3@daum.net>', 'testaddress3@gmail.com']

아래와 같이 ruby filter 로 구현하면 된다.
filter {
    ruby {
        code => "
            r = Regexp.new(/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/i)
            event['array1'].map! { |x| x.scan(r)[0] }
            event['array2'].map! { |x| x.scan(r)[0] }
            event['array3'].map! { |x| x.scan(r)[0] }
        "
    }
}
map 을 이용하면 손쉽게 array 에 접근해서 개별 데이터에 접근 할 수 있게 된다. map! 를 적는 이유는 결과를 원본에 반영하겠다는 의미이다.

참고
반응형

'개발이야기' 카테고리의 다른 글

Visual Studio Code - 쉘 커맨드 code 사용 하기  (0) 2016.09.01
logstash date format 바꾸기  (0) 2016.07.17
logstash value 길이 자르기  (0) 2016.05.29
logstash timezone convert. KST to UTC  (0) 2016.05.29
lolcat 설치  (0) 2016.05.29
Comments