2016-06-16 1 views
0
나는 사용자 정의 로그

방법 사용자 지정 로그를 분할 logstash

분할 할

각 값을 사용자 정의 필드 이름을 추가하는 방법 "2016년 5월 11일 02 : 38 : 00.617, userTestId, 키 문자열 test113321, UID-123,10079,0,30096,128,3

타임 스탬프, 문자열 userId를, 문자열 setlkey, 문자열에서 UniqueID, 긴에서는 공급자, 문자열 itemCode1, 문자열 itemCode2, 문자열 itemCode3, 문자열 ServiceType 자리를 의미 로그인 "

나는 루비를 사용하여 필터를 만들려고한다

filter { 
     ruby{ 
     code => " 
     fieldArray = event['message'].split(',') 
     for field in fieldArray 
       result = field 
       event[field[0]] = result 
end 
" 
} 
} 

하지만 아래의 표와 같이 각 사용자 정의 값을 필드 이름을 추가하여 로그를 분할하는 방법을 알지 못합니다.

Timestamp : 2016-05-11 02:38:00.617 
userId : userTestId 
setlkey : Key-string-test113321 
uniqueId : UID-123 
providerId : 10079 
itemCode1 : 0 
itemCode2 : 30096 
itemCode3 : 128 
serviceType : 3 

어떻게하면됩니까?

감사합니다.

답변

1

대신 grok 필터를 사용할 수 있습니다. grok 필터는 라인을 정규식으로 파싱하고 각 그룹을 필드에 연결할 수 있습니다.
은이 패턴을 사용하여 로그를 분석 할 수 있습니다 :

grok { 
    match => { 
     "message" => [ 
      "%{TIMESTAMP_ISO8601:timestamp},%{USERNAME:userId},%{USERNAME:setlkey},%{USERNAME:uniqueId},%{NUMBER:providerId},%{NUMBER:itemCode1},%{NUMBER:itemCode2},%{NUMBER:itemCode3},%{NUMBER:serviceType}" 
     ] 
    } 
} 

이것은 당신이하고자하는 필드를 생성합니다.
참조 : grok patterns on github
테스트하려면 : Grok constructor


또 다른 해결책 :
당신은 당신의 요구에 더욱 가까운 csv로 필터를 사용할 수 있습니다 (하지만 난 더이 있기 때문에 처음 grok 수 필터와 함께 갔다 이것은 경험)이 Csv filter documentation

CSV 필터를 파싱 CSV 데이터를 포함하는 이벤트 필드를 취하고, 각각의 필드로서 저장한다 (임의로 지정할 수도 이름은). 이 필터는 쉼표가 아닌 구분 기호로 데이터를 구문 분석 할 수도 있습니다.

나는 그것을 사용한 적이 있지만, 다음과 같이한다 : 기본적으로

csv { 
    columns => [ "Timestamp", "userId", "setlkey", "uniqueId", "providerId", "itemCode1", "itemCode2 "itemCode3", "serviceType" ] 
} 

, 필터를 구성 할 필요가 있으므로 그곳에서 "," 분리와, 메시지 필드에 없습니다.

저는 CSV 필터 솔루션이 더 좋다고 생각합니다.

+0

또한 루비 필터로 할 수도 있지만 루비 필터와 루비 자체는 경험이 없으므로 나는 말할 수 없다. – baudsp

+0

친애하는 여러분. Baudsp. 나에게 정말 도움이된다. 대단히 감사합니다 ~! –

관련 문제