2016-11-25 9 views
0

Ich habe die folgenden Logstash Grok-Anweisungen, die ausgeführt werden sollten, wenn das Feld eine Zeichenfolge enthält "verursacht" in diesem Fall ein anderes Muster angewendet wird und es überschrieben wird, aber aus irgendeinem Grund funktioniert es. Die Regex-Muster funktionieren definitiv individuell und das Problem ist in der folgenden Logik. Jede Hilfe dankbar, dankeLogstash Grok Überschreiben funktioniert nicht

grok { 
     patterns_dir => ["./patterns"] 
     match => ["message", "%{GREEDYDATA}\n%{JAVA_EXCEPTION_SHORT:exception}"] 
} 

if [exception] =~ "Caused" { 
     grok { 
      patterns_dir => ["./patterns"] 
      match => ["exception", "{JAVA_EXCEPTION_LONG:exception}"] 
      overwrite => ["exception"] 
     } 
} 

Kundenspezifische Muster:

JAVA_EXCEPTION_LONG (?<=^Caused by:).*?Exception 
JAVA_EXCEPTION_SHORT ^.+Exception 

Beispiel Log-Nachricht:

2016-11-15 05:19:28,801 ERROR [App-Initialisation-Thread] appengine.java:520 Failed to initialize external authenticator myapp Support Access || [email protected]:/mnt/data/install/assembly [email protected] 
java.lang.IllegalArgumentException: Could not check if provided root is a directory 
    at com.myapp.io.AbstractRootPrefixedFileSystem.checkAndGetRoot(AbstractRootPrefixedFileSystem.java:67) 
    at com.myapp.io.AbstractRootPrefixedFileSystem.<init>(AbstractRootPrefixedFileSystem.java:30) 
    at com.myapp.io.s3.S3FileSystem.<init>(S3FileSystem.java:32) 
    at com.myapp.io.s3.S3FileSystemDriver.loadFileSystem(S3FileSystemDriver.java:60) 
    at com.myapp.io.FileSystems.getFileSystem(FileSystems.java:55) 
    at com.myapp.authentication.ldap.S3LdapConfigProvider.initializeCloudFS(S3LdapConfigProvider.java:77) 
    at com.myapp.authentication.ldap.S3LdapConfigProvider.loadS3Config(S3LdapConfigProvider.java:51) 
    at com.myapp.authentication.ldap.S3LdapConfigProvider.getLdapConfig(S3LdapConfigProvider.java:42) 
    at com.myapp.authentication.ldap.DelegatingLdapConfigProvider.getLdapConfig(DelegatingLdapConfigProvider.java:45) 
    at com.myapp.authentication.ldap.LdapExternalAuthenticatorFactory.create(LdapExternalAuthenticatorFactory.java:28) 
    at com.myapp.authentication.ldap.LdapExternalAuthenticatorFactory.create(LdapExternalAuthenticatorFactory.java:10) 
    at com.myapp.frob.appengine.getExternalAuthenticators(appengine.java:516) 
    at com.myapp.frob.appengine.startUp(appengine.java:871) 
    at com.myapp.frob.appengine.startUp(appengine.java:754) 
    at com.myapp.jsp.KewServeInitContextListener$1.run(QServerInitContextListener.java:104) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.nio.file.NoSuchFileException: fh-ldap-config/ 
    at com.upplication.s3fs.util.S3Utils.getS3ObjectSummary(S3Utils.java:55) 
    at com.upplication.s3fs.util.S3Utils.getS3FileAttributes(S3Utils.java:64) 
    at com.upplication.s3fs.S3FileSystemProvider.readAttributes(S3FileSystemProvider.java:463) 
    at com.myapp.io.AbstractRootPrefixedFileSystem.checkAndGetRoot(AbstractRootPrefixedFileSystem.java:61) 
+0

Ohne irgendwelche Protokolle, um Ihr conf gegen zu testen, denke ich, das Problem kommt der Vergleich ('if [Ausnahme] = ~" Caused "') – baudsp

+0

danke @baudsp Ich habe die zusätzlichen Informationen hinzugefügt, ich habe es auch versucht: if "Caused" in [Ausnahme] {}, war aber auch nicht erfolgreich – Arturski

+0

Aber ich fühle mich, wie die Ausnahme über eine fehlende Datei ausarbeitet? Sind Sie sicher, dass der Schuldige von der if-Bedingung stammt? – Kulasangar

Antwort

1

Der grok Filter schlägt fehl, weil Sie eine % in dieser Zeile fehlt:

match => ["exception", "{JAVA_EXCEPTION_LONG:exception}"] 

Es sollte wie folgt aussehen:

match => ["exception", "%{JAVA_EXCEPTION_LONG:exception}"] 

Da das Parsing fehlgeschlagen ist, das Feld exception nicht überschrieben wurde.

+0

danke! Ich kann nicht glauben, dass ich es nicht bemerkt habe !! Es hat funktioniert – Arturski

+0

@ Arturski Gern geschehen! Ich entdeckte es, während ich versuchte, das Muster mit grokconstructor.appspot.com/do/match#result zu testen, was sehr nützlich ist, um Groknuster zu testen. – baudsp