# Wazuh Log Data Collection - сбор журналов событий

> Настройка сбора логов в Wazuh 4.14 - localfile, syslog, JSON, EventChannel, macOS ULS, multi-line, удаленный syslog, ротация логов и метки

Source: https://opennix.org/docs/wazuh/capabilities/wazuh-log-data-collection/


Модуль Logcollector в Wazuh собирает и консолидирует журналы событий из различных источников - файлов на локальной системе, Windows Event Log, macOS Unified Logging System, удаленных устройств через syslog и выходных данных команд. Собранные данные передаются на сервер Wazuh, где модуль Analysisd выполняет декодирование, сопоставление с правилами и генерацию алертов. Правильная настройка сбора логов является основой всей системы мониторинга безопасности.

## Обзор источников логов

Wazuh поддерживает сбор данных из следующих типов источников:

- **Файловые логи** - syslog, JSON, Apache, Nginx, PostgreSQL, MySQL и другие форматы
- **Windows Event Log** - через механизм EventChannel с поддержкой XPATH-фильтрации
- **macOS Unified Logging System** - нативная интеграция с ULS через предикатные фильтры
- **Журнал systemd** - сбор из journald на Linux-системах
- **Удаленный syslog** - прием сообщений от сетевых устройств и приложений
- **Вывод команд** - периодическое выполнение команд и анализ их вывода

## Конфигурация localfile

Основным элементом конфигурации является блок `<localfile>` в файле `ossec.conf` на агенте. Каждый блок определяет один источник данных.

### Сбор файловых логов

```xml
<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/syslog</location>
</localfile>

<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/auth.log</location>
</localfile>
```

| Параметр | Описание |
|----------|----------|
| `location` | Путь к файлу лога, каналу событий, `macos` или `journald` |
| `log_format` | Формат лога (определяет метод разбора) |
| `only-future-events` | Читать только новые записи после старта (yes/no, по умолчанию yes) |
| `ignore_binaries` | Пропускать бинарные файлы (yes/no) |
| `age` | Обрабатывать только недавно измененные файлы (например, `1d`) |
| `exclude` | Шаблон для исключения файлов |

### Поддержка шаблонов в пути

Wazuh поддерживает подстановочные знаки и шаблоны дат в параметре `location`:

```xml
<!-- Подстановочный знак -->
<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/*.log</location>
</localfile>

<!-- Шаблон даты -->
<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/app-%Y-%m-%d.log</location>
</localfile>
```

## Форматы логов (log_format)

### syslog

Стандартный формат сообщений syslog. Используется для большинства системных журналов на Linux и Unix.

```xml
<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/messages</location>
</localfile>
```

### json

JSON-структурированные логи. Wazuh автоматически разбирает поля JSON-объекта и делает их доступными для правил обнаружения.

```xml
<localfile>
  <log_format>json</log_format>
  <location>/var/log/app/events.json</location>
  <label key="@source">application</label>
</localfile>
```

### multi-line

Логи, в которых одно событие занимает несколько строк. Параметр определяет фиксированное количество строк на событие.

```xml
<localfile>
  <log_format>multi-line:3</log_format>
  <location>/var/log/multiline-app.log</location>
</localfile>
```

Число после двоеточия указывает количество строк, объединяемых в одно событие.

### multi-line-regex

Для логов с переменным количеством строк на событие используется регулярное выражение для определения начала или конца записи:

```xml
<localfile>
  <log_format>multi-line-regex</log_format>
  <location>/var/log/java-app.log</location>
  <multiline_regex>^\d{4}-\d{2}-\d{2}</multiline_regex>
</localfile>
```

В этом примере каждое новое событие начинается с даты в формате `YYYY-MM-DD`.

### eventchannel

Сбор событий Windows через Event Channel API. Поддерживает XPATH-фильтрацию для отбора нужных событий.

```xml
<localfile>
  <location>Security</location>
  <log_format>eventchannel</log_format>
  <query>Event/System[EventID != 5145 and EventID != 5156]</query>
</localfile>
```

### macos

Сбор логов macOS через Unified Logging System (ULS). Поддерживает предикатные фильтры для уточнения выборки.

```xml
<localfile>
  <location>macos</location>
  <log_format>macos</log_format>
  <query type="log,trace" level="info">process == "sshd" OR process == "sudo"</query>
</localfile>
```

### journald

Сбор из журнала systemd:

```xml
<localfile>
  <location>journald</location>
  <log_format>journald</log_format>
  <filter field="_SYSTEMD_UNIT">sshd.service</filter>
</localfile>
```

