К основному содержанию

Кейс

TrueNAS не отдаёт файловый аудит в syslog и не помнит, что уже отдал. Собрали его в ELK поллером с курсором

Кто создал, удалил, переименовал и сколько данных прочитал на сетевой шаре — эти события в TrueNAS есть, но в syslog их нет, а API отдаёт всё заново при каждом запросе. Написали поллер, который ходит по WebSocket, помнит позицию и не теряет события, даже когда приёмник недоступен.

120 000событий SMB в сутки с одного хранилища — без пропусков и дублей
Забираем только новое, позицию храним у себя

Схема читается сверху вниз. Соединение открывается только с нашей стороны: на хранилище ничего не устанавливается и входящих подключений к нему нет.

01Обычный ход

TrueNAS SCALEАудит SMB-шар во внутренней базе хранилища; в syslog он не попадает
ПоллерОдно соединение wss, JSON-RPC, ключ только на чтение аудита; запрашивает события новее курсора, постранично
Logstash и ElasticsearchЕдиная схема полей, полный сетевой путь, дедупликация по идентификатору, 180 дней

Около 15 секунд от действия пользователя до строки в Kibana

02Приёмник недоступен

Приёмник не отвечаетУпал Logstash, оборвалась сеть, перезапустили разбор
Курсор стоитПозиция сдвигается только после того, как порция принята
Досбор с той же точкиХранилище держит неделю аудита — этого хватает пережить любой простой сбора

Граничная секунда перечитывается, повторы гасятся дедупликацией: ни дыр, ни дублей

Задача

Заказчику нужно было видеть по файловым шарам: кто, когда, с какого адреса и что сделал с файлом — включая объём прочитанных данных, чтобы замечать массовое копирование.

Срок хранения аудита на самом хранилище — неделя, и место под него ограничено. Значит, события нужно было забирать в общий ELK, где они живут долго и доступны для поиска и оповещений.

Почему не получилось «просто включить отправку логов»

Три препятствия, каждое из которых меняет архитектуру:

  1. Файловых операций нет в syslog. У TrueNAS два независимых потока: системный syslog (здоровье, служебное) и аудит (структурированный JSON во внутренней БД). Кто и что сделал с файлом — живёт только во втором, и достучаться до него можно только через API. Привычная схема «хранилище само шлёт логи в коллектор» здесь неприменима.

  2. API — WebSocket, а не привычный HTTP-запрос. Поддерживаемый интерфейс — JSON-RPC поверх wss: соединение устанавливается один раз, вход по API-ключу, дальше запросы идут внутри него. Прежний REST-интерфейс объявлен устаревшим и удаляется в ближайших версиях, строить на нём новое нельзя.

  3. Хранилище не помнит, что уже отдало. Оно отвечает на запрос «дай события» — и всё. Любой опрос без состояния тянет одно и то же окно снова и снова: лишний трафик, дубли в базе и при этом никакой гарантии, что ничего не потерялось между запросами. Позицию чтения обязан хранить тот, кто забирает.

Что сделали

Результат

События SMB в сутки с одного хранилища ~120 000
Шар под аудитом 22
Задержка «действие → поиск в Kibana» ~15 секунд
Потери при недоступности приёмника нет — курсор не сдвигается
Дубли при повторной передаче нет — дедупликация по идентификатору события
Права на хранилище только чтение аудита
Хранение 180 дней в ELK (на самом хранилище — 7 дней)

По каждому событию видно: пользователь, адрес, время, действие (создал / прочитал / удалил / переименовал / переместил), полный путь к файлу и объём прочитанных данных. На этих данных строится обнаружение массового копирования — по числу разных файлов, открытых одним пользователем за минуту.

Важное ограничение: подходит не любой TrueNAS

Так что первый шаг на любом объекте — не установка, а проверка версии.

Чем можем помочь

Развернём сбор файлового аудита с ваших хранилищ TrueNAS в ELK: проверим пригодность версий, настроим права и аудит на шарах, поднимем сбор с гарантией «ничего не потеряно и ничего не задвоено», нормализуем события и соберём в Kibana панель с обнаружением массового копирования.

Если часть парка на CORE — скажем честно, что там возможно, а что нет, и предложим маршрут: обновление или временная схема.

Все кейсы