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

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

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

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

Конфигурация

Блок when располагается на уровне конфигурации модуля и содержит ровно одно из следующих условий:

УсловиеТип значенияОписание
equalsmap[string]stringТочное совпадение значений полей
containsmap[string]stringПоле содержит значение (подстрока, элемент массива)
regexpmap[string]stringСовпадение поля с регулярным выражением
comparemap[string]objectЧисловое сравнение значения поля
has-fieldsstring[]Наличие указанных полей в событии
orarrayЛогическое ИЛИ — список вложенных условий
andarrayЛогическое И — список вложенных условий
notobjectЛогическое НЕ — инвертирует вложенное условие
celobjectCEL-выражения
processors:
- module: <любой модуль>
# ... конфигурация модуля ...
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, int64, uint64, int32, uint32, float32, float64, time, uint8, uint16, 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

Объект с полями expressions (обязательно), xml-xsd и globals (опционально). Модуль применяется, когда каждое CEL-выражение из списка expressions возвращает true. CEL-окружение аналогично модулю deny.

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

С глобальными переменными:

processors:
- module: assign
assign:
- target: ECS.Event.Severity
cel: '"high"'
when:
cel:
globals:
threshold: 100
expressions:
- 'int(event.vars("ECS.Event.Code")) > threshold'