Сжатие видеозаписей RDP сессий: настройка Video-Worker
ВНИМАНИЕ: эта функция работает только в редакции Enterprise Edition
1. Введение
Начиная с JumpServer V3.0.0, добавлен компонент Video-Worker, основная задача которого — обрабатывать записи, создаваемые компонентами Razor(RDP Client) и Lion(Web RDP), и конвертировать их в формат MP4 для удобства аудита и экономии места на диске.
1.1. Принцип работы
После запуска Video-Worker регистрируется как компонент (аналогично Koko), чтобы получить настройки хранилища записей, куда будет загружаться уже перекодированный MP4-файл.
Если в настройках Lion и Razor включён Video-Worker, то они загружают записи напрямую в этот компонент для перекодирования.
После успешного перекодирования файл загружается в указанное хранилище записей.
Если Lion или Razor не могут загрузить запись в Video-Worker, то они откатываются к загрузке в своё собственное хранилище. При использовании хранилища по умолчанию запись отправляется в каталог:
core/data/media/replay
Важно
-
Задача перекодирования зависит от библиотек ffmpeg, которые активно используют CPU.
Нагрузка может достигать 100%, поэтому не рекомендуется размещать Video-Worker на той же машине, что и JumpServer. -
Для Razor: запись сначала конвертируется в серию изображений, затем ffmpeg собирает их в видео. Процесс использует все доступные ядра CPU.
-
Для Lion(Web RDP): используется официальный CLI-инструмент guacenc, который полностью загружает одно CPU-ядро на протяжении всего процесса.
1.2. Сравнение размера файла сессии до и после перекодирования
| Тест | Длительность | Размер исходного файла | Размер MP4 | Снижение занимаемого места |
|---|---|---|---|---|
| Тест 1 | 8 часов | 4.1 GB | 0.80 GB | 80.5% |
| Тест 2 | 1 час | 2.4 GB | 0.37 GB | 84.6% |
1.3. Параметры
| Название параметра | Значение по умолчанию | Описание | Примечание |
|---|---|---|---|
|
NAME |
hostname |
По умолчанию — имя хоста |
|
|
CORE_HOST |
URL JumpServer, используется для регистрации через API |
video-worker регистрируется в core так же, как и koko |
|
|
BOOTSTRAP_TOKEN |
нет |
Предварительно созданный секретный ключ; должен совпадать с конфигурацией JumpServer |
|
|
BIND_HOST |
0.0.0.0 |
IP-адрес привязки при запуске, по умолчанию 0.0.0.0 |
|
|
HTTPD_PORT |
9000 |
Порт для HTTP/WS |
|
|
LOG_LEVEL |
INFO |
Возможные значения: [DEBUG, INFO, WARN, ERROR] |
|
|
VIDEO_WORKER_COUNT |
0 |
Количество параллельных процессов; 0 означает, что значение не задано и вычисляется автоматически как «число ядер CPU + 1» |
Если указано значение > 0, используется оно |
|
VIDEO_WORKER_SECRET_KEY |
'' |
Случайно генерируемая строка из 32 символов; используется как ключ шифрования/дешифрования |
Если нужно использовать несколько video-worker, ключ должен быть одинаковым |
|
VIDEO_WORKER_CLEAN_PERIOD |
7 |
В днях — срок хранения логов перекодированных сессий |
При запуске очистка выполняется раз в 24 часа |
|
IGNORE_VERIFY_CERTS |
False |
Игнорировать ли HTTPS-сертификат CORE_HOST, чтобы избежать ошибок валидации |
Поддерживается с версии v3.10.8+ |
2. Включение Video-Worker на основном сервере JumpServer (не рекомендуется)
Файл конфигурации JumpServer находится по адресу:
/opt/jumpserver/config/config.txt
Добавьте следующие параметры для включения перекодирования записей Windows в MP4:
USE_VIDEO=1
ENABLE_VIDEO_WORKER=True
VIDEO_WORKER_HOST=http://jms_video:9000
jmsctl restart
3. Отдельное развёртывание сервера перекодирования
Версия JumpServer на сервере перекодирования должна совпадать с версией основной среды.
3.1. Запуск с использованием Docker Compose
Пример окружения:
| Сервис | IP |
|---|---|
| JumpServer | 192.168.10.10 |
| Video-Worker | 192.168.10.11 |
Настройка на сервере перекодирования
Распаковать установочный пакет JumpServer и подготовить окружение:
tar -zxvf jumpserver-offline-release-v3.10.9-amd64.tar.gz
cd /opt/jumpserver-offline-release-v3.10.9-amd64/scripts
./2_install_docker.sh # установка Docker
docker load -i images/video-worker:v3.10.9.tar
Конфигурация Video-Worker
Редактировать файл:
vim /data/config.txt
CORE_HOST=http://192.168.10.10:8080
BOOTSTRAP_TOKEN=YTc1NjNmNDItZjNlYS00NTMw # должен совпадать с конфигом JumpServer
IGNORE_VERIFY_CERTS=true # игнорировать сертификат HTTPS при подключении к CORE_HOST
VIDEO_WORKER_COUNT=6 # количество параллельных задач
VIDEO_WORKER_CLEAN_PERIOD=7 # период очистки логов (в днях)
HTTPD_PORT=9000
LOG_LEVEL=ERROR
Docker Compose-файл Video-Worker
vim /data/docker-compose-video.yml
(Полное содержимое приведено в оригинале.)
version: '2.4'
services:
video:
image: registry.fit2cloud.com/jumpserver/video-worker:v3.10.9
container_name: jms_video
hostname: jms_video
cpus: 2
ulimits:
core: 0
restart: always
tty: true
ports:
- 9000:9000
env_file:
- /data/config.txt
volumes:
- /data/video/data:/opt/video/data
healthcheck:
test: "curl -fsL http://localhost:9000/video-worker/health/ > /dev/null"
interval: 10s
timeout: 5s
retries: 3
start_period: 10s
networks:
- video_net
Конфигурация на стороне JumpServer
vim /opt/jumpserver/config/config.txt
ENABLE_VIDEO_WORKER=true
VIDEO_WORKER_HOST=http://192.168.10.11:9000
Управление запуском Video-Worker
docker-compose -f docker-compose-video.yml up -d # запуск
docker-compose -f docker-compose-video.yml down # остановка
3.2. Запуск с использованием оригинальных файлов JumpServer
Настройка на сервере перекодирования
Редактировать:
vim /opt/jumpserver/config/config.txt
Отключить ненужные компоненты:
CORE_ENABLED=0
CELERY_ENABLED=0
KOKO_ENABLED=0
LION_ENABLED=0
MAGNUS_ENABLED=0
CHEN_ENABLED=0
KAEL_ENABLED=0
PANDA_ENABLED=0
WEB_ENABLED=0
XRDP_ENABLED=0
USE_VIDEO=1
ENABLE_VIDEO_WORKER=True
CORE_HOST=http://192.168.10.10:8080
BOOTSTRAP_TOKEN=YTc1NjNmNDItZjNlYS00NTMw
Затем изменить соответствующие YAML-файлы и выполнить:
cd /opt/jumpserver-offline-release-v3.10.9-amd64/compose/
jmsctl restart
Конфигурация на стороне JumpServer
vim /opt/jumpserver/config/config.txt
ENABLE_VIDEO_WORKER=true
VIDEO_WORKER_HOST=http://192.168.10.11:9000
Также изменить YAML-файлы:
cd /opt/jumpserver-offline-release-v3.10.9-amd64/compose/
jmsctl restart
Диагностика проблем
Если перекодирование завершилось ошибкой, проверяйте два направления:
Найдите лог выполнения по ID сессии в:
video/data/tasks/{id}
Если в каталоге tasks нет записи с этим ID, проверьте логи компонентов lion или razor, возможно, ошибка в загрузке файла.