Назначение #
Сервис daemonmove входит в состав системы Suri Oculus и отвечает за обработку логов Suricata.
Он получает поток событий, передаваемых Suricata в Redis, распределяет их по типам (alert, flow, dns и т.д.) и формирует статистику для последующего анализа.
В версии 3.0 переработан механизм синхронизации и добавлены новые параметры конфигурации, обеспечивающие стабильную работу даже на слабых устройствах.
Основные изменения в версии 3.0 #
-
Глобальная блокировка (lock) на время всего цикла обработки — гарантирует согласованность данных в Redis.
-
Параметр
sleeping_time— задаёт интервал ожидания между циклами, снижая нагрузку. -
Параметр
lock_expiration_time— управляет временем жизни блокировки Redis (TTL). -
Корректная остановка по SIGTERM — сервис завершает текущий цикл, снимает lock и выходит безопасно.
-
Новая утилита
daemonmovetest— измеряет время выполнения отдельных операций (redistransfer,timeregister,make_stat).
Конфигурация conf.cfg #
Файл конфигурации находится в /etc/redismove/ и имеет формат:
# application configuration file
application:
{
main:
{
title = "REDISMOVE";
version = "3.0.0";
date = "29 Oct 2025";
};
settings:
{
main_key = "suricata";
keys = ("alert", "anomaly", "dcerpc","flow","http","dns","drop","stats_report","fileinfo","tls","stats","ftp","sip","smb","snmp","ssh","flow_data","tftp","ssh","bittorrent_dht","rdp","http2","pqsql","quic","modbus");
valid_duration = 24;
log_file = "/var/log/suricata/eve.json";
temp_file = "/tmp/daemonparser/current";
sleeping_time = 160; # интервал ожидания между циклами (в секундах)
lock_expiration_time = 90; # TTL блокировки Redis (в секундах)
};
};
Основные параметры:
| Параметр | Описание |
|---|---|
main_key |
основной ключ верхнего уровня в Redis |
keys |
список типов событий Suricata, распределяемых по отдельным спискам |
valid_duration |
период (в часах), в течение которого события считаются актуальными |
log_file |
путь к файлу логов Suricata (используется для отладочных целей) |
temp_file |
временный файл для промежуточных данных |
sleeping_time |
пауза между циклами работы daemonmove (в секундах) |
lock_expiration_time |
время жизни ключа блокировки Redis (в секундах) |
Работа сервиса #
Каждый цикл daemonmove выполняет три последовательных этапа:
-
redistransfer()— перенос данных между списками Redis; -
timeregister()— удаление устаревших элементов по времени; -
make_stat()— формирование и сохранение сводной статистики.
После выполнения всех этапов сервис снимает глобальный lock и ожидает следующий цикл в течение sleeping_time секунд.
Время работы каждого этапа и всего цикла записывается в системный журнал и может быть проверено через утилиту daemonmovetest.
Управление сервисом #
sudo systemctl start daemonmove
sudo systemctl stop daemonmove
sudo systemctl restart daemonmove
sudo systemctl status daemonmove
Рекомендованный порядок обновления #
-
Остановить Suricata:
systemctl stop suricata -
Подождать 10 секунд (очистка очередей).
-
Остановить daemonmove:
systemctl stop daemonmove -
Установить обновление.
-
Запустить daemonmove:
systemctl start daemonmove -
Через 5 секунд запустить Suricata:
systemctl start suricata
Утилита daemonmovetest #
Вспомогательная программа для измерения времени работы основных функций сервиса.
Она выполняет один цикл обработки и выводит в лог время выполнения каждой операции и общее время цикла.
Используется для проверки производительности и отладки на различных устройствах.
Итоги #
Версия 3.0 сервиса daemonmove предлагает:
-
устойчивую и предсказуемую работу при небольшом потреблении памяти;
-
чёткое управление циклом и блокировками в Redis;
-
корректную остановку и перезапуск без потери данных;
-
встроенные инструменты измерения времени и диагностики.