UniSet 2.32.1
База логов (LogDB)

Общее описание работы LogDB

LogDB это сервис, работа которого заключается в подключении к указанным лог-серверам, получении от них логов и сохранении их в БД (sqlite). Помимо этого LogDB выступает в качестве REST сервиса, позволяющего получать логи за указанный период в виде json.

Реализация намеренно простая, т.к. пока неясно нужно ли это и в каком виде. Ожидается что контролируемых логсерверов будет не очень много (максимум несколько десятков) и каждый лог будет генерировать не более 2-5 мегабайт записей. Поэтому sqlite должно хватить.

Конфигурирование LogDB

Для конфигурования необходимо создать секцию вида:

<LogDB name="LogDB" ...>
<logserver name="" ip=".." port=".." cmd=".." description=".."/>
<logserver name="" ip=".." port=".." cmd=".." description=".."/>
<logserver name="" ip=".." port=".." cmd=".." logfile=".."/>
</LogDB>

При этом доступно два способа: Первый - это использование секции в общем файле проекта (configure.xml). Второй способ - позволяет создать отдельный xml-файл с одной настроечной секцией и указать его в аргументах командной строки

uniset2-logdb --single-confile logdbconf.xml

LogDB: Работа с БД

Для оптимизации, запись в БД сделана не по каждому сообщению, а через промежуточный буфер. Т.е. только после того как в буфере скапливается qbufSize сообщений (строк) буфер скидывается в базу. Помимо этого, встроен механизм "ротации БД". Если задан параметр maxRecords (–prefix-db-max-records), то в БД будет поддерживаться ограниченное количество записей. При этом введён "гистерезис", т.е. фактически удаление старых записей начинается при переполнении БД определяемом коэффициентом переполнения overflowFactor (–prefix-db-overflow-factor). По умолчанию 1.3.

LogDB: REST API

LogDB предоставляет возможность получения логов через REST API. Для этого запускается http-сервер. Параметры запуска можно указать при помощи: –prefix-httpserver-host и –prefix-httpserver-port.

А так же –prefix-httpserver-max-queued для указания максимального размера очереди запросов к серверу и –prefix-httpserver-max-threads количество потоков обработки запросов.

REST API доступен по пути: api/version/logdb/... (текущая версия v01)

/help - Получение списка доступных команд
/list - список доступных логов
/logs?logname&..parameters.. - получение логов 'logname'
Не обязательные параметры:
offset=N - начиная с N-ой записи,
limit=M - количество в ответе.
from='YYYY-MM-DD' - 'с' указанной даты
to='YYYY-MM-DD' - 'по' указанную дату
last=XX[m|h|d|M] - за последние XX m-минут, h-часов, d-дней, M-месяцев
По умолчанию: минут
/count?logname - Получить текущее количество записей

LogDB: Поддержка web socket

В LogDB встроена возможность просмотра логов в реальном времени, через websocket. Список лог-серверов доступен по адресу:

ws://host:port/logdb/ws/

Прямое подключение к websocket-у доступно по адресу:

ws://host:port/logdb/ws/logname

Где logname - это имя логсервера от которого мы хотим получать логи (см. Конфигурирование LogDB).

Количество создаваемых websocket-ов можно ограничить при помощи параметр maxWebsockets (–prefix-ws-max).

LogDB: Файлы логов

Несмотря на то, что все логи сохраняются в БД, их так же можно писать в файлы. Для этого каждому логу достаточно указать свойство logfile в настройках (см. Конфигурирование LogDB)

LogDB: Технические детали

Вся реализация построена на "однопоточном" eventloop. В нём происходит, чтение данных от логсерверов, посылка сообщений в websockets, запись в БД. При этом обработка запросов REST API реализуется отдельными потоками контролируемыми libpoco.

LogDB Вспомогательная утилита (uniset2-logdb-adm).

Для "обслуживания БД" (создание, конвертирование, ротация) имеется специальная утилита uniset2-logdb-adm. Т.к. logdb при своём запуске подразумевает, что БД уже создана. То для создания БД можно воспользоваться командой

uniset2-logdb-adm create dbfilename

Для того, чтобы конвертировать (загрузить) отдельные лог-файлы в базу, можно воспользоваться командой

uniset2-logdb-adm load logfile1 logfile2...logfileN

Более детальное описание параметров см. uniset2-logdb-adm help