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