Многострочный шаблон разбора - PullRequest
0 голосов
/ 04 сентября 2018

Я хочу проанализировать стандартное исключение JAVA в версии стека ELK 6.3.2, которое выглядит следующим образом:

2018-09-04 05:29:03.955 [default task-38] ERROR c.r.e.u.util.MongoConnectionUtil.createMongoUser - Exception occured while creating mongo userCommand failed with error 11000: 'User "asdf" already exists' on server 192.168.1.33:27017. The full response is { "ok" : 0.0, "errmsg" : "User \"asdf\" already exists", "code" : 11000, "codeName" : "DuplicateKey" }
com.mongodb.MongoCommandException: Command failed with error 11000: 'User "qwer" already exists' on server 192.168.1.33:27017. The full response is { "ok" : 0.0, "errmsg" : "User \"asdf\" already exists", "code" : 11000, "codeName" : "DuplicateKey" }
    at com.mongodb.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:115)
    at com.mongodb.connection.CommandProtocol.execute(CommandProtocol.java:114) ...

Мой файл filebeat.yml имеет конфигурацию:

filebeat.inputs:

- type: log
  enabled: true
  paths:
    - C:\logs\test.log
  multiline.pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'
  multiline.negate: false
  multiline.match: after

и мой вход logstash.conf выглядит так:

input {

beats {
    port=>5044
        codec => multiline {
               pattern => "^\s"
              what => "previous"
}
}

Но logstash говорит, что не смог разобрать шаблон, фактически он аварийно завершает работу. Если я удаляю конфигурацию codec только тогда, первая строка исключения обрабатывается. Я также поставил тот же вопрос на https://discuss.elastic.co/t/multiline-parsing-patterns/147171, но не получил ответа.

1 Ответ

0 голосов
/ 04 сентября 2018

Вам необходимо изменить: multiline.negate до true. и я не уверен, что вы пытаетесь достичь с помощью шаблона, но, похоже, вам следует:

multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'

Более того, вам больше не нужно использовать многострочный в logstash - просто пройдите с:

input {
    beats {
        port => 5044            
    }
}

В общем, чтобы перехватить весь журнал, я бы изменил вашу конфигурацию Filebeat на:

- type: log
  enabled: true
  paths:
    - C:\logs\test.log
  multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
  multiline.negate: true
  multiline.match: after

Немного объяснений: Когда мы выбираем negate:true и match: after, мы сообщаем FileBeat:

Последовательные строки, которые не соответствуют шаблону, добавляются к предыдущая строка, которая соответствует.

Другими словами - он говорит FileBeat собирать каждую строку, которая начинается с данного шаблона и заканчивается, когда этот шаблон появляется снова в начале новой строки.
Для этого шаблона ^[0-9]{4}-[0-9]{2}-[0-9]{2}, если вы получите это 2 исключения:

2018-09-04 05:29:03.955 [default task-38] ERROR c.r.e.u.util.MongoConnectionUtil.createMongoUser - Exception occured while creating mongo userCommand failed with error 11000: 'User "asdf" already exists' on server 192.168.1.33:27017. The full response is { "ok" : 0.0, "errmsg" : "User \"asdf\" already exists", "code" : 11000, "codeName" : "DuplicateKey" }
com.mongodb.MongoCommandException: Command failed with error 11000: 'User "qwer" already exists' on server 192.168.1.33:27017. The full response is { "ok" : 0.0, "errmsg" : "User \"asdf\" already exists", "code" : 11000, "codeName" : "DuplicateKey" }
    at com.mongodb.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:115)
    at com.mongodb.connection.CommandProtocol.execute(CommandProtocol.java:114) ...

2018-09-04 05:30:00.000 [default task-38] ERROR c.r.e.u.util.MongoConnectionUtil.createMongoUser - Exception occured while creating mongo userCommand failed with error 11000: 'User "asdf" already exists' on server 192.168.1.33:27017. The full response is { "ok" : 0.0, "errmsg" : "User \"asdf\" already exists", "code" : 11000, "codeName" : "DuplicateKey" }
com.mongodb.MongoCommandException: Command failed with error 11000: 'User "qwer" already exists' on server 192.168.1.33:27017. The full response is { "ok" : 0.0, "errmsg" : "User \"asdf\" already exists", "code" : 11000, "codeName" : "DuplicateKey" }
    at com.mongodb.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:115)
    at com.mongodb.connection.CommandProtocol.execute(CommandProtocol.java:114) ...

Было бы перехватывать каждое исключение как отдельный журнал записей. Если вы регистрируете больше материала и хотите, чтобы filebeat собирал только Error, это другое дело. В нашей программе мы собираем все это и запрашиваем по серьезности (т.е. ошибка, информация, предупреждение и т. Д.)

...