Команды обработки логов
Команды обработки логов и событий представляют собой операторы и предложения 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]) |}