개발이야기

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! 를 적는 이유는 결과를 원본에 반영하겠다는 의미이다.

참고
반응형