### command и full_command

Выполнение команд и анализ вывода. `command` обрабатывает каждую строку отдельно, `full_command` - весь вывод как одно событие.

```xml
<localfile>
  <log_format>command</log_format>
  <command>df -P</command>
  <frequency>360</frequency>
</localfile>

<localfile>
  <log_format>full_command</log_format>
  <command>netstat -tulnp</command>
  <frequency>120</frequency>
  <alias>netstat-listening</alias>
</localfile>
```

### audit

Формат для чтения журнала Linux Audit (auditd):

```xml
<localfile>
  <log_format>audit</log_format>
  <location>/var/log/audit/audit.log</location>
</localfile>
```

## Удаленный syslog

Для приема syslog-сообщений от устройств, не поддерживающих установку агента (маршрутизаторы, коммутаторы, межсетевые экраны), на сервере Wazuh настраивается блок `<remote>`:

```xml
<remote>
  <connection>syslog</connection>
  <port>514</port>
  <protocol>udp</protocol>
  <allowed-ips>10.0.0.0/8</allowed-ips>
</remote>
```

| Параметр | Описание |
|----------|----------|
| `connection` | Тип подключения: `syslog` или `secure` (для агентов) |
| `port` | Порт прослушивания (по умолчанию 514) |
| `protocol` | Транспортный протокол: `udp` или `tcp` |
| `allowed-ips` | Разрешенные IP-адреса и подсети |
| `local_ip` | Локальный IP-адрес для прослушивания |
| `ipv6` | Включение поддержки IPv6 (yes/no) |

Для TCP-подключений:

```xml
<remote>
  <connection>syslog</connection>
  <port>514</port>
  <protocol>tcp</protocol>
  <allowed-ips>192.168.1.0/24</allowed-ips>
</remote>
```

## Windows EventChannel

Мониторинг журналов событий Windows настраивается через формат `eventchannel`. Поддерживаются все стандартные каналы (Security, System, Application) и пользовательские каналы приложений.

### Основные каналы

```xml
<localfile>
  <location>Security</location>
  <log_format>eventchannel</log_format>
</localfile>

<localfile>
  <location>System</location>
  <log_format>eventchannel</log_format>
</localfile>

<localfile>
  <location>Application</location>
  <log_format>eventchannel</log_format>
</localfile>
```

### Фильтрация через XPATH

XPATH-запросы позволяют отбирать конкретные события:

```xml
<!-- Только события входа в систему -->
<localfile>
  <location>Security</location>
  <log_format>eventchannel</log_format>
  <query>Event/System[EventID=4624 or EventID=4625]</query>
</localfile>

<!-- Исключение шумных событий -->
<localfile>
  <location>Security</location>
  <log_format>eventchannel</log_format>
  <query>Event/System[EventID != 5145 and EventID != 5156 and EventID != 4658]</query>
</localfile>
```

### Каналы Sysmon

```xml
<localfile>
  <location>Microsoft-Windows-Sysmon/Operational</location>
  <log_format>eventchannel</log_format>
</localfile>
```

### Каналы PowerShell

```xml
<localfile>
  <location>Microsoft-Windows-PowerShell/Operational</location>
  <log_format>eventchannel</log_format>
</localfile>
```

## macOS Unified Logging System

На macOS агент Wazuh использует Unified Logging System для сбора системных и прикладных логов. Фильтрация выполняется через предикатные выражения.

```xml
<localfile>
  <location>macos</location>
  <log_format>macos</log_format>
  <query type="log,trace" level="info">
    process == "sshd" OR process == "sudo" OR process == "login"
  </query>
</localfile>
```

| Атрибут query | Описание |
|---------------|----------|
| `type` | Типы записей: `log`, `trace`, `activity` |
| `level` | Минимальный уровень: `default`, `info`, `debug` |

Примеры предикатных фильтров:

```xml
<!-- Мониторинг авторизации -->
<localfile>
  <location>macos</location>
  <log_format>macos</log_format>
  <query type="log" level="info">subsystem == "com.apple.Authorization"</query>
</localfile>

<!-- Мониторинг сетевых подключений -->
<localfile>
  <location>macos</location>
  <log_format>macos</log_format>
  <query type="log" level="default">category == "connection"</query>
</localfile>
```

## Метки и теги (labels)

Метки позволяют добавлять произвольные поля к событиям, упрощая категоризацию и поиск:

```xml
<localfile>
  <log_format>json</log_format>
  <location>/var/log/webapp/access.json</location>
  <label key="@source">webapp-frontend</label>
  <label key="@environment">production</label>
</localfile>
```

