Оказалось я пропустил один фильтр, который был настроен на удаление всех полей, кроме message. По умолчанию события, полученные через winlogbeat, уже разбиваются на нужные строки, нужно было только убрать лишнее. Решил это вот так:
winlogbeat:
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
- drop_fields:
fields: [winlog.event_data.ElevatedToken, winlog.event_data.ImpersonationLevel, winlog.event_data.KeyLength, winlog.event_data.LmPackageName, winlog.event_data.LogonGuid, winlog.event_data.RestrictedAdminMode, winlog.event_data.TargetLinkedLogonId, winlog.provider_guid, winlog.process.pid, winlog.event_data.TargetLogonId, winlog.event_data.TargetOutboundDomainName, winlog.event_data.TargetOutboundUserName, winlog.event_data.TargetUserSid, winlog.event_data.TransmittedServices, winlog.event_data.VirtualAccount, winlog.keywords, winlog.opcode, winlog.provider_name, winlog.record_id, winlog.process.thread.id, winlog.version]
logstash:
# Domain Controllers logs filtering
if "windc" in [tags] and [event][code] == 4776 and [winlog][event_data][Status] == "0x0" {
drop {}
}
if "windc" in [tags] and [event][code] == 4776 {
prune {
remove_field => ["[agent][id]","[agent][ephemeral_id]","[agent][hostname]","[agent][type]","[agent][version]","[ecs][version]","[event][kind]","[host][architecture]","[host][hostname]","[host][os][build]","[host][os][family]","[host][os][kernel]","[host][os][platform]","[host][os][version]"]
blacklist_names => ["^.*winlog.*"]
}
}
# Domain Controllers logon events
if "windc" in [tags] and [event][code] == 4624 and [winlog][event_data][TargetUserName] == "admin1 or [winlog][event_data][TargetUserName] == "admin2" {
drop {}
}
if "windc" in [tags] and [event][code] == 4624 {
prune {
remove_field => ["[agent][id]","[agent][ephemeral_id]","[agent][hostname]","[agent][type]","[agent][version]","[ecs][version]","[event][kind]","[host][architecture]","[host][hostname]","[host][os][build]","[host][os][family]","[host][os][kernel]","[host][os][platform]","[host][os][version]"]
blacklist_names => ["message"]
}
}
Получилось немного громоздко, но в целом то, что нужно. Можно будет еще немного подкрутить фильтры, чтобы сбрасывать лишние события, а оставшиеся еще чуть больше подрезать. Но даже так дневной индекс уменьшился с 10ГБ до 4ГБ.