2014-09-25 5 views
3

I는 다음과 같습니다 날짜 형식 인쇄이 로그가 :Logstash 사용자 정의 날짜 로그 형식이 일치

=   Build Stamp: 10:45:33 On Apr 4 2014   = 

그래서 내가 grok 수 디버거에 필터를 실행되었지만 제거하는 방법에 여전히 단서를

grok { 
patterns_dir => "./patterns" 
match => { "message" => "%{F_TIMESTAMP:timestamp}" } 
} 

date { 
match => [ "timestamp" , "HH:mm:ss MMM d yyyy" , "HH:mm:ss MMM dd yyyy" ] 
locale => "en" 
} 

패턴 파일에 단어 ,

F_TIMESTAMP %{TIME} \On %{MONTH} +%{MONTHDAY} %{YEAR} 

현재 타임 스탬프에 대한 출력은

10:45:33 grok 디버거에서 2014 년 4 월 4 일에 발생합니다.

그럼 Logstash @timestamp와 호환/일치시킬 수 있습니까?

답변

7

날짜 시간의 각 부분을 추출하고 On 키워드없이 다른 필드에서 결합 할 수 있습니다.

당신이 다음을 얻을 수 있습니다

filter { 
    grok {   
     match => { "message" => "%{F_TIMESTAMP}" } 
    } 
    mutate { 
     add_field => { 
      "timestamp" => "%{time} %{month} %{monthday} %{year}" 
     } 
    } 
    date { 
     match => [ "timestamp" , "HH:mm:ss MMM d yyyy" , "HH:mm:ss MMM dd yyyy" ] 
     locale => "en" 
    } 
    mutate { 
     remove_field => [ "time" ,"month","monthday","year","timestamp"] 
    } 
} 

F_TIMESTAMP %{TIME:time}\s*On\s*%{MONTH:month}\s*%{MONTHDAY:monthday}\s*%{YEAR:year}

그 작업 벌금을 내게.

+0

고마워요,이 작품은 나중에하지만 시간 태그 HH가 @timestamp에 올바르게 표시되지 않는다는 것을 알았습니다. "=>"2014-04-04T02 : 45 : 33.000Z, HH 부품이 02로 표시됨을 알 수 있습니다. 대신 10 분의 시간을 캡처 한 부분이 10이라는 것을 실제로 볼 수 있도록 mutt remove_field 태그를 제거했습니다. 그러면 정말 지금 당장 나를 당황하게합니다. –

+0

logstash는 내 위치가 UTC에서 +8이기 때문에 10을 2로 변경했습니다. 따라서 다른 위치/국가에서 실행하면 다른 값이됩니다. 나는 이것을 위해 시간대 필드를 추가해야한다고 생각한다. –

+0

예 .. 현지 시간으로 변환해야합니다. Ruby 스크립트로 다음과 같이 할 수 있습니다 :'ruby {code => "event [ '@ timestamp'] = event [ '@ timestamp'] .getlocal"}' –

관련 문제