Плагин 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
.