Фильтр logstash GROK вместе с плагином KV не смог обработать события - PullRequest
0 голосов
/ 02 ноября 2019

Я новичок в ELK. когда я загрузил указанный ниже файл журнала, он переходит в «очередь недоставленных сообщений» в 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

Фильтр GROK:

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

Спасибо

1 Ответ

1 голос
/ 03 ноября 2019

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

1.) Вы используете фильтр dissect, а не grok, оба используются для анализа сообщений, но grok использует регулярные выражения дляпроверить значение поля, и dissect является просто позиционным, оно не выполняет никакой проверки, если у вас есть значение WORD в позиции поля, которое ожидает NUMBER, grok не удастся, но dissect не будет.

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

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

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

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

После вашего *Фильтр 1021 * - это содержимое [@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

. Для решения этой проблемы следует использовать фильтр mutate, чтобы удалить запятую из [@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"
}
...