Команды обработки логов

Материал из Документация Ключ-АСТРОМ
Версия от 18:21, 13 октября 2026; IKuznetsov (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Команды обработки логов

Команды обработки логов и событий представляют собой операторы и предложения DQL. Определение правила позволяет задать последовательность команд для достижения нужной цели правила обработки. Определение правила обработки состоит из последовательности команд обработки, соединённых слева направо символом вертикальной черты (|). Концептуально это похоже на конвейер команд Unix, где вывод команды слева от символа | становится вводом для команды справа. Пайплайн всегда должен начинаться с команды, создающей структурированный поток данных для последующих команд.

PARSE

Команда PARSE разбирает выбранное поле с помощью заданного выражения-шаблона (Язык шаблонов Ключ-АСТРОМ), дополняя запись лога экспортированными значениями.

Примеры

USING

Команда USING задаёт входные данные для данной трансформации, перечисляя поля с опциями, которые могут быть переданы из входящего события в трансформацию. Эта команда должна быть первой командой, используемой в определении процессора.

Формат объявления полей: USING(<field_expression>, <field_expression>, ...)

Формат выражения поля: [IN|INOUT] name: [type[]?]

Команда USING в определении процессора эквивалентна оператору USING(IN content:STRING).

Опции:

  • IN — поле только для чтения, опция по умолчанию.
  • INOUT — записываемое поле.
  • type — один из следующих типов: STRING, BOOLEAN, INTEGER, LONG, DOUBLE, DURATION, TIMESTAMP, IPADDR.
  • [] — помечает поле как массив, что означает, что будет передано несколько значений атрибута.
  • ? — помечает поле как необязательное, что означает, что трансформация будет выполнена, даже если такого атрибута нет в событии.

Пример: USING(content, event.type:STRING?, INOUT attribute:INT[]) | ...

В этом случае три поля передаются из входящего события в трансформацию:

  • content — строковое поле только для чтения
  • event.type — необязательное строковое поле только для чтения
  • attribute — записываемый массив целых чисел

FIELDS_ADD

Команда FIELDS_ADD задаёт разделённый запятыми список литералов, функций, имён полей и выражений для вычисления.

Формат: FIELDS_ADD( [ alias':' ] { * | alias.* | '@'position | function | expression | literal } [ , ... ])

Каждое выражение можно переименовать с помощью псевдонима. Псевдонимы, определённые в команде select, можно использовать в последующих командах пайплайна.

Пример

В следующем примере мы вычисляем сумму field1 и field2 и помещаем результат в поле с именем mySum.

field1 field2
300 650

FIELDS_ADD(mySum:(field1 + field2))

field1 field2 mySum
300 650 950

FIELDS_RENAME

Команда FIELDS_RENAME переименовывает указанные поля записи. Она сохраняет порядок полей и другие поля.

Формат: FIELDS_RENAME(newName:field, name2:field2, ...)

Пример

В следующем примере мы переименовываем поле ip в src_addr, а поле f — в value.

t ip s f
2020-09-23 15:14:42.947 +0300 0.0.0.0 0ho0 0.0

FIELDS_RENAME(src_addr:ip, value:f)

t src_addr s value
2020-09-23 15:14:42.947 +0300 0.0.0.0 0ho0 0.0

FIELDS_REMOVE

Команда FIELDS_REMOVE удаляет указанные поля из выходного потока. Команда полезна в сценариях, исключающих конфиденциальные поля.

Формат: FIELDS_REMOVE(field, field, ...)

Пример

В следующем примере мы добавляем поля t, ip, s и f. Затем мы удаляем поля s и ip, оставляя нам поля t и f.

FIELDS_REMOVE(s, ip)

t f
2020-09-23 15:17:39.497 +0300 0.0
2020-09-23 15:17:39.498 +0300 1.0
2020-09-23 15:17:39.499 +0300 2.0

FILTER_OUT

Команда FILTER_OUT отбрасывает всю запись, используя выражение, возвращающее логическое значение (boolean_expression). Это команда отрицательной фильтрации. Она может состоять из нескольких логических выражений, объединённых операторами AND, OR и NOT. Если условие выполнено, вся запись отбрасывается и не передаётся на следующую стадию.

Например, можно отбросить все записи с уровнем лога DEBUG или debug.

Формат: FILTER_OUT(loglevel IN ['DEBUG', 'debug'])

Примеры

  • В следующем примере мы отбрасываем записи, где _raw_text (исходный текст необработанной записи) содержит строку vpns или _raw_text равно NULL:

FILTER_OUT(contains(_raw_text, '/vpns/'))

  • В следующем примере мы отбрасываем записи, где строковое поле type равно logout или type равно NULL:

FILTER_OUT(type = 'logout')

  • В следующем примере мы отбрасываем записи, где поле временной метки last_modified больше 7 дней назад или last_modified равно NULL:

FILTER_OUT(last_modified >= now()[-7 day])