1

누군가 내가 잘못하고있는 것을 말해 줄 수 있습니까? 아니면 Logstash가 ISO8601 타임 스탬프를 구문 분석하지 않는 이유는 무엇입니까?Logstash 파서 오류입니다. 타임 스탬프가 잘못되었습니다.

내가 오류 메시지가

실패 행동 ... "오류"=> { "유형"=>이 "[타임 스탬프]를 구문 분석하는 데 실패"=> "mapper_parsing_exception" "이유"입니다 , "due_by"=> { "type"=> "illegal_argument_exception", "reason"=> "잘못된 형식 : \"2017-03-24 12 : 14 : 50 \ "이 (가)"17-03- 24 12 : 14 : 50 \ ""}}

표본 로그 파일 라인 (000 목적으로 대체 IP 주소의 마지막 바이트) 01,235

16,
2017-03-24 12:14:50 87.123.123.000 12345678.domain.com GET /smil:stream_17.smil/chunk_ctvideo_ridp0va0r600115_cs211711500_mpd.m4s - HTTP/1.1 200 750584 0.714 "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" https://referrer.domain.com/video/2107 https fra1 "HIT, MISS" 12345678.domain.com

grok 수 패턴 (확인 http://grokconstructor.appspot.com/do/match 사용)

RAW %{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{IPV4:clientip}%{SPACE}%{HOSTNAME:http_host}%{SPACE}%{WORD:verb}%{SPACE}\/(.*:)?%{WORD:stream}%{NOTSPACE}%{SPACE}%{NOTSPACE}%{SPACE}%{WORD:protocol}\/%{NUMBER:httpversion}%{SPACE}%{NUMBER:response}%{SPACE}%{NUMBER:bytes}%{SPACE}%{SECOND:request_time}%{SPACE}%{QUOTEDSTRING:agent}%{SPACE}%{URI:referrer}%{SPACE}%{WORD}%{SPACE}%{WORD:location}%{SPACE}%{QUOTEDSTRING:cache_status}%{SPACE}%{WORD:account}%{GREEDYDATA}

Logstash 구성 (입력 측) :

input { 
    file { 
     path => "/subfolder/logs/*" 
     type => "access_logs" 
     start_position => "beginning" 
    } 
} 
filter { 
    # skip first two lines in log file with comments 
    if [message] =~ /^#/ { 
     drop { } 
    } 

    grok { 
     patterns_dir => ["/opt/logstash/patterns"] 
     match => { "message" => "%{RAW}" } 
    } 

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

    # ... (rest of the config omitted for readability) 
}
+0

해당 색인 (특히 'timestamp'필드)에 대한 Elasticsearch 매핑을 게시 할 수 있습니까? – fylie

답변

1

그래서 나는이 매핑되는 필드 timestamp에 의해 발생되고 확신 그것을 해석하지 않는 Elasticsearch의 유형으로 변환합니다. 인덱스 매핑을 게시하는 경우이를 살펴보면 기꺼이 알 수 있습니다.

참고 : date 필터가 성공한 경우 @timestamp으로 가져 오기 때문에 remove_field을 추가하여 신속하게 해결할 수 있습니다. 지금은 두 필드에 동일한 값이 저장되어 있습니다. 그렇다면 필드 매핑에 대해 걱정할 필요가 없습니다. :)

date { 
    match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss" ] 
    locale => "en" 
    remove_field => [ "timestamp" ] 
} 
+0

감사합니다. 먼저 인덱스에 "@timestamp"와 "timestamp"라는 두 개의 필드가 있음을 알 수 있습니다. 실제로 후자는 여기에 보내는 것과 다른 형식으로 매핑됩니다. – KBoek