Процессор 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 игнорировать определенные поля, добавлять поля, пропускать заполнители и т.д. Более подробная информация о модификаторах приведена ниже.
Таблица 12. Параметры dissect
| Название | Обязательно | По умолчанию | Описание |
|---|---|---|---|
| да | - | Поле для анализа |
| да | - | Шаблон для применения к полю |
| нет | "" (пустая строка) | Символ(ы), разделяющие добавленные поля. |
| нет | false | Если |
| нет | - | Описание процессора. Полезно для описания назначения процессора или его конфигурации. |
| нет | - | Условное выполнение процессора. Смотрите Условное выполнение процессора. |
| нет |
| Игнорировать ошибки для процессора. Смотрите Обработка сбоев конвейера. |
| нет | - | Обработка ошибок для процессора. Смотрите Обработка сбоев конвейера. |
| нет | - | Идентификатор процессора. Полезно для отладки и метрик. |
{
"dissect": {
"field": "message",
"pattern" : "%{clientip} %{ident} %{auth} [%{@timestamp}] \"%{verb} %{request} HTTP/%{httpversion}\" %{status} %{size}"
}
} Ключевые модификаторы разделения
Ключевые модификаторы могут изменять поведение по умолчанию для разделения. Ключевые модификаторы могут находиться слева или справа от %{keyname} всегда внутри %{ и }. Например, %{+keyname ->} имеет модификаторы добавления и правого отступа.
Таблица 13. Модификаторы разделения
| Модификатор | Название | Положение | Пример | Описание | Детали |
|---|---|---|---|---|---|
| Пропуск правого отступа | (крайне) справа |
| Пропускает повторяющиеся символы справа | |
| Добавить | слева |
| Добавляет два или более поля вместе | |
| Добавить в порядке | слева и справа |
| Добавляет два или более поля вместе в указанном порядке | |
| Ключ пропуска с именем | слева |
| Пропускает сопоставленное значение в выводе. То же поведение, что и | |
| Ключи ссылки | слева |
| Устанавливает ключ вывода как значение |
Модификатор правого отступа (->)
Алгоритм, выполняющий разделение, очень строг и требует, чтобы все символы в шаблоне соответствовали строке-источнику. Например, шаблон %{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] |
Результат |
|
Модификатор добавления (+)
Dissect поддерживает добавление двух или более результатов вместе для вывода. Значения добавляются слева направо. Можно указать разделитель добавления. В этом примере разделитель append_separator определен как пробел.
Пример модификатора добавления
Шаблон |
|
Входные данные | john jacob jingleheimer schmidt |
Результат |
|
Модификатор добавления с порядком (+ и /n)
Dissect поддерживает добавление двух или более результатов вместе для вывода. Значения добавляются в соответствии с определенным порядком (/n). Можно указать разделитель добавления. В этом примере разделитель append_separator определен как запятая.
Пример модификатора добавления с порядком
Шаблон |
|
Входные данные | john jacob jingleheimer schmidt |
Результат |
|
Ключ пропуска с именем (?)
Dissect поддерживает игнорирование совпадений в конечном результате. Это можно сделать с помощью пустого ключа %{}, но для наглядности может быть желательно присвоить этому пустому ключу имя.
Пример модификатора ключа пропуска с именем
Шаблон |
|
Входные данные | 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/7.17/dissect-processor.html