Команды обработки логов: различия между версиями

Материал из Документация Ключ-АСТРОМ
(Новая страница: «Команды обработки логов и событий представляют собой операторы и предложения DQL. Опреде...»)
 
 
Строка 156: Строка 156:
==== Примеры: ====
==== Примеры: ====


* В следующем примере мы отбрасываем записи, в которых <code>_raw_text</code> (исходный необработанный текст записи) содержит строку <code>vpns</code> или <code>_raw_text</code> является <code>NULL</code> {| class="wikitable" |FILTER_OUT(contains(_raw_text, '/vpns/')) |}
* В следующем примере мы отбрасываем записи, в которых <code>_raw_text</code> (исходный необработанный текст записи) содержит строку <code>vpns</code> или <code>_raw_text</code> является <code>NULL</code>  <br />{| class="wikitable" |FILTER_OUT(contains(_raw_text, '/vpns/')) |}
* В следующем примере мы отбрасываем записи, где тип строкового поля равен <code>logout</code> или тип равен <code>NULL</code> {| class="wikitable" |FILTER_OUT(type = 'logout') |}
* В следующем примере мы отбрасываем записи, где тип строкового поля равен <code>logout</code> или тип равен <code>NULL</code>  <br />{| class="wikitable" |FILTER_OUT(type = 'logout') |}
* В следующем примере мы отбрасываем записи, в которых поле временной метки <code>last_modified</code> больше 7 дней назад или <code>last_modified</code> равно <code>NULL</code> {| class="wikitable" |FILTER_OUT(last_modified >= now()[-7 day]) |}
* В следующем примере мы отбрасываем записи, в которых поле временной метки <code>last_modified</code> больше 7 дней назад или <code>last_modified</code> равно <code>NULL</code>  <br />{| class="wikitable" |FILTER_OUT(last_modified >= now()[-7 day]) |}

Текущая версия на 18:59, 1 декабря 2024

Команды обработки логов и событий представляют собой операторы и предложения DQL. Определение правила позволяет определить последовательность команд для достижения желаемой цели правила обработки.

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

PARSE

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

Примеры:

  • Анализ атрибутов из разных форматов в рамках одного шаблонного выражения.
  • Выделение определенных полей из содержимого JSON.

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_REMOV

Команда 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
    {| class="wikitable" |FILTER_OUT(contains(_raw_text, '/vpns/')) |}
  • В следующем примере мы отбрасываем записи, где тип строкового поля равен logout или тип равен NULL
    {| class="wikitable" |FILTER_OUT(type = 'logout') |}
  • В следующем примере мы отбрасываем записи, в которых поле временной метки last_modified больше 7 дней назад или last_modified равно NULL
    {| class="wikitable" |FILTER_OUT(last_modified >= now()[-7 day]) |}