Рисунок 1. Основной вариант использования, каждый сервис на отдельном хосте: VoIP_monitor Master/Slave-s/UI/Install_Server

Возможные варианты конфигурации VoIP_monitor:

Рисунок 2. Совмещение на одном хосте VoIP_monitor Master+UI

Рисунок 3. Совмещение на одном хосте VoIP_monitor Install Server+Master+UI

Рисунок 4. VoIP Monitor slave размещен на SSW

Установка VoIP_Monitor (Master/ Slave/UI) выполняется через Install Server. Основная начальная конфигурация для установки производится в конфигурационных файлах Install Server.

Подготовка Install Server

После установки ОС скачайте последний архив стабильной версии:

выполнить на Install Server
wget https://s3.eltex-co.ru/shared/voipmonitor-ansible/stable/voipmonitor-deploy-latest.tar.gz

Разархивировуйте и перейдите в директорию voipmonitor-deploy:

выполнить на Install Server
tar -xzvf voipmonitor-deploy-*.tar.gz && cd voipmonitor-deploy/
Пример:
~/voipmonitor-deploy$ ll
total 48
drwxrwxr-x 5 abf abf  4096 янв 23 05:03 ./
drwxr-x--- 5 abf abf  4096 янв 27 08:55 ../
-rw-rw-r-- 1 abf abf   269 янв 23 05:03 ansible.cfg
-rw-rw-r-- 1 abf abf  1523 янв 23 05:03 check-python-playbook.yml
drwxrwxr-x 4 abf abf  4096 янв 23 05:03 inventory/
-rw-rw-r-- 1 abf abf  1869 янв 23 05:03 Makefile
-rw-rw-r-- 1 abf abf   595 янв 23 05:03 playbook.yml
-rw-rw-r-- 1 abf abf 12150 янв 23 05:03 README.md
drwxr-xr-x 6 abf abf  4096 янв 23 05:03 roles/
drwxrwxr-x 2 abf abf  4096 янв 23 05:03 scripts/

Установите утилиты make и sshpass:

выполнить на Install Server
sudo apt-get install make sshpass

Подготовка к установке сервисов

В примерах используются:

IP-адреса серверов:

  • VoIP_Monitor Install Server 10.0.20.58
  • VoIP_Monitor UI 10.0.20.59
  • VoIP_Monitor Master 10.0.20.53
  • VoIP_Monitor Slave 10.0.20.54
  • SSW ecss1 10.0.20.51
  • SSW ecss2 10.0.20.52

Конфигурация хостов и параметров подключения

Развертывание хостов VoIP_Monitor Master/Slave/UI выполняется через конфигурационный файл ./inventory/hosts.ini. Для его создания запустите скрипт:

Потребуется указать IP-адреса серверов VoIP_Monitor Master/Slave/UI, а также общее количество серверов master+slaves.

Примеры:

1. В случае, если slave-сенсор устанавливается локально на ноды ECSS10, а UI и master вынесены на отдельный хост — необходимо указать три сервера.

2. Один из вариантов развертывания продукта — настройка зеркалирования траффика с одного или нескольких АТС (к примеру, с нод ECSS10 и SMG) на один master-сенсор. При таком варианте необходимо указать один сервер.

3. В случае, если в схеме с зеркалированием планируется более одного сенсора, например, если траффик с ECSS10 зеркалируется на один хост, а траффик с SMG — на другой и т. д., то необходимо указать число отдельно вынесенных slave-сенсоров + один центральный обработчик master.

выполнить на Install Server
make init-hosts

В момент выполнения команды "make init-hosts" ОС на серверах VoIP_Monitor Master/Slave/UI должна быть установлена и сконфигурирована, сервера должны быть доступны в сети.


При установке сервиса на локальный хост (Install Server также является VoIP_Monitor Master/Slave/UI) необходимо указывать внешний IP машины, а не 127.0.0.1.


При установке сервиса VoIP_Monitor Master и UI на одном хосте необходимо указывать одинаковый IP-адрес для обоих сервисов.

При выполнении команды make init-hosts необходимо ввести логин и пароль для пользователя, который существует на всех серверах/виртуальных машинах, где выполняется установка VoIPmonitor Core/UI. Install server также должен иметь доступность по SSH до всех ранее упомянутых серверов. 

Пример:
~/voipmonitor-deploy$ make init-hosts
=== Hosts configuration ===
Enter count of VoIPmonitor Core hosts (includes master and slaves): 2
Enter IP VoIPmonitor Core MASTER: 10.0.20.53
Enter IPs for VoIPmonitor Core SLAVEs (1 hosts):
  Slave 1 IP: 10.0.20.54
