Плагин split
Плагин split входит в состав YAML плагинов processors и позволяет превращать одно событие в несколько. Это может быть полезно, если множество событий приходит одной записью (в виде JSON или сплошной строкой).
Конфигурация
В состав конфигурации плагина split всегда входят поля:
type- тип (или метод) разделения события. Возможные значения рассмотрим далее.field- поле события, на основе которого происходит разделение. Если не указано, то используется полеRaw.allow_no_events- определяет поведение в случае, если разделение привело к отсутствию событий. Если установлено вfalse(по умолчанию), то при отсутствии событий плагин в качестве результата вернет оригинальное событие. Если установлено вtrue, то ситуация с отсутствием событий допустимо и в таком случае никаких событий произведено не будет.
Также конфигурация включает в себя несколько полей, значение которых зависит от типа разделения.
simple_string
При использовании данного типа разделения поле рассматривается как обычная строка, а разделение происходит по некоторому разделителю.
В конфигурацию входят поля:
delimiter- строка-разделитель, по которой исходная строка дробится на несколько строк, из которых создаются новые события.ignore-empty-value- значение, указывающее на то, создавать ли события на основе пустых строк или нет. Еслиignore-empty-value: trueи в результате разбиения есть пустые строки, то из них не создадутся события.
Пример:
type: simple_string
delimiter: ","
ignore-empty-value: true
Допустим, исходный текст события представляет собой строку a,b,,c. В результате применения плагина получим три события с исходными текстами a, b и c.
json_string
При использовании данного типа разделения поле рассматривается как JSON, а разделение происходит по строке, находящейся внутри JSON (по некоторому пути) с использованием разделителя.
Поля конфигурации:
path- путь к строке в формате gjson. Если не указан, то в качестве JSON-строки рассматривается исходное поле.delimiter- строка-разделитель, по которой JSON-строка дробится на несколько строк, из которых создаются новые события.ignore-empty-value- значение, указывающее на то, создавать ли события на основе пустых строк или нет. Еслиignore-empty-value: trueи в результате разбиения есть пустые строки, то из них не создадутся события.
Пример:
type: json_string
path: object.string
delimiter: "::"
При исходном тексте события {"object": {"string": "1::2::::3"}} получим четыре события с текстами 1, 2, 3, а также одно событие без текста.
json_array
При использовании данного типа разделения поле рассматривается как JSON, а разделение происходит по элементам JSON-массива.
Поля конфигурации:
path- путь к массиву в формате gjson. Если не указан, то в качестве JSON-массива рассматривается исходное поле.ignore-empty-value- значение, указывающее на то, создавать ли события на основе пустых элементов или нет. Еслиignore-empty-value: trueи в результате разбиения есть элементы со значениемnull, то из них не создадутся события.
Пример:
type: json_array
path: fruits
ignore-empty-value: true
При исходном тексте события {"fruits":[{"name":"apple"},null,{"name":"orange"},{"name":"pear"}]} получим три события с текстами {"name":"apple"}, {"name":"orange"} и {"name":"pear"}.
json_map
При использовании данного типа разделения поле рассматривается как JSON, а разделение происходит по парам ключ-значение JSON-объекта. При этом в качестве нового текста создается новый JSON-объект, содержащий только одну пару.
Поля конфигурации:
path- путь к объекту в формате gjson. Если не указан, то в качестве JSON-объекта рассматривается исходное поле.
Пример:
type: json_map
path: claims.client
При исходном тексте события {"claims":{"client":{"first_name":"John", "last_name":"Doe", "age": 33}}} получим три события с текстами {"first_name":"John"}, {"last_name":"Doe"} и {"age":33}.
xpath
При использовании данного типа разделения поле рассматривается как XML, а разделение происходит с использованием заданного выражения XPath - на основе каждого совпадения создается новое событие.
Поля конфигурации:
path- выражение XPath.ignore-empty-values- значение, указывающее на то, создавать ли события на основе пустых строк или нет.
Пример:
Допустим, имеется XML-"массив":
<Events>
<Event>one</Event>
<Event>two</Event>
<Event>three</Event>
<Event>four</Event>
</Events>
Для разбиения этого массива на отдельные элементы можно использовать конфигурацию:
type: xpath
path: /Events/Event/text()
Также, если сам массив вложен в прочие элементы, для удобства можно слегка изменить конфигурацию:
type: xpath
path: //Events/Event/text()
В результате разбиения получим четыре события с текстами one, two, three и four.