Spec-Zone.ru › Elasticsearch 7
›Руководство по Elasticsearch [7.17] ›Конвейеры индексирования ›Справочник по процессорам индексирования

Процессор 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

Название Обязательно По умолчанию Описание

field

да

-

Поле для анализа

pattern

да

-

Шаблон для применения к полю

append_separator

нет

"" (пустая строка)

Символ(ы), разделяющие добавленные поля.

ignore_missing

нет

false

Если true и field не существуют или являются null, процессор тихо завершает работу, не изменяя документ.

description

нет

-

Описание процессора. Полезно для описания назначения процессора или его конфигурации.

if

нет

-

Условное выполнение процессора. Смотрите Условное выполнение процессора.

ignore_failure

нет

false

Игнорировать ошибки для процессора. Смотрите Обработка сбоев конвейера.

on_failure

нет

-

Обработка ошибок для процессора. Смотрите Обработка сбоев конвейера.

tag

нет

-

Идентификатор процессора. Полезно для отладки и метрик.

{
  "dissect": {
    "field": "message",
    "pattern" : "%{clientip} %{ident} %{auth} [%{@timestamp}] \"%{verb} %{request} HTTP/%{httpversion}\" %{status} %{size}"
   }
}

Ключевые модификаторы разделения

Ключевые модификаторы могут изменять поведение по умолчанию для разделения. Ключевые модификаторы могут находиться слева или справа от %{keyname} всегда внутри %{ и }. Например, %{+keyname ->} имеет модификаторы добавления и правого отступа.

Таблица 13. Модификаторы разделения

Модификатор Название Положение Пример Описание Детали

->

Пропуск правого отступа

(крайне) справа

%{keyname1->}

Пропускает повторяющиеся символы справа

ссылка

+

Добавить

слева

%{+keyname} %{+keyname}

Добавляет два или более поля вместе

ссылка

+ с /n

Добавить в порядке

слева и справа

%{+keyname/2} %{+keyname/1}

Добавляет два или более поля вместе в указанном порядке

ссылка

?

Ключ пропуска с именем

слева

%{?ignoreme}

Пропускает сопоставленное значение в выводе. То же поведение, что и %{}

ссылка

* и &

Ключи ссылки

слева

%{*r1} %{&r1}

Устанавливает ключ вывода как значение * и значение вывода &

ссылка

Модификатор правого отступа (->)

Алгоритм, выполняющий разделение, очень строг и требует, чтобы все символы в шаблоне соответствовали строке-источнику. Например, шаблон %{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->} и %{->}

Пример модификатора правого отступа

Шаблон

%{ts->} %{level}

Входные данные

1998-08-10T17:15:42,466 WARN

Результат

  • ts = 1998-08-10T17:15:42,466
  • level = WARN

Модификатор правого отступа можно использовать с пустым ключом, чтобы пропустить нежелаемые данные. Например, та же строка входных данных, но обернутая в скобки, требует использования пустого ключа с правым отступом, чтобы получить тот же результат.

Пример модификатора правого отступа с пустым ключом

Шаблон

[%{ts}]%{->}[%{level}]

Входные данные

[1998-08-10T17:15:42,466] [WARN]

Результат

  • ts = 1998-08-10T17:15:42,466
  • level = WARN

Модификатор добавления (+)

Dissect поддерживает добавление двух или более результатов вместе для вывода. Значения добавляются слева направо. Можно указать разделитель добавления. В этом примере разделитель append_separator определен как пробел.

Пример модификатора добавления

Шаблон

%{+name} %{+name} %{+name} %{+name}

Входные данные

john jacob jingleheimer schmidt

Результат

  • name = john jacob jingleheimer schmidt

Модификатор добавления с порядком (+ и /n)

Dissect поддерживает добавление двух или более результатов вместе для вывода. Значения добавляются в соответствии с определенным порядком (/n). Можно указать разделитель добавления. В этом примере разделитель append_separator определен как запятая.

Пример модификатора добавления с порядком

Шаблон

%{+name/2} %{+name/4} %{+name/3} %{+name/1}

Входные данные

john jacob jingleheimer schmidt

Результат

  • name = schmidt,john,jingleheimer,jacob

Ключ пропуска с именем (?)

Dissect поддерживает игнорирование совпадений в конечном результате. Это можно сделать с помощью пустого ключа %{}, но для наглядности может быть желательно присвоить этому пустому ключу имя.

Пример модификатора ключа пропуска с именем

Шаблон

%{clientip} %{?ident} %{?auth} [%{@timestamp}]

Входные данные

1.2.3.4 - - [30/Apr/1998:22:00:52 +0000]

Результат

  • clientip = 1.2.3.4
  • @timestamp = 30/Apr/1998:22:00:52 +0000

Ключи ссылок (* и &)

Поддержка разбора, используя парные значения ключ/значение для структурированного содержимого. Представьте систему, которая частично регистрирует пары ключ/значение. Ключи ссылок позволяют поддерживать это отношение ключ/значение.

Пример модификатора ключа ссылки

Шаблон

[%{ts}] [%{level}] %{*p1}:%{&p1} %{*p2}:%{&p2}

Входные данные

[2018-08-10T17:15:42,466] [ERR] ip:1.2.3.4 error:REFUSED

Результат

  • ts = 2018-08-10T17:15:42,466
  • level = 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API