Метки добавляются в JSON-вывод алерта и доступны для фильтрации в дашборде Wazuh.

## Обработка ротации логов

Wazuh автоматически отслеживает ротацию лог-файлов. Модуль Logcollector обнаруживает, когда файл был пересоздан или обрезан, и начинает чтение с начала нового файла. Для файлов с датой в имени используйте шаблоны:

```xml
<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/app/app-%Y-%m-%d.log</location>
</localfile>
```

Параметр `age` ограничивает обработку только недавними файлами:

```xml
<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/archive/*.log</location>
  <age>7d</age>
</localfile>
```

В этом примере обрабатываются только файлы, измененные за последние 7 дней.

## Перенаправление вывода (target и out_format)

Wazuh позволяет перенаправлять логи на дополнительные сокеты и форматировать вывод:

```xml
<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/secure</location>
  <target>agent,custom_socket</target>
  <out_format target="custom_socket">
    %(hostname)s: %(log)s
  </out_format>
</localfile>
```

## Параметры restrict и ignore

Фильтрация строк по регулярным выражениям:

```xml
<!-- Обрабатывать только строки с ошибками -->
<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/application.log</location>
  <restrict>ERROR|CRITICAL|FATAL</restrict>
</localfile>

<!-- Пропускать строки с отладочной информацией -->
<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/application.log</location>
  <ignore>DEBUG|TRACE</ignore>
</localfile>
```

## Сравнение с другими платформами

| Возможность | Wazuh Logcollector | Splunk Inputs | Logstash / Filebeat |
|-------------|-------------------|---------------|---------------------|
| Файловые логи | localfile с шаблонами | monitor / inputs.conf | file input plugin / filebeat |
| Windows EventLog | eventchannel + XPATH | WinEventLog | winlogbeat |
| macOS ULS | Нативная поддержка | Нет нативной | Нет нативной |
| Удаленный syslog | Встроенный приемник | Встроенный (UDP/TCP) | syslog input plugin |
| JSON-логи | Автоматический разбор | Автоматический разбор | json codec |
| Multi-line | Фиксированный и regex | Настраиваемый | multiline codec |
| Команды | command / full_command | scripted input | exec input |
| Фильтрация на агенте | restrict / ignore | Нет (фильтрация на сервере) | processors / include_lines |
| Стоимость | Бесплатно | Коммерческая | Бесплатно (базовая) |

## Конвейер обработки логов

Собранные логи проходят через три этапа обработки на сервере Wazuh:

1. **Предварительное декодирование** - извлечение базовых полей (временная метка, имя хоста, программа)
2. **Декодирование** - структурированный разбор полей с использованием деко деров
3. **Сопоставление с правилами** - генерация алертов на основании правил обнаружения

Все логи (включая не вызвавшие алертов) сохраняются в архив `/var/ossec/logs/archives/` для ретроспективного анализа, если архивирование включено.

Подробнее о деко дерах: [Архитектура Wazuh](/docs/wazuh/getting-started/wazuh-architecture/)

## Устранение неполадок

### Логи не собираются

- Проверьте, что путь в `<location>` существует и доступен для чтения пользователю `wazuh`
- Убедитесь, что `<log_format>` соответствует реальному формату лога
- Проверьте `/var/ossec/logs/ossec.log` на наличие ошибок Logcollector
- Для подстановочных шаблонов убедитесь, что файлы соответствуют указанному шаблону

### Windows EventChannel не работает

- Проверьте точное имя канала событий (с учетом регистра)
- Валидируйте XPATH-запрос в `<query>` через Windows Event Viewer
- Убедитесь, что параметр `<reconnect_time>` установлен (по умолчанию 5s)
- Проверьте, что агент запущен с правами администратора

### macOS ULS не возвращает события

- Проверьте синтаксис предикатного выражения в `<query>`
- Убедитесь, что уровень (`level`) не слишком высокий для искомых событий
- Протестируйте предикат через команду `log stream --predicate` в терминале

### Высокое потребление ресурсов

- Используйте `<restrict>` и `<ignore>` для фильтрации ненужных строк
- Увеличьте `<frequency>` для команд с частым выводом
- Ограничьте `<age>` для директорий с большим количеством файлов
- Используйте XPATH-фильтрацию для EventChannel, чтобы исключить шумные события

Подробнее об установке агентов: [Установка агента Wazuh](/docs/wazuh/installation/wazuh-agent-installation/)

Подробнее о сценариях использования: [Сценарии использования Wazuh](/docs/wazuh/getting-started/wazuh-use-cases/)

