Перейти к основному содержимому
Версия: 4.5.X

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.