Условное выполнение модулей плагина 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