2016-11-21 5 views
0

В настоящее время я пытаюсь настроить некоторые коллекции данных для нашего приложения, используя полный стек лося (Beats - Logstash - ElasticSearch-Kibana). Пока все работает так, как должно, но у меня есть требование для сбора статистики по исключениям, которые вызывают приложения (например, java.lang.IllegalArgumentException)Фильтр Logstash Grok, читающий неправильное значение

Я не очень заинтересован в самой трассировке стека, поэтому я пошел вперед и добавлен отдельный фильтр grok только для исключения.

Пример сообщения:

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) 

Пример ГРОК заявления:

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

Тестирование на ГРОК отладчик показывает правильные результаты:

{ 
    "GREEDYDATA": [ 
    [ 
     "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]" 
    ] 
    ], 
    "exception": [ 
    [ 
     "java.lang.IllegalArgumentException" 
    ] 
    ] 
} 

Проблема

При добавлении в конфигурацию logstash он захватывает причиненную строку вместо имени исключения, даже если «Вызванная» строка за другой символ новой строки. Однако он отлично работает для других сообщений об исключениях, таких как:

016-11-15 06:17:49,691 WARN [SCReplicationWorkerThread-2] ClientJob.java:207 50345 Error communicating to server `199.181.131.249':`80'. Waiting `10' seconds before retrying... If you see this message rarely, the sc will have recovered gracefully. || [email protected]:/mnt/deployment/install/app [email protected] 
java.net.SocketTimeoutException: Read timed out 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) 
    at java.net.SocketInputStream.read(SocketInputStream.java:170) 
    at java.net.SocketInputStream.read(SocketInputStream.java:141) 
    at java.net.SocketInputStream.read(SocketInputStream.java:223) 
    at java.io.DataInputStream.readBoolean(DataInputStream.java:242) 
    at com.myapp.replication.client.ClientJob.passCheckRevision(ClientJob.java:279) 
    at com.myapp.replication.client.ClientJob.execute(ClientJob.java:167) 
    at org.quartz.core.JobRunShell.run(JobRunShell.java:202) 
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:534) 

Любые советы будут оценены.

Благодаря

ответ

0

ли вы настройки mutiline во входном или filebeat ввода, как это, чтобы показать образец начать с ISO8601
Я думаю, может быть, вы не mutiline получать всю линию

input { 
     beats { 
      port => 5044 
      codec => multiline { 
      pattern => "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}[\.,][0-9]{3,7} " 
      negate => true 
      what => "previous" 
      } 
      } 
     } 
+0

многострочного в настоящее время установлен и работает. Когда я проверяю полное значение сообщения, я вижу все сообщение, включая символы новой строки. – Arturski

+0

GREEDYDATA, я думаю, поймает всю строку даже в символе \ n, поэтому я предлагаю вам выбрать другой регулярный, чтобы разбить его. –

+0

GREEDYDATA игнорирует \ t и \ n, я думаю, что понял, мне нужно изменить регулярное выражение на игнорировать что-либо, начиная с "Caused by" – Arturski