2014-09-02 2 views
2

로그 라인에서 float 값을 가져 오려고하지만 logstash mutate 필터가 값을 반올림하여 정수로 변환합니다.float 값의 구문 분석 오류

로그 라인

f413e89e-8c2f-e411-97a5-005056820dbe|0,0033 

하고 구성 파일

input { 
    file { 
     path => "log.txt" 
    } 
} 

filter { 
    grok { 
     match => ["message", "%{UUID:request_object_id}[/|]%{LOCALNUM:total_time}"] 
    } 

    mutate { 
      gsub => ["total_time", "[,]", "."] 
      convert => [ "total_time", "float" ] 
    } 
} 

output { 
    elasticsearch { host => localhost } 
} 

LOCALNUM 맞춤 패턴이며

(?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:[,][0-9]+)?)|(?:[,][0-9]+))) 

(사용 ","대신 "인 . "부동 숫자).

이 구성에서 total_time0.0033 대신 0입니다.

답변

7

logstash 소스 코드를 보면 그것은이 수행합니다

convert(event) if @convert 
gsub(event) if @gsub 

그래서는 gsub 전에 convert 않습니다. mutate을 두 개의 다른 mutate으로 분할하면 문제가 해결됩니다.

mutate { 
     gsub => ["total_time", "[,]", "."] 
} 
mutate { 
     convert => [ "total_time", "float" ] 
} 
0

오, 실수를 발견했습니다. 나는 두 개의 분리 된 mutate 블럭을 사용했다. 하나는 gsub이고 다른 하나는 convert이다. 문제가 해결되었다.

관련 문제