Enter IP VoIPmonitor UI: 10.0.20.59
Enter username for SSH-connection to hosts (default: ecss): abf
Enter password for SSH-connection to hosts (default: password): 
=== Checking SSH & sudo access on all hosts ===
Checking host 10.0.20.53...
10.0.20.53 OK
Checking host 10.0.20.54...
10.0.20.54 OK
Checking host 10.0.20.59...
10.0.20.59 OK
Inventory successfully created:
  ./inventory/hosts.ini

Voip Monitor Core hosts в данном случае обозначает количество хостов в инсталляции Voip Monitor, на которых установлены сенсоры; не имеет отношения к core в терминологии продукта ECSS10.

Пример:
cat ./inventory/hosts.ini
[voipmonitor:children]
voipmonitor_core
voipmonitor_ui

[voipmonitor:vars]
ansible_port=22
ansible_user=*******
ansible_password=*******

# =========================
# VoIPmonitor Core
# =========================
[voipmonitor_core:children]
voipmonitor_core_master
voipmonitor_core_slave

[voipmonitor_core_master]
core-01 ansible_host=10.0.20.53

[voipmonitor_core_slave]
core-02 ansible_host=10.0.20.54

# =========================
# VoIPmonitor UI
# =========================
[voipmonitor_ui]
ui ansible_host=10.0.20.59

Конфигурация сервисов

Конфигурация сервисов выполняется через переменные Ansible. Основная конфигурация задаётся в файле ./inventory/group_vars/voipmonitor.yml.

Пример: ./inventory/group_vars/voipmonitor.yml указаны параметры по умолчанию
voipmonitor:
  docker:
    update_config: false
  version: "1.3"
  mysql:
    root_password: "password"
    voipmonitor_password: "password"
    port: 3307
  ui_host:
    domain_name: ""
    api:
      http_port: 4000
    client:
      http_port: 80
      https_port: 443
    keycloak:
      http_port: 8080
      admin_password: "password"
    master_sniffer:
      manager_port: 5029
      sensor:
        id: "1"
        port: "60024"

Конфигурация VoIPmonitor UI полностью осуществляется в файле voipmonitor.yml.

Для серверов VoIPmonitor Core основная конфигурация прописывается в файле voipmonitor.yml.

В директории ./inventory/host_vars для серверов VoIPmonitor Core "Master" и "Slave" в файлах → ./inventory/host_vars/core-01.yml и ./inventory/host_vars/core-02.yml соответственно дополнительно укажите, какой именно интерфейс нужно слушать (по умолчанию система использует интерфейс "eth0"). 

Пример: параметры по умолчанию
cat ./inventory/host_vars/core-01.yml 
voipmonitor_core_voip_listen_interfaces: "eth0"

Замените на реальный интерфейс системы:

выполнить на Install Server
nano ./inventory/host_vars/core-01.yml
Результат:
cat ./inventory/host_vars/core-01.yml 
voipmonitor_core_voip_listen_interfaces: "enp0s8"


cat ./inventory/host_vars/core-02.yml 
voipmonitor_core_voip_listen_interfaces: "enp0s8"

Подготовка окружения Install Server и проверка версии Python на целевых хостах (VoIPmonitor Master/Slave/UI)

Во время выполнения:

  • на локальной системе проверяется и, в случае отсутствия, устанавливается актуальный Docker;
  • выполняется docker login (учётные данные запрашиваются у менеджера проекта);
  • на указанных хостах проверяется версия Python и доустанавливается версия 3.7 для корректной работы Ansible.

Установка Python выполняется параллельно существующей версии и не влияет на текущую конфигурацию системы: ссылка /usr/bin/python3 не изменяется, поэтому существующие приложения, использующие установленную на системе версию Python, продолжают работать без изменений.

Выполните подготовку окружения на Install Server к установке:

выполнить на Install Server
make configure

В момент установки вы увидите такое сообщение системы «в примере пользователь "*******"» — требуется переподключится к Install Server.

Пользователь был добавлен в группу "docker". Требуется переподключится (logout/login) к системе с новыми полномочиями после добавления пользователя в новую группу docker. Повторите команду make configure для продолжения конфигурации.

Please, relogin in bash for access to docker group:
    $ su - *******
Notice! If you already do relogin and keep seeing this message try open new terminal session(or reconnect ssh).
make[1]: *** [Makefile:27: docker-setup-local] Error 1
make: *** [Makefile:31: configure] Error 2


На вопрос: "Enter docker login for hub.eltex-co.ru:" требуется указать пользователя/пароль, полученные у менеджера проекта.

Пример:
make configure
Configure for installing
[sudo] password for abf: 
User abf in docker group
Docker installed
Enter docker login for hub.eltex-co.ru: *********
Enter docker password: *********

WARNING! Your credentials are stored unencrypted in '/home/abf/.docker/config.json'.
Configure a credential helper to remove this warning. See
https://docs.docker.com/go/credential-store/

