2016-06-02 1 views
1

Ich habe logstash einrichten und die „Standard“ syslog-Filter verwende wie folgt:entfernen mehrere Datumsfelder in syslog Filter

, die im wesentlichen die gleiche enthalten Daraus ergeben sich zwei Felder erstellt werden, @timestamp und syslog_timestamp
filter { 
    if [type] == "syslog" { 
    grok { 
     match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } 
    } 
    syslog_pri { } 
    date { 
     match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] 
    } 
    } 
} 

Wert, wenn auch in verschiedenen Formaten.

Gibt es eine Möglichkeit, ein temporäres syslog_timestamp Feld in Grok zu erstellen, so dass es in das Datum Plugin übergeben werden kann, oder muss ich das Feld explizit über mutieren entfernen, nachdem ich es "verwendet" habe? Zum Beispiel:

filter { 
    if [type] == "syslog" { 
    grok { 
     match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } 
    } 
    syslog_pri { } 
    date { 
     match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] 
    } 
    mutate { 
     remove_field => [ "syslog_timestamp" ] 
    } 
    } 
} 

Danke für alle Hinweise.

Antwort

0

Es gibt nicht wirklich temporäre Felder, wenn Sie nicht syslog_timestamp wollen, müssen Sie es entfernen.

Eine Sache, die ich rate jedoch ist, dass Sie die in your date filter durchführen. Dadurch wird nur das Feld entfernt, wenn der Datumsfilter erfolgreich angewendet wurde. Wenn der Datumsfilter fehlschlägt, wird das Feld syslog_timestamp zurückgelassen, wodurch möglicherweise die Ursache des Fehlers angezeigt wird.

date { 
    match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] 
    remove_field => [ "syslog_timestamp" ] 
}