Условное выполнение модулей (when)
Условное выполнение модулей (when)
Блок when позволяет задать условие выполнения для любого модуля плагина processors. Если блок when не указан — модуль выполняется безусловно (для всех событий). Если указан — модуль применяется к событию только при выполнении заданного условия.
Конфигурация
Блок when располагается на уровне конфигурации модуля и содержит ровно одно из следующих условий:
| Условие | Тип значения | Описание |
|---|---|---|
equals | map[string]string | Точное совпадение значений полей |
contains | map[string]string | Поле содержит значение (подстрока, элемент массива) |
regexp | map[string]string | Совпадение поля с регулярным выражением |
compare | map[string]object | Числовое сравнение значения поля |
has-fields | string[] | Наличие указанных полей в событии |
or | array | Логическое ИЛИ — список вложенных условий |
and | array | Логическое И — список вложенных условий |
not | object | Логическое НЕ — инвертирует вложенное условие |
cel | object | CEL-выражения |
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'