Login Succeeded
Unable to find image 'hub-ims.eltex-co.ru/supplementary/ecss-deploy-image/ecss-deploy-image:0.1.20' locally
0.1.20: Pulling from supplementary/ecss-deploy-image/ecss-deploy-image
943845cbb332: Download complete 
63e5bc7682b8: Pull complete 
0d9d9d08ef52: Pull complete 
1812eb083c8a: Pull complete 
c5c1f07a6611: Pull complete 
ff6a22ad3b08: Pull complete 
8561f0943791: Pull complete 
359b2e40f8b3: Downloading [==================================>                ]  309.3MB/445.9MB
51de97fb9b56: Download complete 
6393e842ef56: Download complete 
. . .
PLAY RECAP *********************************************************************
core-01                    : ok=10   changed=5    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
core-02                    : ok=10   changed=5    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
ui                         : ok=10   changed=6    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Установка Docker на целевых хостах (VoIPmonitor Master/Slave/UI)

Выполните команду:

выполнить на Install Server
make docker
Пример:
~/voipmonitor-deploy$ make docker
Run ansible action: setup docker

PLAY [Setup Docker] ************************************************************

TASK [Gathering Facts] *********************************************************
ok: [core-01]
ok: [core-02]
ok: [ui]

TASK [Install python3-requests] ************************************************
ok: [core-01]
ok: [ui]
ok: [core-02]

. . .
PLAY RECAP *********************************************************************
core-01                    : ok=18   changed=5    unreachable=0    failed=0    skipped=5    rescued=0    ignored=1   
core-02                    : ok=18   changed=5    unreachable=0    failed=0    skipped=5    rescued=0    ignored=1   
ui                         : ok=18   changed=5    unreachable=0    failed=0    skipped=5    rescued=0    ignored=1   

Playbook run took 0 days, 0 hours, 1 minutes, 18 seconds

Установка

Установку можно запустить как для всех хостов одновременно, так и отдельно для группы core или ui.

В первом случае используйте команду make install.

Во втором — make install core  → установка только voipmonitor-core или make install ui → установка только voipmonitor-ui.

Для корректного отображения времени начала/окончания звонков в VoIP Monitor на "Install Server" время должно быть установлено в UTC, а не локальный часовой пояс.

выполнить на Install Server
make install
Пример:
~/voipmonitor-deploy$ make install
Run ansible action: install for all

PLAY [Setup Docker] ************************************************************

PLAY [Deploy VoIPmonitor Core] *************************************************

TASK [Gathering Facts] *********************************************************
ok: [core-01]
ok: [core-02]

TASK [voipmonitor_core : Validating arguments against arg spec 'main' - Main entry point for the voipmonitor_core role] ***
ok: [core-01]
ok: [core-02]
. . .
PLAY [Deploy VoIPmonitor UI] ***************************************************

TASK [Gathering Facts] *********************************************************
ok: [ui]

TASK [voipmonitor_ui : Validating arguments against arg spec 'main' - Main entry point for the voipmonitor_ui role] ***
ok: [ui]
. . .

PLAY RECAP *********************************************************************
core-01                    : ok=21   changed=8    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0   
core-02                    : ok=21   changed=8    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0   
ui                         : ok=15   changed=5    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0 

После установки на целевых хостах будут созданы директории /etc/voipmonitor-core и /etc/voipmonitor-ui. Они защищены от просмотра. Доступ до них возможен только от пользователя root.

на core (master / slave)

ll /etc/
total 860
. . .
drwxr-x---  3 root root       4096 янв 27 10:27 voipmonitor-core/
. . .

на core (master / slave)

sudo -i
[sudo] password for *****: 
root@master:~# ls -la /etc/voipmonitor-core/docker/
total 24
drwxr-x--- 3 root root 4096 янв 27 10:27 .
drwxr-x--- 3 root root 4096 янв 27 10:27 ..
-rw-r--r-- 1 root root 1637 янв 27 10:27 docker-compose.yml
-rw-r----- 1 root root  479 янв 27 10:27 .env
-rw-r--r-- 1 root root  479 янв 27 10:27 .env.original
drwxr-x--- 4 root root 4096 янв 27 10:28 volumes

на core (master / slave)

root@master:/etc/voipmonitor-core/docker# cat .env
# Ansible managed


# ========= SHARED ===========
DOCKER_REGISTRY="hub.eltex-co.ru/voip-monitor"
MYSQL_TAG=8.0-debian-1.3
SNIFFER_TAG=2025.09.1-alpine3.22-1.3


TIMEZONE=UTC
# ========= SHARED ===========


# ========= MYSQL ==============
MYSQL_ROOT_PASSWORD=password
MYSQL_VOIPMONITOR_PASSWORD=password
MYSQL_PORT=3307
# ========= MYSQL ==============


