Захват X строк в fluentd

99
10

Я пытаюсь сделать fluentd прослушиванием на tcp-сокете, который будет получать строки ввода ascii и захватить группы по 100 строк в каждое событие.

Я видел, что есть вход tcp, который поддерживает формат multiline. Как в этом примере:

format multiline
format_firstline /^Started/
format1 /Started (?<method>[^ ]+) "(?<path>[^"]+)" for (?<host>[^ ]+) at (?<time>[^ ]+ [^ ]+ [^ ]+)\n/
format2 /Processing by (?<controller>[^\u0023]+)\u0023(?<controller_method>[^ ]+) as (?<format>[^ ]+?)\n/

К сожалению, в случае с моими данными каждая строка имеет тот же формат, поэтому я не могу определить на основе формата строки, где должно начаться одно событие и где оно заканчивается. Вместо этого я хочу, чтобы он всегда принимал X (в моем случае 100) строк вместе в одно событие, а затем запускал следующее событие.

Я пытаюсь придумать многострочные регулярные выражения, подобные этому, но я подозреваю, что fluentd всегда просто соответствует им по fluentd, поэтому он никогда не будет соответствовать многострочному регулярному выражению:

format /^(?<data>(?:[^ ]+ [^ ]+ [^ ]+\r){100})$/

спросил(а) 2021-01-25T15:12:15+03:00 4 месяца, 2 недели назад
1
Решение
63

tcp вход tcp не поддерживает многострочный. Ваш случай, захватить X строк в одно событие, очень редок, поэтому писать парсер лучше, чем комбинация сложных конфигураций.

http://docs.fluentd.org/articles/plugin-development#parser-plugins

ответил(а) 2021-01-25T15:12:15+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема