Перейти к основному содержимому
Версия: 4.6.X

Условное выполнение модулей плагина processors

Условное выполнение модулей

Модули плагина processors поддерживают блок when, определяющий, будет ли модуль применен к конкретному событию. Если блок when не указан, модуль выполняется безусловно (для каждого события).

processors:
- module: <тип_модуля>
# параметры модуля
when:
<условие>: <значение>

Блок when содержит ровно одно из перечисленных ниже условий.


equals

Словарь «поле — значение». Модуль применяется, когда событие содержит все указанные поля и их значения точно совпадают с заданными.

processors:
- module: syslog
parser: auto
when:
equals:
ECS.Source.Service.Name: syslog

contains

Словарь «поле — значение». Модуль применяется, когда событие содержит все указанные поля и каждое поле содержит заданное значение. Смысл «содержит» зависит от типа поля:

Тип поляПоведение
string_slice, ip_slice, uint64_slice, int_sliceМассив содержит значение как элемент
event_kinds, event_categories, event_outcomes, event_typesМассив содержит все элементы из указанного значения-массива
Прочие типыСтроковое представление поля содержит значение как подстроку
processors:
- module: enrich
timeout: 10s
disable-cache: true
type: ldap
enricher-config:
url: ldap://example.domain:389
tls:
disable: true
username: reader@example.domain
password-secret: LDAP_PASSWORD_EXAMPLE
base-dn: dc=example,dc=domain
filter: "(&(memberOf=*CN=${DomainGroup})(uid=${ECS.User.Name}))"
attributes-mapping:
mail: ECS.User.Email
enriching-strategy: first
when:
contains:
ECS.User.Roles: admin

regexp

Словарь «поле — регулярное выражение». Модуль применяется, когда строковое представление каждого указанного поля совпадает с соответствующим регулярным выражением.

processors:
- module: ecs
when:
regexp:
Raw: ^\{

compare

Словарь «поле — операции сравнения». Модуль применяется, когда значение каждого поля удовлетворяет всем заданным операциям сравнения.

Доступные операции:

ОперацияОписание
ltМеньше
lteМеньше или равно
gtБольше
gteБольше или равно

Поддерживаемые типы полей: int, int32, int64, uint8, uint16, uint32, uint64, float32, float64, time, duration.

processors:
- module: nginx
enabled: [access]
format: plain
when:
compare:
ECS.AS.Number:
gte: 1
lte: 5

has-fields

Список полей. Модуль применяется, когда событие содержит все указанные поля (значения полей не проверяются).

processors:
- module: assign
assign:
- target: ECS.Log.SyslogPriority
cel: 'event.vars("ECS.Log.SyslogSeverityCode") + 8 * event.vars("ECS.Log.SyslogFacilityCode")'
when:
has-fields: ["ECS.Log.SyslogSeverityCode", "ECS.Log.SyslogFacilityCode"]

or

Список вложенных условий. Модуль применяется, когда хотя бы одно условие из списка истинно (логическое ИЛИ).

processors:
- module: dns
fields:
ECS.Source.IP: ECS.Source.Domain
action: replace
success_cache:
capacity.initial: 1000
capacity.max: 10000
min_ttl: 1m
failure_cache:
capacity.initial: 1000
capacity.max: 10000
min_ttl: 1m
nameservers: ['10.0.0.2']
timeout: 500s
when:
or:
- regexp:
ECS.Source.IP: ^10\.
- regexp:
ECS.Source.IP: ^172\.
- regexp:
ECS.Source.IP: ^192\.

and

Список вложенных условий. Модуль применяется, когда каждое условие из списка истинно (логическое И).

processors:
- module: enrich
timeout: 10s
disable-cache: true
type: dynamic_list
enricher-config:
list-name: my_list
mapping:
key: ECS.Some.Key
field: ECS.Some.Field
when:
and:
- equals:
Producer: aggregator
- compare:
Count:
gte: 10

not

Вложенное условие. Модуль применяется, когда внутреннее условие ложно (логическое НЕ).

processors:
- module: ecs
when:
not:
contains:
Raw: ALERT

cel

Объект с полями:

ПолеОписание
xml-xsdОпределения XML для CEL-окружения
globalsГлобальные переменные для CEL-окружения
expressionsСписок булевых CEL-выражений

Модуль применяется, когда каждое выражение из списка expressions истинно для события. Окружение CEL соответствует окружению модуля deny.

processors:
- module: rename
rules: ["First:Second"]
when:
cel:
expressions:
- event.vars("First") == event.vars("Second")

Комбинирование условий

Условия or, and и not можно вкладывать друг в друга для построения произвольно сложной логики. При этом каждый блок when содержит ровно одно корневое условие.

processors:
- module: ecs
when:
and:
- has-fields: ["ECS.Source.IP"]
- not:
equals:
Producer: aggregator
- or:
- regexp:
Raw: ^\{
- contains:
ECS.Event.Module: syslog