10. Дополнительная информация
10.1. Настройка количества обработчиков заданий
Datamart Platform Studio обрабатывает фоновые задачи через Resque, которые отправляются в очереди в Redis, а оттуда их на выполнение забирают обработчики заданий (воркеры). В это число входят запуск задач инсталляций, обновлений приложений и других Ansible-playbook, требуемых для обслуживания услуг типа «Витрина данных».
10.1.1. Как устроены очереди и воркеры
В Datamart Platform Studio две категории очередей: Системные и Очереди услуг. Воркер смотрит всегда на одну очередь.
10.1.1.1. Системные очереди
Системные очереди добавляются по умолчанию, независимо от настроек:
Очередь |
Назначение |
|---|---|
default |
Общие задачи (бэкапы, импорты профилей, bulk-операции и т. д.). Сюда же попадают задачи услуг, если очередь одна |
audit |
Отправка событий аудита |
live_logs |
Чтение логов инсталляций в реальном времени |
schedule |
Обслуживание отложенных задач |
steps |
Выполнение шагов сценариев |
За каждой системной очередью закреплен соответствующий воркер.
10.1.1.2. Очереди услуг
Очереди услуг добавляются вручную при помощи переменной RESQUE_QUEUE_POOL_SIZE.
Если очередей услуг несколько, то задачи любой услуги отправляются в очередь, вычисляемую по формуле:
datamart_queue_<id % RESQUE_QUEUE_POOL_SIZE>
где id — идентификатор услуги.
Номер очереди определяется по остатку от деления
Примечание
Если RESQUE_QUEUE_POOL_SIZE=0, то все задачи услуг идут в системную очередь default.
10.1.2. Переменная RESQUE_QUEUE_POOL_SIZE
Переменная RESQUE_QUEUE_POOL_SIZE задаёт количество очередей услуг.
Значение |
Очереди услуг |
Поведение |
|---|---|---|
0 |
нет |
Все задачи услуг попадают в очередь |
1 |
datamart_queue_0 |
Все задачи услуг попадают в очередь datamart_queue_0 |
2 |
datamart_queue_0, datamart_queue_1 |
Задачи распределяются по остатку от деления id % 2 |
N |
datamart_queue_0 … datamart_queue_{N-1} |
Распределение по id % N |
Настройка производится путем указания в переменной окружения в файле .env.
Для этого нужно:
Открыть файл
.envв каталоге установки Datamart Platform StudioУстановить нужное значение в переменной
RESQUE_QUEUE_POOL_SIZE
RESQUE_QUEUE_POOL_SIZE=1
Остановить Datamart Platform Studio
./datamart-studio stop
Затем запустить DPS:
./datamart-studio start
Примечание
Изменения вступят в силу только после перезапуска контейнера resque (команд stop/start)
10.1.3. Примеры распределения задач по очередям
Добавлено очередей RESQUE_QUEUE_POOL_SIZE = 2 и услуги с id = 1, 2, 3
id услуги |
id % 2 |
Очередь |
|---|---|---|
1 |
1 |
datamart_queue_1 |
2 |
0 |
datamart_queue_0 |
3 |
1 |
datamart_queue_1 |
Задачи услуг 1 и 3 попадут в datamart_queue_1 и будут выполняться последовательно в порядке поступления. Задачи услуги 2 выполняются в datamart_queue_0.
Добавлено очередей RESQUE_QUEUE_POOL_SIZE = 3, услуги с id = 1, 3, 4, 5
id услуги |
id % 3 |
Очередь |
|---|---|---|
1 |
1 |
datamart_queue_1 |
3 |
0 |
datamart_queue_0 |
4 |
1 |
datamart_queue_1 |
5 |
2 |
datamart_queue_2 |
Задачи услуг 1 и 4 попадут в очередь datamart_queue_1. Задачи услуги 3 попадут в очередь datamart_queue_0. Задачи услуги 5 попадут в очередь datamart_queue_2.
Добавлено очередей
RESQUE_QUEUE_POOL_SIZE=2, услуги с id = 1, 3, 5, 7, 9
id услуги |
id % 2 |
Очередь |
|---|---|---|
1 |
1 |
datamart_queue_1 |
3 |
1 |
datamart_queue_1 |
5 |
1 |
datamart_queue_1 |
7 |
1 |
datamart_queue_1 |
9 |
1 |
datamart_queue_1 |
Все пять услуг попадут в одну очередь datamart_queue_1 и будут выполняться последовательно в порядке поступления. Очередь datamart_queue_0 останется простой, т. к. нет услуг с чётным id.
Примечание
Важно, чтобы параллельно работающие Ansible playbook не выполняли свои действия одновременно на одном и том же сервере. Если на одном и том же сервере установлены несколько приложений разных услуг, то в этом случае не рекомендуется запускать их одновременную параллельную установку или обновление, так как это может привести к конфликтам.
10.2. Структура служебных директорий
При установке Datamart Platform Studio в каталоге установки программы будут по умолчанию созданы следующие папки (см. Рисунок 10.1):
containers - контейнеры для оффлайн установки
dms-dirs - директория со служебными папками dms-* внутри
fluent-bit - конфиги для контейнера fluent-bit для отправки логов Datamart Platform Studio в opensearch (используется в ГосТех)
log - логи студии
volumes - вольюмы redis (nexus, gitea и БД если они нужны)
Рисунок 10.1 Структура директорий Datamart Platform Studio
В служебной директории dms-dirs расположены папки:
dms-bundles — локальные репозитории бандлов;
dms-apps — дистрибутивы и конфигурации приложений;
dms-installations — папка с установками компонентов;
dms-clusters — папка с установками для кластеров;
dms-data_centers — папка с SSH ключами для ЦОД (применяется для всех серверов ЦОД);
dms-servers — папка с серверами, в которой в том числе содержится файл ssh.config;
dms-networks — папка с настройками сетей для серверов и датацентров;
studio — запускаемое приложение.
10.3. Настройка параметров в файле конфигурации
При первом запуске Datamart Platform Studio параметры конфигурации программы считываются из файла переменных окружения .env.
Примечание
При проведении обновления или перезапуске новые параметры, если они были внесены в .env будут добавлены к существующим. Значения ранее внесенных параметров не изменятся.
Пример файла:
# Версия студии
STUDIO_VERSION="dev"
# Настройка адресов хранилищ для обновления
DOCKER_REGISTRY=nexus.datamart.ru/dms - адрес для обновления докер-контейнеров Студии
GLOBAL_VALUES='{"nexus":"http://127.0.0.1:8881", "nexus_registry":"127.0.0.1:8882", "nexus_registry_user":"reg-user", "nexus_registry_passwd":"***"}' - глобальные настройки по умолчанию
# Настройки подключения Datamart Studio к Gitea
GITEA_HOST=http://gitea - может меняться для дочерних студии при обновлении из Мастера
GITEA_PORT=3000
# Настройки не требуют изменения
RAILS_ENV=production
RAILS_SERVE_STATIC_FILES=true
RAILS_MAX_THREADS=10
RAILS_SECRET_KEY_BASE=*****
RAILS_MASTER_KEY=*****
RAILS_LOG_TO_STDOUT=''
RAILS_LOG_LEVEL=error # debug|info|warn|error|fatal|unknown
APP_HOST=app
APP_PORT=5000
DTMS_VERSION=2.6.0 - версия сборки Studio; возвращается в GET /v1/proxy_api/info
# Настройки веб-портов и SSL (Angie)
WEB_PORT=8088 - порт веб-интерфейса Студии
ANGIE_WEB_PORT_EXPOSED=8088 - внешний порт Angie
SSL_MODE=off - включение SSL (on/off)
SSL_PORT=443
ANGIE_SSL_PORT_EXPOSED=443
ANGIE_SSL_CERT_PATH=/etc/angie/ssl/cert.pem - путь к SSL-сертификату Angie
ANGIE_SSL_KEY_PATH=/etc/angie/ssl/privkey.pem - путь к SSL-ключу Angie
# Настройки подключения к Postgres
DB_HOST=db - хост postgresql для студии
DB_PORT=5432 - порт postgresql для студии
DB_PORT_EXPOSED=55432 - порт postgresql наружу из докера
DB_USER=postgres - имя пользователя
DB_PASSWORD='' - пароль для пользователя
DB_NAME=datamart_production - имя БД Студии в Postgres
# Настройки подключения к Redis
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_DB=1 - номер БД Redis
REDIS_PASSWORD=*****
REDIS_URL=redis://:${REDIS_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}/${REDIS_DB}
# Настройки подключения к ActiveDirectory (LDAP)
AD_HOST=10.128.0.33
AD_PORT=389
AD_ATTRIBUTE=sAMAccountName - атрибут для поиска пользователей в LDAP
AD_BASE=OU=Users_datamart,DC=datamart,DC=ru - группа для поиска пользователей
AD_ADMIN_USER=CN=datamart_studio_services,CN=Users,DC=datamart,DC=ru
AD_ADMIN_PASS=*****
AD_SSL=false - использование SSL при подключении
# Синхронизация ролей и организаций через группы AD
AD_ROLE_GROUP_BASE=OU=Roles,OU=Users_datamart,DC=datamart,DC=ru - DN поддерева AD с группами-ролями; при каждом LDAP-логине создаётся/обновляется роль с name=CN группы
AD_ORG_GROUP_BASE=OU=Organizations,OU=Users_datamart,DC=datamart,DC=ru - DN поддерева AD с группами-организациями; CN группы должен совпадать с ОГРН; если не задана — синхронизация организаций не выполняется
# Настройки папок не требуют изменения
DATAMART_VOL=./
DMS_DIRS=./dms-dirs - директория с всеми dms-* директориями
POSTGRES_VOL=./volumes/postgres - вольюм постгрес студии
NEXUS_VOL=./volumes/nexus - вольюм нексус студии
GITEA_VOL=./volumes/gitea - вольюм гитеа студии
AUDIT_VOL=./volumes/audit - вольюм для данных аудита
REDIS_VOL=./volumes/redis - вольюм редис студии
STORAGE_VOL=/opt - не трогать
# Настройки резервного копирования
BACKUP_DIR=./backup - директория для сохранения и чтения бэкапов студии
# Информация о владельце данной версии ПО
STUDIO_OWNER="ООО «Датамарт»" - владелец Студии
STUDIO_OWNER_NAME=datamart - техническое наименование владельца
# Начальная инициализация
STUDIO_SEED_DEMO=no - не трогать
STUDIO_SEED_REPOSITORY=yes - не трогать
STUDIO_SEED_USER=yes - (устанавливать в "yes" только если AUTH=DB)
STUDIO_SEED_USER_FIRST_NAME=Администратор
STUDIO_SEED_USER_LAST_NAME=Датамарт
STUDIO_SEED_USER_EMAIL=datamart@datamart.ru
STUDIO_SEED_USER_USERNAME=datamart
STUDIO_SEED_USER_PASSWORD=*****
# Создание организации по умолчанию при первом запуске
STUDIO_SEED_ORGANIZATION_NAME=datamart
STUDIO_SEED_ORGANIZATION_TITLE="ООО «Датамарт»"
STUDIO_SEED_ORGANIZATION_OGRN=1217700496782 - ОГРН (для привязки прав)
# Ссылка на документацию
STUDIO_DOCS_URL=https://docs-studio.datamart.ru - ссылка в интерфейсе
# Метод авторизации
AUTH=DATABASE - метод: DB/AD/IAM
ANSIBLE_USER=root - пользователь для запуска ansible playbook
# Sentry (трекинг ошибок)
SENTRY_URL='' - URL Sentry для отправки ошибок (пусто — отключено)
# Демо-данные
SEED_DM_MNEMONIC=base
SEED_DM_TITLE="Базовая услуга"
SEED_DM_DESCRIPTION="Базовая услуга"
SEED_DM_STATUS=serving
# Формат сохранения логов
LOG_FORMATTER=default - формат логов обычный или для ГосТеха (default || gostech)
LOG_FORMATTER_BACKTRACE_LENGTH=7
# Настройки экспорта метрик в формате PROMETHEUS
PROMETHEUS_EXPORTER_HOST=0.0.0.0
PROMETHEUS_EXPORTER_PORT=9394
PROMETHEUS_DATA_UPDATE_INTERVAL=2 - интервал (сек.) обновления метрик
# Настройки отправки логов в Logstash
LOGSTASH_HOST=logstash.example.com
LOGSTASH_PORT=5045
LOGSTASH_TLS=On # On/Off
NODE_ID=$(hostname) - идентификатор узла
NODE_IP=$(ip route get 8.8.8.8 | awk '{print $(NF-2);exit}')
# Настройки подключения к Keycloak (IAM)
KEYCLOAK_CLIENT_NAME=studio - имя приложения в IAM
KEYCLOAK_CLIENT_SITE=https://kc.datamart.ru - адрес IAM
KEYCLOAK_CLIENT_REALM=studio-dev - Realm в IAM
KEYCLOAK_CLIENT_BASE_URL=''
# Настройка Resque Workers
RESQUE_QUEUE_POOL_SIZE=0 - количество очередей (0 = 1 очередь по умолчанию)
# Настройки пользовательской автоматизации
DOCKER_STEP_TIMEOUT=15 - время (сек) на выполнение скрипта пользовательских шагов в docker
DOCKER_URL=tcp://10.129.0.46:2376 - URL подключения к docker
# Настройки SSH-ключей
STUDIO_ALLOW_UPLOAD_SERVER_PRIVATE_KEY=true - разрешить загрузку приватного ключа для серверов
STUDIO_SSH_KEY_EMAIL=ssh@datamart.ru - почта для генерации SSH-ключей
# Настройки SMTP
STUDIO_SMTP_SERVER='' - адрес хоста почтового сервера
STUDIO_SMTP_PORT='' - порт почтового сервера
STUDIO_SMTP_USER='' - имя пользователя почтового сервера
STUDIO_SMTP_PWD='' - пароль почтового сервера
# Настройки работы по HTTPS
STUDIO_HTTPS_ENABLED=false # true/false
STUDIO_HTTPS_CERT=/etc/ssl/certs/datamart.pem - путь к сертификату
STUDIO_HTTPS_KEY='' - ключ
# Прочие настройки
STUDIO_DEFAULT_CHECK_APP_TIMEOUT=30 - таймаут проверки состояния приложения (сек)
STUDIO_API_RPM_LIMIT=60 - ограничение запросов к API в минуту (rate limit)
# Мониторинг по умолчанию
MONITORING_SERVERS_DEFAULT=true - мониторинг серверов по умолчанию
MONITORING_INSTALLATIONS_DEFAULT=false - мониторинг инсталляций по умолчанию
# === Общие переменные для Proxy API и основного приложения ===
# Database connection (общие)
DB_HOST=db - хост базы данных
DB_PORT=5432 - порт базы данных
DB_NAME=datamart_production - имя БД Студии в Postgres
PROXY_API_DB_USER=proxy_api_readonly - read-only пользователь PostgreSQL для Proxy API
PROXY_API_DB_PASS=***** - пароль read-only пользователя
# Диапазон gRPC-прокси портов (Angie)
STUDIO_GRPC_PROXY_PORT_MIN=30000 - начало диапазона gRPC-портов; нужно для настройки firewall
STUDIO_GRPC_PROXY_PORT_MAX=30099 - конец диапазона gRPC-портов
# Интеграция с Proxy API
PROXY_API_PORT=9292 - внутренний порт Ruby-приложения Proxy API
PROXY_API_STUDIO_ENABLE=true - включение/отключение модуля Proxy API (true/false)
PROXY_API_METADATA_TOKEN=change_me - общий секрет для X-API-Key на metadata endpoints; если не задан, /v1/proxy_api/metadata/refresh всегда возвращает 401
PROXY_API_AUTO_REFRESH_ENABLED=false - автообновление метаданных Proxy API
# Сервис аудита
SEND_AUDIT_EVENTS=false - отправлять или нет (true/false)
AUDIT_SERVICE_LEVEL=ERROR # ERROR (только ошибки) || ALL (все события)
AUDIT_SERVICE_OPEN_TIMEOUT_SECONDS=2 - ожидание установления соединения с аудит-сервисом
AUDIT_SERVICE_READ_TIMEOUT_SECONDS=5 - ожидание отправки запроса
AUDIT_SERVICE_HOST=http://example.com/audit - адрес хоста аудита
AUDIT_SERVICE_EVENT_ENDPOINT=v2/event
AUDIT_SERVICE_METAMODEL_ENDPOINT=v2/metamodel
NODE_ID=$(hostname)
# === Переменные только для Proxy API ===
PROXY_API_ID= - идентификатор модуля: поле id в GET /v1/proxy_api/info
RACK_ENV=production
PROXY_API_HTTP_PROXY_PORT=9293 - внешний HTTP-порт Angie для Proxy API
PROXY_API_MAX_THREADS=5 - число Puma threads
PROXY_API_CONNECT_TIMEOUT=10 - timeout соединения Angie с upstream (сек)
PROXY_API_READ_TIMEOUT=10 - timeout чтения ответа upstream (сек)
PROXY_API_SEND_TIMEOUT=10 - timeout отправки запроса upstream (сек)
PROXY_API_LOG_FORMAT=plaintext # plaintext || json
PROXY_API_LOGS_OUTPUT=file # stdout || file (log/proxy-api.log)
# Database pool (Proxy API)
PROXY_API_DB_POOL_SIZE=5 - размер пула подключений к PostgreSQL
PROXY_API_DB_POOL_TIMEOUT=1 - ожидание свободного подключения (сек)
# Sessions & metadata (Proxy API)
PROXY_API_DATA_DIR=data - директория файлового кэша метаданных
PROXY_API_SESSION_TTL_SECONDS=300 - TTL кэша сессий Keycloak (сек)
PROXY_API_METADATA_INTERVAL_SECONDS=300 - интервал фоновой синхронизации кэша из БД (сек); 0 — отключает
PROXY_API_REFRESH_THROTTLE_SECONDS=1 - минимальный интервал между refresh'ами кэша (сек); 0 — отключает
10.4. Мониторинг ресурсов, управление лицензиями для организаций
В карточке каждой организации есть раздел «Мониторинг ресурсов», в котором отображается отчет об утилизации ресурсов, предоставленных согласно полученной лицензии на Datamart Platform Studio для данной организации (см. Рисунок 10.2).
В рамках отчета предоставляется отдельно данные по каждой Витрине данных, утилизация ресурсов на Типовое ПО Витрин считается отдельно и в лимит лицензии не входит.
Рисунок 10.2 Отчет об утилизации ресурсов
10.5. Содержимое JWT-токена Keycloak
При подключении метода авторизации IAM (Keycloak), Datamart Platform Studio получает токен, содержание которого используется для аутентификации пользователя, назначения ему роли и предоставления прав доступа к компонентам организации внутри Datamart Platform Studio.
Пример содержимого токена:
{
"exp": 1689607285,
"iat": 1689603685,
"jti": "c0b5ad2b-387a-4c2c-a051-b6a913be61cb",
"iss": "https://kc.datamart.ru/realms/studio-dev",
"sub": "1567dab7-7590-4c4f-b5ca-f32ad95558cc",
"typ": "Bearer",
"azp": "studio",
"session_state": "6bd1da30-0ccd-4059-952f-784bb30e5c7d",
"acr": "1",
"realm_access": {
"roles": [
"superadmin",
"admin"
]
},
"scope": "openid email",
"sid": "6bd1da30-0ccd-4059-952f-784bb30e5c7d",
"upn": "admin",
"email_verified": true,
"address": {},
"name": "admin admin",
"groups": [
"superadmin",
"admin"
],
"preferred_username": "admin",
"given_name": "admin",
"organization_ogrn": [
"1111",
"2222"
],
"family_name": "admin",
"email": "admin@admin.admin"
}
, где:
preferred_username - имя авторизованного пользователя;
email - email авторизованного пользователя;
roles - роли, назначенные авторизованному пользователю (передается массив, т.к. одному пользователю может быть назначено несколько ролей);
organization_ogrn - массив с ОГРН организаций, компоненты которых будут доступны пользователю. При этом, для пользователя с ролью superadmin будут доступны все компоненты без ограничений.
10.6. Состав метрик мониторинга
Метрики мониторинга Datamart Platform Studio собираются по адресу http://<адрес сервера Datamart Studio>:9394/metrics/
Настройка интервала сбора метрик мониторинга задается в параметре PROMETHEUS_DATA_UPDATE_INTERVAL в конфигурационном файле. По умолчанию 2 сек.
Состав собираемых метрик следующий:
# HELP collector_working Is the master process collector able to collect metrics
# TYPE collector_working gauge
collector_working 1
# HELP collector_rss total memory used by collector process
# TYPE collector_rss gauge
collector_rss 251285504
# HELP collector_metrics_total Total metrics processed by exporter web.
# TYPE collector_metrics_total counter
collector_metrics_total 0
# HELP collector_sessions_total Total send_metric sessions processed by exporter web.
# TYPE collector_sessions_total counter
collector_sessions_total 0
# HELP collector_bad_metrics_total Total mis-handled metrics by collector.
# TYPE collector_bad_metrics_total counter
collector_bad_metrics_total 0
# HELP http_requests_total Total HTTP requests from web app.
# TYPE http_requests_total counter
http_requests_total{action="other",controller="other",status="-1"} 50
http_requests_total{action="other",controller="other",status="404"} 6
http_requests_total{action="other",controller="other",status="200"} 268
http_requests_total{action="show",controller="installations",status="200"} 8
http_requests_total{action="other",controller="other",status="304"} 121
http_requests_total{action="tab",controller="installations",status="200"} 2
http_requests_total{action="new",controller="installations/live_logs",status="200"} 3
http_requests_total{action="create",controller="installations/live_logs",status="200"} 3
http_requests_total{action="destroy",controller="installations/live_logs",status="200"} 3
http_requests_total{action="dashboard",controller="datamart",status="200"} 4
http_requests_total{action="index",controller="datamarts",status="200"} 2
http_requests_total{action="show",controller="organizations",status="200"} 1
http_requests_total{action="available_actions",controller="organizations",status="200"} 1
http_requests_total{action="resources",controller="organizations",status="200"} 2
http_requests_total{action="create",controller="studio_configurations/updates",status="204"} 1
# HELP http_request_duration_seconds Time spent in HTTP reqs in seconds.
# TYPE http_request_duration_seconds summary
http_request_duration_seconds{action="other",controller="other",quantile="0.99"} 0.0019614920020103455
http_request_duration_seconds{action="other",controller="other",quantile="0.9"} 0.0019614920020103455
http_request_duration_seconds{action="other",controller="other",quantile="0.5"} 0.0019614920020103455
http_request_duration_seconds{action="other",controller="other",quantile="0.1"} 0.0019614920020103455
http_request_duration_seconds{action="other",controller="other",quantile="0.01"} 0.0019614920020103455
http_request_duration_seconds_sum{action="other",controller="other"} 1.3575201407074928
http_request_duration_seconds_count{action="other",controller="other"} 445
http_request_duration_seconds_sum{action="show",controller="installations"} 2.5403705686330795
http_request_duration_seconds_count{action="show",controller="installations"} 8
http_request_duration_seconds_sum{action="tab",controller="installations"} 0.3344039097428322
http_request_duration_seconds_count{action="tab",controller="installations"} 2
http_request_duration_seconds_sum{action="new",controller="installations/live_logs"} 0.5146652460098267
http_request_duration_seconds_count{action="new",controller="installations/live_logs"} 3
http_request_duration_seconds_sum{action="create",controller="installations/live_logs"} 0.06433052569627762
http_request_duration_seconds_count{action="create",controller="installations/live_logs"} 3
http_request_duration_seconds_sum{action="destroy",controller="installations/live_logs"} 0.08614633977413177
http_request_duration_seconds_count{action="destroy",controller="installations/live_logs"} 3
http_request_duration_seconds{action="dashboard",controller="datamart",quantile="0.99"} 0.12403355538845062
http_request_duration_seconds{action="dashboard",controller="datamart",quantile="0.9"} 0.12403355538845062
http_request_duration_seconds{action="dashboard",controller="datamart",quantile="0.5"} 0.12403355538845062
http_request_duration_seconds{action="dashboard",controller="datamart",quantile="0.1"} 0.12403355538845062
http_request_duration_seconds{action="dashboard",controller="datamart",quantile="0.01"} 0.12403355538845062
http_request_duration_seconds_sum{action="dashboard",controller="datamart"} 3.710968255996704
http_request_duration_seconds_count{action="dashboard",controller="datamart"} 4
http_request_duration_seconds_sum{action="index",controller="datamarts"} 3.430244617164135
http_request_duration_seconds_count{action="index",controller="datamarts"} 2
http_request_duration_seconds_sum{action="show",controller="organizations"} 0.2341424524784088
http_request_duration_seconds_count{action="show",controller="organizations"} 1
http_request_duration_seconds_sum{action="available_actions",controller="organizations"} 0.026224397122859955
http_request_duration_seconds_count{action="available_actions",controller="organizations"} 1
http_request_duration_seconds_sum{action="resources",controller="organizations"} 1.199452392756939
http_request_duration_seconds_count{action="resources",controller="organizations"} 2
http_request_duration_seconds{action="create",controller="studio_configurations/updates",quantile="0.99"} 0.019537821412086487
http_request_duration_seconds{action="create",controller="studio_configurations/updates",quantile="0.9"} 0.019537821412086487
http_request_duration_seconds{action="create",controller="studio_configurations/updates",quantile="0.5"} 0.019537821412086487
http_request_duration_seconds{action="create",controller="studio_configurations/updates",quantile="0.1"} 0.019537821412086487
http_request_duration_seconds{action="create",controller="studio_configurations/updates",quantile="0.01"} 0.019537821412086487
http_request_duration_seconds_sum{action="create",controller="studio_configurations/updates"} 0.019537821412086487
http_request_duration_seconds_count{action="create",controller="studio_configurations/updates"} 1
# HELP http_request_redis_duration_seconds Time spent in HTTP reqs in Redis, in seconds.
# TYPE http_request_redis_duration_seconds summary
http_request_redis_duration_seconds_sum{action="other",controller="other"} 0.009621337056159973
http_request_redis_duration_seconds_count{action="other",controller="other"} 6
http_request_redis_duration_seconds_sum{action="show",controller="installations"} 0.012585863471031189
http_request_redis_duration_seconds_count{action="show",controller="installations"} 8
http_request_redis_duration_seconds_sum{action="tab",controller="installations"} 0.0033137649297714233
http_request_redis_duration_seconds_count{action="tab",controller="installations"} 2
http_request_redis_duration_seconds_sum{action="new",controller="installations/live_logs"} 0.004552192986011505
http_request_redis_duration_seconds_count{action="new",controller="installations/live_logs"} 3
http_request_redis_duration_seconds_sum{action="create",controller="installations/live_logs"} 0.001010611653327942
http_request_redis_duration_seconds_count{action="create",controller="installations/live_logs"} 3
http_request_redis_duration_seconds{action="dashboard",controller="datamart",quantile="0.99"} 0.0017080903053283691
http_request_redis_duration_seconds{action="dashboard",controller="datamart",quantile="0.9"} 0.0017080903053283691
http_request_redis_duration_seconds{action="dashboard",controller="datamart",quantile="0.5"} 0.0017080903053283691
http_request_redis_duration_seconds{action="dashboard",controller="datamart",quantile="0.1"} 0.0017080903053283691
http_request_redis_duration_seconds{action="dashboard",controller="datamart",quantile="0.01"} 0.0017080903053283691
http_request_redis_duration_seconds_sum{action="dashboard",controller="datamart"} 0.008207693696022034
http_request_redis_duration_seconds_count{action="dashboard",controller="datamart"} 4
http_request_redis_duration_seconds_sum{action="index",controller="datamarts"} 0.0016184374690055847
http_request_redis_duration_seconds_count{action="index",controller="datamarts"} 1
http_request_redis_duration_seconds_sum{action="show",controller="organizations"} 0.0014959275722503662
http_request_redis_duration_seconds_count{action="show",controller="organizations"} 1
http_request_redis_duration_seconds_sum{action="resources",controller="organizations"} 0.00341237336397171
http_request_redis_duration_seconds_count{action="resources",controller="organizations"} 2
http_request_redis_duration_seconds{action="create",controller="studio_configurations/updates",quantile="0.99"} 0.002705104649066925
http_request_redis_duration_seconds{action="create",controller="studio_configurations/updates",quantile="0.9"} 0.002705104649066925
http_request_redis_duration_seconds{action="create",controller="studio_configurations/updates",quantile="0.5"} 0.002705104649066925
http_request_redis_duration_seconds{action="create",controller="studio_configurations/updates",quantile="0.1"} 0.002705104649066925
http_request_redis_duration_seconds{action="create",controller="studio_configurations/updates",quantile="0.01"} 0.002705104649066925
http_request_redis_duration_seconds_sum{action="create",controller="studio_configurations/updates"} 0.002705104649066925
http_request_redis_duration_seconds_count{action="create",controller="studio_configurations/updates"} 1
# HELP http_request_sql_duration_seconds Time spent in HTTP reqs in SQL in seconds.
# TYPE http_request_sql_duration_seconds summary
http_request_sql_duration_seconds_sum{action="other",controller="other"} 0.06140446662902832
http_request_sql_duration_seconds_count{action="other",controller="other"} 6
http_request_sql_duration_seconds_sum{action="show",controller="installations"} 0.048522837460041046
http_request_sql_duration_seconds_count{action="show",controller="installations"} 8
http_request_sql_duration_seconds_sum{action="tab",controller="installations"} 0.004923224449157715
http_request_sql_duration_seconds_count{action="tab",controller="installations"} 2
http_request_sql_duration_seconds_sum{action="new",controller="installations/live_logs"} 0.007257640361785889
http_request_sql_duration_seconds_count{action="new",controller="installations/live_logs"} 3
http_request_sql_duration_seconds_sum{action="create",controller="installations/live_logs"} 0.000997498631477356
http_request_sql_duration_seconds_count{action="create",controller="installations/live_logs"} 3
http_request_sql_duration_seconds_sum{action="destroy",controller="installations/live_logs"} 0.0009742006659507751
http_request_sql_duration_seconds_count{action="destroy",controller="installations/live_logs"} 3
http_request_sql_duration_seconds{action="dashboard",controller="datamart",quantile="0.99"} 0.0022352486848831177
http_request_sql_duration_seconds{action="dashboard",controller="datamart",quantile="0.9"} 0.0022352486848831177
http_request_sql_duration_seconds{action="dashboard",controller="datamart",quantile="0.5"} 0.0022352486848831177
http_request_sql_duration_seconds{action="dashboard",controller="datamart",quantile="0.1"} 0.0022352486848831177
http_request_sql_duration_seconds{action="dashboard",controller="datamart",quantile="0.01"} 0.0022352486848831177
http_request_sql_duration_seconds_sum{action="dashboard",controller="datamart"} 0.012792453169822693
http_request_sql_duration_seconds_count{action="dashboard",controller="datamart"} 4
http_request_sql_duration_seconds_sum{action="index",controller="datamarts"} 0.0022542476654052734
http_request_sql_duration_seconds_count{action="index",controller="datamarts"} 2
http_request_sql_duration_seconds_sum{action="show",controller="organizations"} 0.0054513514041900635
http_request_sql_duration_seconds_count{action="show",controller="organizations"} 1
http_request_sql_duration_seconds_sum{action="available_actions",controller="organizations"} 0.000303804874420166
http_request_sql_duration_seconds_count{action="available_actions",controller="organizations"} 1
http_request_sql_duration_seconds_sum{action="resources",controller="organizations"} 0.005123749375343323
http_request_sql_duration_seconds_count{action="resources",controller="organizations"} 2
http_request_sql_duration_seconds{action="create",controller="studio_configurations/updates",quantile="0.99"} 0.0002689734101295471
http_request_sql_duration_seconds{action="create",controller="studio_configurations/updates",quantile="0.9"} 0.0002689734101295471
http_request_sql_duration_seconds{action="create",controller="studio_configurations/updates",quantile="0.5"} 0.0002689734101295471
http_request_sql_duration_seconds{action="create",controller="studio_configurations/updates",quantile="0.1"} 0.0002689734101295471
http_request_sql_duration_seconds{action="create",controller="studio_configurations/updates",quantile="0.01"} 0.0002689734101295471
http_request_sql_duration_seconds_sum{action="create",controller="studio_configurations/updates"} 0.0002689734101295471
http_request_sql_duration_seconds_count{action="create",controller="studio_configurations/updates"} 1
# HELP http_request_queue_duration_seconds Time spent queueing the request in load balancer in seconds.
# TYPE http_request_queue_duration_seconds summary
# HELP heap_free_slots Free ruby heap slots.
# TYPE heap_free_slots gauge
heap_free_slots{type="ruby",pid="80"} 21901
# HELP heap_live_slots Used ruby heap slots.
# TYPE heap_live_slots gauge
heap_live_slots{type="ruby",pid="80"} 861460
# HELP rss Total RSS used by process.
# TYPE rss gauge
rss{type="ruby",pid="80"} 250933248
# HELP major_gc_ops_total Major GC operations by process.
# TYPE major_gc_ops_total counter
major_gc_ops_total{type="ruby",pid="80"} 14
# HELP minor_gc_ops_total Minor GC operations by process.
# TYPE minor_gc_ops_total counter
minor_gc_ops_total{type="ruby",pid="80"} 119
# HELP allocated_objects_total Total number of allocated objects by process.
# TYPE allocated_objects_total counter
allocated_objects_total{type="ruby",pid="80"} 14312986
# HELP resque_processed_jobs Total number of processed Resque jobs.
# TYPE resque_processed_jobs gauge
resque_processed_jobs 10923
# HELP resque_failed_jobs Total number of failed Resque jobs.
# TYPE resque_failed_jobs gauge
resque_failed_jobs 90
# HELP resque_pending_jobs Total number of pending Resque jobs.
# TYPE resque_pending_jobs gauge
resque_pending_jobs 0
# HELP resque_queues Total number of Resque queues.
# TYPE resque_queues gauge
resque_queues 3
# HELP resque_working Total number of Resque workers working.
# TYPE resque_working gauge
resque_working 0
# HELP cpu_usage cpu usage percent
# TYPE cpu_usage gauge
cpu_usage 0.771274
# HELP memory_usage memory usage bytes
# TYPE memory_usage gauge
memory_usage 2256
10.7. Работа студии по https
При подключении к студии по защищённому протоколу HTTPS доступ осуществляется к:
Веб-интерфейсу студии
Запросам Proxy-API
Запросам API
Важно учесть, что если для настройки STUDIO_HTTPS_ENABLED установлено значение true, то необходимо заполнить параметр STUDIO_HTTPS_CERT, указав путь к доверенному сертификату. Например, если файл сертификата cert.pem находится в папке cert, необходимо указать путь /opt/datamart/cert/cert.pem.
Для генерации конфигурации Angie необходимо выполнить команду:
./datamart-studio configure_http2
10.7.1. Обновление SSL-сертификатов
В случае, если срок действия SSL-сертификата истекает (или истёк), администратор должен загрузить новые сертификат и ключ по путям ANGIE_SSL_CERT_PATH / ANGIE_SSL_KEY_PATH и применить новую конфигурацию:
Обновить сертификаты по указанным путям, например:
cp new-cert.pem ./volumes/angie/ssl/cert.pem
cp new-privkey.pem ./volumes/angie/ssl/privkey.pem
Сгенерировать новый конфигурационный файл Angie:
./datamart-studio configure_http2
Перезапустить Datamart Platform Studio для применения изменений:
./datamart-studio stop && ./datamart-studio start
10.7.2. Переход с HTTP на HTTPS (и возврат к HTTP)
В случае, если в Datamart Platform Studio требуется настроить защищенное соединение, необходимо:
В .env установить:
SSL_MODE=on
SSL_PORT=<port>
ANGIE_SSL_CERT_PATH=<cert_path>
ANGIE_SSL_KEY_PATH=<key_path>
Разместить сертификаты по указанным путям, например:
cp new-cert.pem ./volumes/angie/ssl/cert.pem
cp new-privkey.pem ./volumes/angie/ssl/privkey.pem
Сгенерировать конфигурационный файл Angie:
./datamart-studio configure_http2
Перезапустить Datamart Platform Studio для применения изменений:
./datamart-studio stop && ./datamart-studio start
В случае, если в Datamart Platform Studio требуется отключить защищенное соединение, необходимо:
В .env установить:
SSL_MODE=off
Сгенерировать конфигурационный файл Angie:
./datamart-studio configure_http2
Перезапустить Datamart Platform Studio для применения изменений:
./datamart-studio stop && ./datamart-studio start
10.7.3. Изменение порта веб-интерфейса
При необходимости изменения порта веб-интерфейса Datamart Platform Studio с 8088 на 9090, необходимо:
В .env установить:
WEB_PORT=9090
Сгенерировать конфигурационный файл Angie:
./datamart-studio configure_http2
Перезапустить Datamart Platform Studio для применения изменений:
./datamart-studio stop && ./datamart-studio start
10.8. Команды системного администратора (для использования Службой технической поддержки)
Предупреждение
Команды системного администратора должны выполняться из консоли опытным администратором и ТОЛЬКО после консультации с сотрудниками Технической поддержки Datamart Platform Studio!
Для получения списка доступных команд, обратитесь в Службу поддержки Datamart Platform Studio.
10.8.1. Ротация логов Docker-контейнеров приложений
В бандлах приложений Datamart Platform Studio, начиная с версии 1.8.2, настроена автоматическая ротация логов приложений в Docker-контейнерах.
Для выполнения ротации логов необходимо выполнить команду:
./datamart-studio logrotate_set <количество дней> <размер файла в Мб>
, где
<количество дней> - количество дней хранения;
<размер файла в Мб> - максимальный размер файла.
Примечание
при выполнении команды
sudo ./datamart-studio setupкомандаlogrotate_set 14 100выполняется автоматически (хранение 14 дней, макс. размер 100 МБ).
Для ручной настройки на сервере с Docker требуется добавить в файл /etc/docker/daemon.json следующее содержимое:
{
"storage-driver": "overlay2",
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "5"
}
}
Перезапустить Docker командой:
systemctl restart docker
10.8.2. Добавление репозитория в Gitea из файла-архива
В процессе работы технической поддержки для оперативной доставки бандлов с hotfix, чтоб не собирать Gitea volume под каждый hotfix можно выполнить следующие действия:
склонировать репозиторий из GitLab (именно
cloneчтоб была директория.git)заархивировать в .tar.gz
скопировать архив на управляющий сервер Datamart Platform Studio
запустить скрипт:
# для загрузки новой версии бандла приложения (при использовании внешнего Nexus, необходимо указать также его адрес):
./datamart-studio bundle_add <имя_архива.tar.gz> [адрес Nexus]
или
# для загрузки архива с бандлом в изолированной среде:
./datamart-studio bundle_add <путь/до/архива.tar.gz>