Фильтр logstash GROK вместе с плагином KV не смог обработать события

я новичок в ЕЛК. когда я подключил приведенный ниже файл журнала, он попадает в «очередь недоставленных сообщений» в logstash, потому что logstash не может обрабатывать события. Я написал фильтр GROK для анализа событий, но logstash все еще не может не обрабатывать события . Любая помощь будет оценена по достоинству.

Ниже приведен образец формата журнала.

25193662345 [http-nio-8080-exec-44] DEBUG c.s.b.a.m.PerformanceMetricsFilter - method=PUT status=201 appLogicTime=1, streamInTime=0, blobStorageTime=31, totalTime=33 tenantId=b9sdfs-1033-4444-aba5-csdfsdfsf, immutableBlobId=bss_c_586331/Sample_app12-sdas-157123148464.txt, blobSize=2862, domain=abc

2519366789 [http-nio-8080-exec-47] DEBUG q.s.b.y.m.PerformanceMetricsFilter - method=PUT status=201 appLogicTime=1, streamInTime=0, blobStorageTime=32, totalTime=33 tenantId=b0csdfsd-1066-4444-adf4-ce7bsdfssdf, immutableBlobId=bss_c_586334/Sample_app15-615223-157sadas6648465.txt, blobSize=2862, domain=cde

Фильтр ГРОК:

dissect { mapping => { "message" => "%{NUMBER:number} [%{thread}] %{level} %{class} - %{[@metadata][msg]}" } }
    kv { source => "[@metadata][msg]" field_split => "," }

Спасибо


person learning fun    schedule 01.11.2019    source источник


Ответы (1)


У вас в основном две проблемы в вашей конфигурации.

1.) Вы используете фильтр dissect, а не grok, оба используются для анализа сообщений, но grok использует регулярные выражения для проверки значения поля, а dissect просто позиционный, он не выполняет никакой проверки, если у вас есть СЛОВО значение в позиции поля, которое ожидает ЧИСЛО, grok завершится ошибкой, а dissect — нет.

Если ваши строки журнала всегда имеют один и тот же шаблон, вам следует продолжать использовать dissect, так как он быстрее и требует меньше ресурсов процессора.

Ваше правильное сопоставление dissect должно быть:

dissect {
    mapping => { "message" => "%{number} [%{thread}] %{level} %{class} - %{[@metadata][msg]}" }
}

2.) Поле, содержащее сообщение kv, неправильное, в нем есть поля, разделенные пробелом и запятой, kv так не пойдет.

После вашего фильтра dissect это содержимое [@metadata][msg].

method=PUT status=201 appLogicTime=1, streamInTime=0, blobStorageTime=32, totalTime=33 tenantId=b0csdfsd-1066-4444-adf4-ce7bsdfssdf, immutableBlobId=bss_c_586334/Sample_app15-615223-157sadas6648465.txt, blobSize=2862, domain=cde

Чтобы решить эту проблему, вы должны использовать фильтр мутации, чтобы удалить запятую из [@metadata][msg], и использовать фильтр kv с настройками по умолчанию.

Это должна быть ваша конфигурация фильтра

filter {
    dissect {
        mapping => { "message" => "%{number} [%{thread}] %{level} %{class} - %{[@metadata][msg]}" }
    }
    mutate {
        gsub => ["[@metadata][msg]",",",""]
    }
    kv {
        source => "[@metadata][msg]"
    }
}

Ваш вывод должен быть примерно таким:

{
             "number" => "2519366789",
         "@timestamp" => 2019-11-03T16:42:11.708Z,
             "thread" => "http-nio-8080-exec-47",
       "appLogicTime" => "1",
             "domain" => "cde",
             "method" => "PUT",
              "level" => "DEBUG",
           "blobSize" => "2862",
           "@version" => "1",
    "immutableBlobId" => "bss_c_586334/Sample_app15-615223-157sadas6648465.txt",
       "streamInTime" => "0",
             "status" => "201",
    "blobStorageTime" => "32",
            "message" => "2519366789 [http-nio-8080-exec-47] DEBUG q.s.b.y.m.PerformanceMetricsFilter - method=PUT status=201 appLogicTime=1, streamInTime=0, blobStorageTime=32, totalTime=33 tenantId=b0csdfsd-1066-4444-adf4-ce7bsdfssdf, immutableBlobId=bss_c_586334/Sample_app15-615223-157sadas6648465.txt, blobSize=2862, domain=cde",
          "totalTime" => "33",
           "tenantId" => "b0csdfsd-1066-4444-adf4-ce7bsdfssdf",
              "class" => "q.s.b.y.m.PerformanceMetricsFilter"
}
person leandrojmp    schedule 03.11.2019
comment
Спасибо за ваш ответ. Когда я попробовал предложенный выше фильтр, logstash отправляет события в очередь недоставленных писем. - person learning fun; 05.11.2019
comment
Я протестировал конвейер, и он работал без ошибок, обновите свой вопрос, указав полный конвейер и все журналы ошибок, которые вы получаете. Также укажите, какую версию вы используете. - person leandrojmp; 05.11.2019