Требования для сборки:
- g++ или clang++ (с поддержкой 17 стандарта)
- cmake (3.13)
- git
sudo apt install g++ cmake git
git clone https://github.com/mambaru/btpd.git
cd btpd
make release
./build/bin/btpd -V examples/simple/btp.conf
Последняя команда запускает проверку конфигурации на валидность. В случае ошибки выведет конфиг с пометкой ">>>" места ошибки. Примеры запуска:
# Простой запуск с выводом цветного лога на экран, выход по ^C
./build/bin/btpd -C examples/simple/btp.conf
# Запуск в режиме демона
./build/bin/btpd -d -C examples/simple/btp.conf
# В режиме демона со следящим процессом, который перезапустит основной,
# если тот аварийно завершит работу проработав более 600 секунд
./build/bin/btpd -a 600 -d -C examples/simple/btp.conf
# Перезапускает в любом случае, в том числе после корректного завершения работы
./build/bin/btpd -A -a 600 -d -C examples/simple/btp.conf
# Перезапускает в любом случае, в том числе после корректного завершения работы
./build/bin/btpd -w /path/to/working/directory -d -C examples/simple/btp.conf
# Запуск под пользователем
sudo ./build/bin/btpd -u wwwrun -d -C examples/simple/btp.conf
В случае успешного запуска в рабочей директории будет создана директория ./btp с пятью базами: ag5s, ag1m, ag7m, ag1h, ag1d и директория ./logs с файлом btp.log. Измените соответствующие значения в файле btp.ini на нужные вам абсолютные пути.
В директории ./examples/simple/ вариант конфигурации когда модуль real-time агрегации и модули хранилищ запускаются в одном процессе. Состоит из четырех файлов:
- btp.conf - основной файл конфигурации
- btp.ini - дополнительный файл конфигурации с опциями которые скорее всего потребуют правки
- rocksdb-keys.ini - настройки RocksDB для хранилища ключей
- rocksdb-data.ini - настройки RocksDB для хранилища данных
В директории ./examples/multiple/ такой-же вариант конфигурации, но разбитый для удобства на несколько файлов.
В представленых конфигурациях определены следующие порты:
- 38000(tcp/udp) - real-time аггрегатор входящего траффика
- 38001(tcp/udp) - real-time аггрегатор входящего траффика для compact api (см. JSONRPC-API)
- 37000(tcp) - получение данных для 5-секундного хранилища ag5s
- 37001(tcp) - ag1m - минутного хранилища
- 37002(tcp) - ag7m - 7-минутного
- 37003(tcp) - ag1h - часового
- 37004(tcp) - ag1d - дневного
Сборка займет достаточно времени (от 40 мин и более), но в основном за счет того, что система сборки автоматически загрузит и скомпилирует нужные версии boost и rocksdb. Если у вас установлены boost 1.76 и rocksdb, то можно ускорить сборку:
BOOST_ROOT=/path/to/boost ROCKSDB_ROOT=/path/to/rocksdb make release
Проверка работоспособности
Запускаем демон:
./build/bin/btpd -d -W -C examples/multiple/btp.conf
Опция -W возвращает управление над консолью, только после полной инициалализации и запуска демона, а не сразу после демонизации. Это гарантирует, что к моменту выполнения следующей команды, порты будут открыты.
После получения консоли, запускаем танк, который накидает в демон немного данных:
./build/bin/btpd -C examples/tank/tank.conf
Время работы танка порядка 10 секунд. После завершения его работы запускаем telnet и подключаемся к 5-секундному хранилищу:
Отправляем запрос:
{ "method":"get", "params":{"name":"script~~MyScript~~MyService~~MyOp"}, "id":1}
Должны получить ответ похожий на этот:
{"jsonrpc":"2.0","result":{"counters":[[1664234138698304,200,0,200,200,200,200,200,200,200,0],[1664234143698304,200,0,200,200,200,200,200,200,200,0]]},"id":1}
Чтобы получить данные из других хранилищ, нужно повторно запустить танк через минуту, 7 минут и т.д. На самом деле это зависит от опции aggregate_last_point которая установлена только для часового и дневных графиков - это исключительно для удобства отображения.
Остановить работающий демон можно так:
или так:
kill $(cat btpd-btp.conf.pid)