Требования к серверу
Минимальные требования к серверу для установки Mistats:
- Процессор: 4 ядра с частотой более 3.5 ГГц
- ОЗУ: 8 Гб
- ПЗУ: 60 Гб
Установка
Для работы MiStats необходимо иметь следующие версии ПО:
- Smarty >= 2.0
- ClickHouse >= 24
Примечание 1: Для работы ClickHouse требуется поддержка инструкций SSE 4.2 для процессора
Примечание 2: рекомендуемая ОС для установки ClickHouse — Debian 11
Перед началом установки рекомендуем проверить настройки времени на сервере. Необходимо, чтобы установленный часовой пояс на сервере для MiStats совпадал с часовыми поясами на серверах, на которых развернуты Smarty и MongoDB.
Проверить часовой пояс можно с помощью следующей команды:
timedatectl | grep 'Time zone'
Если на серверах установлены разные значения Time zone, то изменить его можно следующим образом (в качестве примера приведен часовой пояс Москвы GMT+3):
timedatectl set-timezone Europe/Moscow
Проверим, что часовой пояс был изменен:
$ timedatectl | grep 'Time zone'
Time zone: Europe/Moscow (MSK, +0300)
Установка ClickHouse
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg pwgen python3-pip python-is-python3
curl -fsSL 'https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key' | sudo gpg --dearmor -o /usr/share/keyrings/clickhouse-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg] https://packages.clickhouse.com/deb stable main" | sudo tee \
/etc/apt/sources.list.d/clickhouse.list
sudo apt-get update
sudo apt-get install -y clickhouse-server clickhouse-client
sudo service clickhouse-server start
Установка MiStats
Скачивание пакета доступно в Личном кабинете оператора. После успешного скачивания требуется распаковать пакет и установить нужные зависимости:
sudo dpkg -i mistats-*.deb pip install -r /usr/share/microimpuls/mistats/backend/requirements.txt
Далее следует настроить связь между Mistats и Сlickhouse, команды открытия CLI для Сlickhouse:
# еслиСlickhouseи MiStats находятся на одном сервереclickhouse-client# eсли ClickHouse стоит на выделенном сервере clickhouse-client --host <HOSTNAME> --secure --port 9940 --user <USERNAME> --password <PASSWORD>
Создание БД и пользователя:
create database smarty_stats;
export CHPASSWORD=`pwgen -s 16`
echo $CHPASSWORD
echo "create user smarty identified by '$CHPASSWORD';" | clickhouse-client -d smarty_stats -u default --password <password_default_user>
echo "create role smarty;" | clickhouse-client -d smarty_stats -u default --password <password_default_user>
echo "grant all on smarty_stats.* to smarty;" | clickhouse-client -d smarty_stats -u default --password <password_default_user>
echo "grant smarty to smarty;" | clickhouse-client -d smarty_stats -u default --password <password_default_user>
sed -i -e 's/CH_PASSWORD = None/'"CH_PASSWORD = \"$CHPASSWORD\""'/g' /usr/share/microimpuls/mistats/backend/settings/configuration.py
После всех действий необходимо отредактировать файл /usr/share/microimpuls/mistats/backend/settings/configuration.py следующим образом:
CH_HOST = "localhost" # IP ClickHouse CH_PORT = None # Порт ClickHouse CH_DATABASE = "smarty_stats" # Название базы данных CH_USER = "smarty" # Название аккаунта CH_PASSWORD = "$CHPASSWORD" # Пароль аккаунта PORT = 8095 # Порт хоста сервера, на который будет отправляться статистика HOST = "0.0.0.0" # IP хоста сервера, на который будет отправляться статистика UVICORN_WORKERS = 2 # Количество воркеров LOG_LEVEL = "info" # Уровень логирования
Далее следует первичная инициализация ClickHouse:
python /usr/share/microimpuls/mistats/backend/commands/init_db.py
Примечание 3: если при запуске выдаётся ошибка “No module named Clickhouse” необходимо выполнить в терминале командуexport PYTHONPATH="/usr/share/microimpuls/mistats/backend"
И непосредственно запуск MiStats:
python /usr/share/microimpuls/mistats/backend/run.py
Далее необходимо проверить, есть ли служба MiStats в системе командой:
sudo systemctl status mistats.service
Если служба не запущена, то ее следует запустить:
sudo systemctl start mistats.service
Если же служба не была найдена совсем, то для фоновой работы процесса создайте файл mistats.service в папке /etc/systemd/system со следующим содержимым:
[Unit] Description=MiStats service After=network.target [Service] Type=simple ExecStart=/usr/bin/python /usr/share/microimpuls/mistats/backend/run.py [Install] WantedBy=multi-user.target
После создания service-файла запустите команды:
sudo systemctl daemon-reload sudo systemctl enable mistats.service
Настройка подключения к MiStats на стороне Smarty
В конфигурационном файле Smarty в секцию INSTALLED_APPS требуется добавить параметр viewstats (если модуль viewstats ранее не настраивался) и удостовериться, что лицензионный ключ допускает использование данного модуля.
Далее требуется добавить в конфиг опции подключения к MiStats:
# адрес MiStats VIEWSTATS_MISTATS_BASE_URL = 'http://127.0.0.1:8000' # Количество записей в Redis, по достижении которого данные выгружаются в MiStats VIEWSTATS_BUFFER_MAX_COUNT = 2500000
Для применения настроек необходимо перезагрузить uWSGI:
sudo service uwsgi restart
Последний шаг — добавление в крон менеджмент-команды для отправки данных из Smarty в MiStats (рекомендуемый интервал — 5 минут):
smarty_manage push_stats --settings=settings.<settings name>
Для того, чтобы абонентские устройства начали отправлять статистику на сервер, необходимо включить ее отправку в панели администрирования на странице «Настройки STB и приложений» (чекбокс «Включить сбор статистических данных на сервер Smarty»).

Конфигурация логирования с ClickHouse
По умолчанию ClickHouse пишет очень много внутренних логов без лимита на хранение, что довольно быстро уничтожает место даже при отсутствии ведения записей.
Для отключения в /etc/clickhouse-server/config.xml у каждого лога (конфиги с префиксом _log) необходимо прописать ttl:
<clickhouse>
<query_log>
<database>system</database>
<table>query_log</table>
<partition_by>toYYYYMM(event_date)</partition_by>
<ttl>event_date + INTERVAL 7 DAY</ttl>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_log>
<trace_log>
<database>system</database>
<table>trace_log</table>
<partition_by>toYYYYMM(event_date)</partition_by>
<ttl>event_date + INTERVAL 1 DAY</ttl>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</trace_log>
<metric_log>
<database>system</database>
<table>metric_log</table>
<partition_by>toYYYYMM(event_date)</partition_by>
<ttl>event_date + INTERVAL 3 DAY</ttl>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</metric_log>
</clickhouse>
Особенно важно ограничить trace_log, который пишет очень много. При необходимости ttl можно будет увеличить. Проверить занимаемый размер можно через запрос в ClickHouse:
SELECT table,
formatReadableSize(sum(bytes)) as size
FROM system.parts
WHERE database = 'system'
GROUP BY table
ORDER BY sum(bytes) DESC;
А чтобы очистить, а именно удалить все данные из таблиц, нужно:
TRUNCATE TABLE system.query_log;
TRUNCATE TABLE system.trace_log;
TRUNCATE TABLE system.metric_log;