К первому вопросу:
Вы можете указать несколько слов для начала сообщения в пределах одного регулярного выражения. Поэтому, если я вас правильно понял, вы хотите включить все строки журнала, начинающиеся с Select
, INSERT
, UPDATE
и DELETE
. Для этого вы должны определить группу допустимых значений следующим образом:
multiline.pattern : '^(Select|INSERT|UPDATE|DELETE)
Символ канала (|
) действует как оператор ИЛИ. Обратите внимание, что по умолчанию регулярное выражение учитывает регистр. Так, например, сообщения, начинающиеся с заглавной буквы SELECT, будут игнорироваться в приведенном выше примере.
На ваш второй вопрос:
Помимо multiline.pattern необходимо указать параметры multiline.match и multiline.negate:
multiline.match определяет, следует ли поместить строки журнала до или после шаблона в одно событие.
multiline.negate определяет, должны ли следующие строки соответствовать шаблону.
Таким образом, вместо указания конкретного конечного символа вы указываете Filebeat, что каждая строка журнала, соответствующая шаблону AND, следует за этой строкой, должна быть агрегирована, ДО следующей строки снова соответствует шаблону.
( См. https://www.elastic.co/guide/en/beats/filebeat/current/multiline-examples.html для полной ссылки и описания.
Пример:
Предполагается, что ваш файл журнала имеет следующую структуру:
Select foo from bar\n where baz = 1\n and id =4711;\n\n
DELETE from bar\n where baz = null;\n\n
INSERT ...
следующий конфиг должен выполнить эту работу:
multiline.pattern : '^(Select|INSERT|UPDATE|DELETE)'
multiline.match: after
multiline.negate: true
Я надеюсь, что смогу вам помочь.