Как обрабатывать многострочные записи журнала в Flume

Я только начал играть с Flume. У меня есть вопрос о том, как обрабатывать записи журнала, которые являются многострочными, как одно событие. Как трассировки стека во время ошибок. Например, рассматривайте приведенное ниже как одно событие, а не как одно событие для каждой строки.

2013-04-05 05:00:41,280 ОШИБКА (ClientRequestPool-PooledExecutionEngine-Id#4) [com.ms.fw.rexs.gwy.api.service.AbstractAutosysJob] задание не выполнено для 228794 java.lang.NullPointerException в com.ms.fw.rexs.core.impl.service.job.ReviewNotificationJobService.createReviewNotificationMessageParameters(ReviewNotificationJobService.java:138) ....

Я настроил источник на тип spooldir.

Спасибо Суман


person user2285495    schedule 16.04.2013    source источник


Ответы (2)


Как указано в документации, источник spooldir создает новое событие для каждой строки символов, разделенной новой строкой во входных данных. Вы можете изменить это поведение, создав собственный приемник (см. http://flume.apache.org/FlumeDeveloperGuide.html#sink) на основе код источника spooldir. Вам нужно будет реализовать алгоритм синтаксического анализа, который сможет определить начальную и конечную строку сообщения на основе некоторых критериев.

Кроме того, существуют другие источники, такие как Syslog UDP и Avro, которые обрабатывают все полученное сообщение как одно событие, поэтому вы можете использовать его без каких-либо изменений.

person Dmitry    schedule 17.04.2013
comment
Вы имеете в виду десериализатор, а не сток - person Chris White; 01.11.2016

Вы захотите изучить расширение десериализатора строк, используемого источником спула, одним из простых (но потенциально ошибочных) подходов будет разграничение на новые строки, но объединение строк с префиксом с заданным количеством пробелов в предыдущей строке.

На самом деле для этого уже есть проблема Jira с патчем:

person Chris White    schedule 01.11.2016