В этой публикации я покажу пример того как осуществляется Сбор журналов Windows в Elasticsearch. Примеры развертывания кластера Elasticsearch и хоста с Kibana уже есть в моём блоге. Можете использовать их в качестве опорных руководств по развертывания соответствующих компонентов.
Схема решения
Логическая схеме решения приведена ниже.

Схема ниже отображает физическую топологию решения.

Подготовка Elasticsearch
Выполним подготовку на стороне Elasticsearch.
1. Сначала я создам отдельную роль через Dev Tools для работы с индексами:
https://192.168.56.36:5601/app/dev_tools
2. Для этого я выполню следующий запрос:
POST _security/role/windows_server_logs
{
"cluster": ["manage_index_templates", "monitor", "manage_ilm"],
"indices": [
{
"names": [ "windows*" ],
"privileges": ["write","create","create_index","manage","manage_ilm","view_index_metadata","auto_configure","all"]
}
]
}

3. Теперь я создам отдельного пользователя:
POST _security/user/windows_server_logs_user
{
"password" : "Qwerty123",
"roles" : [ "windows_server_logs","ingest_admin","kibana_admin"],
"full_name" : "Logstash User for store logs from Windows Host"
}

4. Теперь необходимо скопировать сертификат корневого центра сертификации Elasticsearch, т.к. я использую сертификат от внутреннего ЦС, который был настроен при установке Elasticsearch. На любом из узлов Elasticsearch выполните команду:
cat /etc/elasticsearch/certs/http_ca.crt
Затем скопируйте содержимое файла в файл http_ca.crt (или любое на ваше усмотрение) на сервере с Winlogbeat. Пусть до этого сертификата корневого ЦС нужно будет указать в конфигурационном файле Winlogbeat.

Предварительная подготовка на стороне Elasticsearch завершена.
Настройка Winlogbeat
Для того чтобы настроить сбор журналов Windows в Elasticsearch необходимо выполнить следующие действия на хосте Windows:
2. Открыть на редактирование конфигурационный файл сервиса Winlogbeat.
"C:\Program Files\Winlogbeat\winlogbeat.yml"
3. Указать параметры сбора и отправки событий. Пример моего конфигурационного файла:
winlogbeat.event_logs:
- name: Application
ignore_older: 72h
- name: System
- name: Security
- name: Microsoft-Windows-Sysmon/Operational
- name: Windows PowerShell
event_id: 400, 403, 600, 800
- name: Microsoft-Windows-PowerShell/Operational
event_id: 4103, 4104, 4105, 4106
- name: ForwardedEvents
tags: [forwarded]
# ====================== Elasticsearch template settings =======================
setup.template.settings:
index.number_of_shards: 1
# ================================== General ===================================
tags: ["windows", "iis"]
# ---------------------------- Elasticsearch Output ----------------------------
output.elasticsearch:
hosts: ["https://192.168.56.40:9200","https://192.168.56.37:9200"]
index: "windows-%{+YYYY.MM.dd}"
username: windows_server_logs_user
password: Qwerty123
protocol: https
ssl.certificate_authorities: ["C:\\Program Files\\Winlogbeat\\http_ca.crt"]
setup.template:
name: "windows_log"
pattern: "windows-*"
# ================================= Processors =================================
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
- add_cloud_metadata: ~
В примере конфигурационного файла выше для журналов системы и приложения я буду отправлять в Elasticsearch события с уровнем серьезности “Предупреждение” и выше. Также необходимо указать пользователя и путь до сертификата корневого центра сертификации для подключения к Elasticsearch. Два этих шага мы выполняли в разделе с предварительной подготовкой.
Вот тут есть довольно большой список примеров различных событий и фильтраций. Возможно что-то из этого будет вам полезно..
4. Сохраняем внесенные изменения в конфигурационный файл Winlogbeat.
5. Перезапускаем службу Winlogbeat.
Restart-Service winlogbeat
Проверка
1. Сначала выполним проверку конфигурации Winlogbeat:
cd 'C:\Program Files\Winlogbeat\'
./winlogbeat test config
./winlogbeat test output
PS C:\Users\Administrator> cd 'C:\Program Files\Winlogbeat\'
PS C:\Program Files\Winlogbeat> ./winlogbeat test config
Config OK
PS C:\Program Files\Winlogbeat> ./winlogbeat test output
elasticsearch: https://192.168.56.40:9200...
parse url... OK
connection...
parse host... OK
dns lookup... OK
addresses: 192.168.56.40
dial up... OK
TLS...
security: server's certificate chain verification is enabled
handshake... OK
TLS version: TLSv1.3
dial up... OK
talk to server... OK
version: 8.13.2
elasticsearch: https://192.168.56.37:9200...
parse url... OK
connection...
parse host... OK
dns lookup... OK
addresses: 192.168.56.37
dial up... OK
TLS...
security: server's certificate chain verification is enabled
handshake... OK
TLS version: TLSv1.3
dial up... OK
talk to server... OK
version: 8.13.2
PS C:\Program Files\Winlogbeat>

2. Теперь перейдем в панель управления Kibana и убедимся, что наш шаблон индекса создан:
https://192.168.56.36:5601/app/management/data/index_management/templates
Шаблон индекса должен быть создан автоматически.

3. Теперь проверим наличие потоков данных:
https://192.168.56.36:5601/app/management/data/index_management/data_streams
Количество потоков данных зависит от даты последних событий в журналах Windows на исходной системе. В моем случае потоков было более 20 штук:

4. Последним шагом перейдем в панель Discover:
https://192.168.56.36:5601/app/discover
И создадим представление:

Имя можете указать любое, но вот шаблон нужно указать тот, что вы указывали в конфигурационном файле Winloagbeat.

Если вы все сделали верно, то в вашем представлении должны появиться данные с вашего хоста Windows с Winlogbeat:

Если что-то не работает
Например, если вы допустили ошибку в конфигурационном файле, то сервис Winlogbeat может не запуститься. Попробуйте выполнить запуск сервиса интерактивно из командной строки:
cd 'C:\Program Files\Winlogbeat\'
.\winlogbeat.exe -c .\winlogbeat.yml -e -v -d "*"
Если есть какие-то ошибки то они должны вывестись на консоль.
Журналы расположены вот тут:
C:\ProgramData\winlogbeat\Logs
Если сервис работает, но данные в Elasticsearch не поступают, то попробуйте включить журналирование.
logging.level: debug
logging.to_files: true
logging.files:
path: C:\ProgramData\winlogbeat\Logs
name: winlogbeat
keepfiles: 7
permissions: 0640