# ========= VOIPMONITOR ===========
VOIP_LISTEN_INTERFACES=enp0s8
VOIP_MANAGER_PORT=5029
# ========= VOIPMONITOR ===========

Контейнер VoIPmonitor Core поддерживает дополнительную ручную конфигурацию через внешний каталог с конфигурационными файлами. Для ручной конфигурации sniffer используется файл  /etc/voipmonitor-core/docker/volumes/voipmonitor-configs/conf.d/custom_options.conf. После установки он пустой. В данный файл можно добавлять параметры конфигурации VoIPmonitor Core согласно официальной документации. Все параметры из custom_options.conf автоматически подхватываются при старте контейнера.

на core (master / slave)

root@master:/etc/voipmonitor-core/docker/volumes/voipmonitor-configs/conf.d# cat custom_options.conf 
# Доп. опции для запуска VoIPmonitorroot@master:/etc/voipmonitor-core/docker/volumes/voipmonitor-configs/conf.d# 

После изменения конфигурации перезапустите контейнер voipmonitor-core-sniffer, чтобы сервис считал актуальную конфигурацию.

docker restart voipmonitor-core-sniffer

на ui

ll /etc/
total 860
. . .
drwxr-x---  3 root root       4096 янв 27 10:27 voipmonitor-ui/
. . .

на ui

sudo -i
[sudo] password for *****: 
root@master:~# ls -la /etc/voipmonitor-core/docker/
total 24
drwxr-x--- 3 root root 4096 янв 27 10:27 .
drwxr-x--- 3 root root 4096 янв 27 10:27 ..
-rw-r--r-- 1 root root 1637 янв 27 10:27 docker-compose.yml
-rw-r----- 1 root root  479 янв 27 10:27 .env
-rw-r--r-- 1 root root  479 янв 27 10:27 .env.original
drwxr-x--- 4 root root 4096 янв 27 10:28 volumes

на ui

root@ui:/etc/voipmonitor-ui/docker# cat .env
# Ansible managed


# ========= SHARED ===========
DOCKER_REGISTRY="hub.eltex-co.ru/voip-monitor"
IMAGE_TAG=1.3
# DEBUG | INFO
LOG_LEVEL=INFO
# ========= SHARED ===========


# ========= CLIENT ===========
CLIENT_HTTP_PORT=80
CLIENT_HTTPS_PORT=443
# ========= CLIENT ===========


# ========= API ==============
API_PORT=4000
# ========= API ==============


# ========= SSH ==============
# Данные заполняются, при условии что VoIP Monitor развернут на удаленном хостинге
SSH_PORT=22
SSH_HOST=10.0.20.53
SSH_USER=*******
SSH_PASSWORD=*******
# ========= SSH ==============


# ========= DB ===============
DB_HOST=127.0.0.1
DB_PORT=3307
DB_PORT_FORWARD=3308
DB_USERNAME=voipmonitor
DB_PASSWORD=password
DB_DATABASE=voipmonitor
# ========= DB ===============


# ========= MANAGER ==========
# MANAGER_MODE - ssh-forward подключение через SSH-туннель
# direct прямое TCP-подключение к менеджеру
MANAGER_MODE=ssh-forward
MNGR_HOST=127.0.0.1
MNGR_PORT=5029
MNGR_PORT_FORWARD=5030
MANAGER_TIMEOUT_MS=3000
# ========= MANAGER ==========


# ========= KEYCLOAK ==========
# Если CLIENT_HTTPS_PORT НЕ равен 443,то HOSTNAME=<IP>:${CLIENT_HTTPS_PORT}
HOSTNAME=10.0.20.59
KC_SERVICE_IMAGE_TAG=20.0-1.3
KC_DB_IMAGE_TAG=16-alpine3.22
KC_HTTP_PORT=8080
KC_ADMIN=admin
KC_ADMIN_PASSWORD=password
KC_DB_DATABASE=keycloak
KC_DB_USERNAME=keycloak
KC_DB_PASSWORD=keycloak
# ========= KEYCLOAK ==========


# Данные заполняются для указания родительского voipmonitor
# PARENT_HOST=192.168.60.10 - server_bind
# PARENT_PORT=60024 - server_bind_port
# SSH_READY_TIMEOUT_MS=15000
PARENT_HOST=10.0.20.53
PARENT_PORT=60024
PARENT_SENSOR_ID=1

SSH_READY_TIMEOUT_MS=15000


После установки войдите на сервер VoIP_Monitor_UI https://ipadd_ui. в примере https://10.0.20.59.

  • пользователь: voipmonitor
  • пароль: voipmonitor


При успешном логировании установку VoIP Monitor можно считать законченной, приступайте к настройке и кастомизации.


  • Нет меток