2016-10-14 6 views
0

나는 filestat에서 elasticsearch로 데이터를 푸시하기 위해 logstash를 사용하고 있습니다. 내 데이터의 시간은 hh:mm:ss a (05:21:34 AM)입니다. 오늘 날짜를 추가하고 싶습니다. 이 logstash 설정의 필터가logstash 시간으로 변환 시간

filter{ 
    grok{ some grok pattern to get time} 
    date { 
     locale => "en" 
     match => ["time", "hh:mm:ss a"] 
     target => "@timestamp" 
    } 
} 

그러나 데이터가 2016-01-01T05:21:34.000Z 로 변환이 어떻게 2016-10-14T05:21:34.000Z으로 변경할 수 있습니다입니까?

답변

1

나는 logstash가 현재 연도를 볼만큼 똑똑하다고 생각하지만 다른 필드를 기본값으로 설정하지는 않습니다.

원하는 전체 datetime 문자열을 사용하여 새 필드를 만들어야합니다. 이런 식으로 뭔가는 grok 수와 날짜 사이에 작동합니다 :

grok { } 
mutate { 
    add_field => { "datetime" => "%{+YYYY.MM.dd} %{time}" } 
} 
date { } 

는 새로운 날짜 필드의 형식을 사용하도록 날짜 {} 패턴을 변경해야합니다. 날짜 {}이 (가) 호출 된 후에 datetime 필드를 원하지 않으면 대신 메타 데이터 필드를 사용하거나 날짜 {}의 일부로 remove_field를 사용할 수 있습니다.

+0

add_field => { "datetime"=> "% {+ YYYY.MM.dd} % {time}"}'이 문장을 grok와 mutate에 추가하는 것의 차이점은 무엇입니까? – warrior107

+1

기본 필터가 성공하면 add_field (및 remove_field)가 작동합니다. 귀하의 경우 grok {}에 그것을 추가 할 수 있으며 grok이 작동하면 새로운 [datetime] 필드 만 생성합니다. 그러나, mutate는 바로 그 grok에서 생성 된 [time] 필드를 사용하고 있습니다. 그 때문에 신경이 쓰입니다 (다양한 필터로 변수를 생성 할 때 타이밍에 대해 물어 봤습니다). 그것은 또한 별도의 블록에서 더 명백합니다. –