UniSet 2.32.1
|
LogDB это сервис, работа которого заключается в подключении к указанным лог-серверам, получении от них логов и сохранении их в БД (sqlite). Помимо этого LogDB выступает в качестве REST сервиса, позволяющего получать логи за указанный период в виде json.
Реализация намеренно простая, т.к. пока неясно нужно ли это и в каком виде. Ожидается что контролируемых логсерверов будет не очень много (максимум несколько десятков) и каждый лог будет генерировать не более 2-5 мегабайт записей. Поэтому sqlite должно хватить.
Для конфигурования необходимо создать секцию вида:
При этом доступно два способа: Первый - это использование секции в общем файле проекта (configure.xml). Второй способ - позволяет создать отдельный xml-файл с одной настроечной секцией и указать его в аргументах командной строки
Для оптимизации, запись в БД сделана не по каждому сообщению, а через промежуточный буфер. Т.е. только после того как в буфере скапливается qbufSize сообщений (строк) буфер скидывается в базу. Помимо этого, встроен механизм "ротации БД". Если задан параметр maxRecords (–prefix-db-max-records), то в БД будет поддерживаться ограниченное количество записей. При этом введён "гистерезис", т.е. фактически удаление старых записей начинается при переполнении БД определяемом коэффициентом переполнения overflowFactor (–prefix-db-overflow-factor). По умолчанию 1.3.
LogDB предоставляет возможность получения логов через REST API. Для этого запускается http-сервер. Параметры запуска можно указать при помощи: –prefix-httpserver-host и –prefix-httpserver-port.
А так же –prefix-httpserver-max-queued для указания максимального размера очереди запросов к серверу и –prefix-httpserver-max-threads количество потоков обработки запросов.
REST API доступен по пути: api/version/logdb/... (текущая версия v01)
В LogDB встроена возможность просмотра логов в реальном времени, через websocket. Список лог-серверов доступен по адресу:
Прямое подключение к websocket-у доступно по адресу:
Где logname - это имя логсервера от которого мы хотим получать логи (см. Конфигурирование LogDB).
Количество создаваемых websocket-ов можно ограничить при помощи параметр maxWebsockets (–prefix-ws-max).
Несмотря на то, что все логи сохраняются в БД, их так же можно писать в файлы. Для этого каждому логу достаточно указать свойство logfile в настройках (см. Конфигурирование LogDB)
Вся реализация построена на "однопоточном" eventloop. В нём происходит, чтение данных от логсерверов, посылка сообщений в websockets, запись в БД. При этом обработка запросов REST API реализуется отдельными потоками контролируемыми libpoco.
Для "обслуживания БД" (создание, конвертирование, ротация) имеется специальная утилита uniset2-logdb-adm. Т.к. logdb при своём запуске подразумевает, что БД уже создана. То для создания БД можно воспользоваться командой
Для того, чтобы конвертировать (загрузить) отдельные лог-файлы в базу, можно воспользоваться командой
Более детальное описание параметров см. uniset2-logdb-adm help