Процессор dissect
Аналогично процессору Grok, dissect также извлекает структурированные поля из одного текстового поля в документе. Однако, в отличие от Grok, dissect не использует регулярные выражения. Это позволяет сделать синтаксис dissect простым и в некоторых случаях быстрее, чем Grok.
Dissect сопоставляет одно текстовое поле с определенным шаблоном.
Например, следующий шаблон:
%{clientip} %{ident} %{auth} [%{@timestamp}] \"%{verb} %{request} HTTP/%{httpversion}\" %{status} %{size} сопоставит строку лога в формате:
1.2.3.4 - - [30/Apr/1998:22:00:52 +0000] \"GET /english/venues/cities/images/montpellier/18.gif HTTP/1.0\" 200 3171
и приведет к документу со следующими полями:
"doc": {
"_index": "_index",
"_type": "_type",
"_id": "_id",
"_source": {
"request": "/english/venues/cities/images/montpellier/18.gif",
"auth": "-",
"ident": "-",
"verb": "GET",
"@timestamp": "30/Apr/1998:22:00:52 +0000",
"size": "3171",
"clientip": "1.2.3.4",
"httpversion": "1.0",
"status": "200"
}
} Шаблон dissect определяется частями строки, которые будут отброшены. В предыдущем примере первой частью, подлежащей отбрасыванию, является пробел. Dissect находит этот пробел, затем присваивает значение clientip всему до этого пробела. Затем dissect находит [ и ], и присваивает @timestamp всему между [ и ]. Внимательное отношение к частям строки, которые следует отбросить, поможет создать успешные шаблоны dissect.
Для успешного совпадения все ключи в шаблоне должны иметь значение. Если у любого из %{keyname}, определённых в шаблоне, нет значения, то генерируется исключение, которое может быть обработано директивой on_failure. Пустой ключ %{} или имя пропускаемого ключа могут использоваться для сопоставления значений, но исключают значение из конечного документа. Все сопоставленные значения представлены в виде строковых типов данных. Процессор convert может быть использован для преобразования в ожидаемый тип данных.
Dissect также поддерживает модификаторы ключей, которые могут изменить стандартное поведение dissect. Например, вы можете указать dissect игнорировать определённые поля, добавлять поля, пропускать заполнители и т.д. Более подробная информация в разделе ниже.
Таблица 13. Параметры dissect
| Имя | Обязательно | Значение по умолчанию | Описание |
|---|---|---|---|
| да | - | Поле для разделения |
| да | - | Шаблон для применения к полю |
| нет | "" (пустая строка) | Символ(ы), разделяющие добавляемые поля. |
| нет | false | Если |
| нет | - | Описание процессора. Полезно для описания цели процессора или его конфигурации. |
| нет | - | Условное выполнение процессора. См. Условное выполнение процессора. |
| нет |
| Игнорировать сбои для процессора. См. Обработка сбоев в конвейерах. |
| нет | - | Обработка сбоев для процессора. См. Обработка сбоев в конвейерах. |
| нет | - | Идентификатор процессора. Полезно для отладки и метрик. |
{
"dissect": {
"field": "message",
"pattern" : "%{clientip} %{ident} %{auth} [%{@timestamp}] \"%{verb} %{request} HTTP/%{httpversion}\" %{status} %{size}"
}
} Ключи модификаторов разбора
Ключи модификаторов могут изменять стандартное поведение разбора. Ключи модификаторов могут находиться слева или справа от %{keyname}, всегда внутри %{ и }. Например %{+keyname ->} содержит модификаторы добавления и правого отступа.
Таблица 14. Модификаторы разбора
| Модификатор | Название | Позиция | Пример | Описание | Подробности |
|---|---|---|---|---|---|
| Пропуск правого отступа | (крайне) справа |
| Пропускает повторяющиеся символы справа | |
| Добавление | слева |
| Объединяет два или более поля вместе | |
| Добавление с порядком | слева и справа |
| Объединяет два или более поля вместе в указанном порядке | |
| Ключ пропуска с именем | слева |
| Пропускает сопоставленное значение в выводе. Такое же поведение, как у | |
| Ключи ссылки | слева |
| Устанавливает ключ вывода как значение |
Модификатор правого отступа (->)
Алгоритм, выполняющий разбор, очень строг, так как требует, чтобы все символы в шаблоне совпадали с исходной строкой. Например, шаблон %{fookey} %{barkey} (1 пробел) будет соответствовать строке "foo bar" (1 пробел), но не будет соответствовать строке "foo bar" (2 пробела), так как в шаблоне всего 1 пробел, а в исходной строке 2 пробела.
Модификатор правого отступа помогает в этом случае. Добавление модификатора правого отступа к шаблону %{fookey->} %{barkey}, теперь он будет соответствовать "foo bar" (1 пробел) и "foo bar" (2 пробела), а также "foo bar" (10 пробелов).
Используйте модификатор правого отступа, чтобы разрешить повторение символов после %{keyname->}.
Модификатор правого отступа может быть размещён на любом ключе с другими модификаторами. Он всегда должен быть самым правым модификатором. Например: %{+keyname/1->} и %{->}
Пример модификатора правого отступа
Шаблон |
|
Входные данные | 1998-08-10T17:15:42,466 WARN |
Результат |
|
Модификатор правого отступа может использоваться с пустым ключом, чтобы пропустить нежелательные данные. Например, та же входная строка, но заключённая в скобки, требует использования пустого ключа с правым отступом, чтобы получить тот же результат.
Пример модификатора правого отступа с пустым ключом
Шаблон |
|
Входные данные | [1998-08-10T17:15:42,466] [WARN] |
Результат |
|
Модификатор добавления (+)
Разбор поддерживает объединение двух или более результатов для вывода. Значения добавляются слева направо. Можно указать разделитель добавления. В этом примере разделитель добавления определен как пробел.
Пример модификатора добавления
Шаблон |
|
Входные данные | john jacob jingleheimer schmidt |
Результат |
|
Модификатор добавления с порядком (+ и /n)
Разбор поддерживает объединение двух или более результатов для вывода. Значения добавляются в соответствии с определённым порядком (/n). Можно указать разделитель добавления. В этом примере разделитель добавления определён как запятая.
Пример модификатора добавления с порядком
Шаблон |
|
Входные данные | john jacob jingleheimer schmidt |
Результат |
|
Ключ пропуска с именем (?)
Разбор поддерживает игнорирование совпадений в конечном результате. Это можно сделать с помощью пустого ключа %{}, но для лучшей читабельности можно присвоить этому пустому ключу имя.
Пример модификатора ключа пропуска с именем
Шаблон |
|
Входные данные | 1.2.3.4 - - [30/Apr/1998:22:00:52 +0000] |
Результат |
|
Ключи ссылок (* и &)
Поддержка разбора, используя парные значения ключ/значение для структурированного содержимого. Представьте систему, которая частично регистрирует пары ключ/значение. Ключи ссылок позволяют поддерживать это отношение ключ/значение.
Пример модификатора ключа ссылки
Шаблон |
|
Входные данные | [2018-08-10T17:15:42,466] [ERR] ip:1.2.3.4 error:REFUSED |
Результат |
|
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/dissect-processor.html