1

Kann mir jemand sagen, was ich falsch mache, oder warum Logstash einen ISO8601-Timestamp nicht parsen will?Logstash-Parserfehler, Timestamp ist fehlerhaft

Die Fehlermeldung, die ich bekommen ist

fehlgeschlagen Aktion ... "Fehler" => { "type" => "mapper_parsing_exception", "Grund" => "[timestamp] zu analysieren ist fehlgeschlagen" , "creative_by" => {"type" => "illegal_argument_exception", "reason" => "Ungültiges Format: \" 2017-03-24 12: 14: 50 \ "ist am \" 17-03- 24 12: 14: 50 \ ""}}

Beispielprotokolldatei Zeile (letzte Byte in IP-Adresse mit 000 absichtlich ersetzt) ​​

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 Muster (verwenden http://grokconstructor.appspot.com/do/match zu überprüfen)

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 Konfiguration (Eingangsseite):

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

Können Sie Ihre Elasticsearch Mapping für diesen Index (speziell das Feld? Timestamp?) Posten? – fylie

Antwort

1

So bin ich ziemlich sicher, dass dies durch das Feld verursacht wird timestamp abgebildet wird zu einem Typ in Elasticsearch, den es nicht analysiert. Wenn Sie Ihr Index-Mapping veröffentlichen, würde ich mich freuen, es anzusehen.

Ein Hinweis: Sie können dies schnell lösen, indem Sie hinzufügen, denn wenn der date Filter erfolgreich ist, wird der Wert dieses Feldes in @timestamp gezogen. Im Moment haben Sie den gleichen Wert in zwei Feldern gespeichert. Dann müssen Sie sich keine Gedanken über das Mapping für das Feld machen. :)

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

Danke. Zuerst sehe ich, dass wir zwei Felder im Index haben, "@timestamp" und "timestamp". In der Tat ist letzteres auf ein anderes Format abgebildet als das, was ich hier sende. – KBoek

Verwandte Themen