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