2016-09-01 3 views
-1

Ich versuche, Logstash für die Protokollierung einige benutzerdefinierte Dateien, für die ich die Zeilen mit den Worten zu bekommen: "aus Swap-Speicher". Im folgenden werden der Inhalt der Datei /etc/logstash/conf.d/10-syslog.conf wo in I custom_error Art Filter für die benutzerdefinierte Protokolldateien erstellt haben, die ich brauche, um sich einzuloggen um die gewünschte Linie zu bekommen:grok Muster, um Zeilen mit bestimmten Wort aus Logfiles in Logstash zu bekommen

filter { 
    if [type] == "syslog" { 
    grok { 
     match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } 
     add_field => [ "received_at", "%{@timestamp}" ] 
     add_field => [ "received_from", "%{host}" ] 
    } 
    syslog_pri { } 
    date { 
     match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] 
    } 
    } 
    if [type] == "custom_error" { 
    grok { 
     match => { "message" => "Exception java.lang.OutOfMemoryError: requested %{NUMBER:int} bytes for promotion. Out of swap space?" } 
     add_field => [ "received_at", "%{@timestamp}" ] 
     add_field => [ "received_from", "%{host}" ] 
    } 
    date { 
    match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] 
    } 
} 
} 

Aber ich bekomme immer noch nicht das gewünschte Ergebnis und viele andere Nachrichten zusammen mit der erforderlichen Zeile erscheinen auch, was die Log-Nachricht viel zu langwierig macht. Wie soll ich nur die erforderliche Zeile aus den Protokolldateien erreichen?

Antwort

0

Wenn ich Ihre Frage verstehe, können Sie bedingte in Ihrer Logstash-Konfiguration verwenden.
In der Dokumentation wird here erklärt.

Also, wenn Sie speziell Zeilen filtern, die das Wort enthalten out of swap memory, können Sie verwenden:

if ([message] =~/out of swap memory/) { 
    ... 
    only the lines containing "out of swap memory" will go through this part. 
} 
Verwandte Themen