Фильтрация Message в логах Winlogbeat

Добрый день.

Планируем собирать логи авторизаций на контроллерах домена, чтобы смотреть кто логинится под одной учётной записью на несколько компьютеров. Поставили сбор событий с кодом 4,624, но есть одна проблема - логов очень много и бОльшая часть текста в поле message в таких сообщениях лишняя. Есть ли какой-нибудь способ разбивать поле message на несколько более мелких полей, чтобы удалять ненужную информацию? В идеале без grok, так как даже не представляю насколько огромным будет выражение для таких логов.

https://www.elastic.co/guide/en/elasticsearch/reference/master/ingest.html

В моем случае вероятно подойдет вот это ?https://www.elastic.co/guide/en/elasticsearch/reference/current/split-processor.html

Если я правильно понимаю, ingest работает для всех входящих логов вообще. Разве его можно применить только к тем, в которых будет event.code 4624?

Кажется нашел подходящий фильтр - https://www.elastic.co/guide/en/logstash/current/plugins-filters-split.html. Он как раз разбивает message построчно, только на каждую строчку создает отдельный документ. Теперь буду разбираться как их объединить в один, но только по нужным строкам. Если подскажете в каком направлении смотреть, буду очень признателен.

Оказалось я пропустил один фильтр, который был настроен на удаление всех полей, кроме 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ГБ.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.