Вы читаете development версию документации. Для просмотра актуальной версии перейдите в ветку: master.

10. Дополнительная информация

10.1. Настройка количества обработчиков заданий

Datamart Platform Studio обрабатывает фоновые задачи через Resque, которые отправляются в очереди в Redis, а оттуда их на выполнение забирают обработчики заданий (воркеры). В это число входят запуск задач инсталляций, обновлений приложений и других Ansible-playbook, требуемых для обслуживания услуг типа «Витрина данных».

10.1.1. Как устроены очереди и воркеры

В Datamart Platform Studio две категории очередей: Системные и Очереди услуг. Воркер смотрит всегда на одну очередь.

10.1.1.1. Системные очереди

Системные очереди добавляются по умолчанию, независимо от настроек:

Таблица 10.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 задаёт количество очередей услуг.

Таблица 10.2 Допустимые значения переменной RESQUE_QUEUE_POOL_SIZE

Значение

Очереди услуг

Поведение

0

нет

Все задачи услуг попадают в очередь default

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. Для этого нужно:

  1. Открыть файл .env в каталоге установки Datamart Platform Studio

  2. Установить нужное значение в переменной RESQUE_QUEUE_POOL_SIZE

RESQUE_QUEUE_POOL_SIZE=1
  1. Остановить Datamart Platform Studio

./datamart-studio stop
  1. Затем запустить DPS:

./datamart-studio start

Примечание

Изменения вступят в силу только после перезапуска контейнера resque (команд stop/start)

10.1.3. Примеры распределения задач по очередям

  1. Добавлено очередей RESQUE_QUEUE_POOL_SIZE = 2 и услуги с id = 1, 2, 3

Таблица 10.3 Распределение по очередям при RESQUE_QUEUE_POOL_SIZE=2

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.

  1. Добавлено очередей RESQUE_QUEUE_POOL_SIZE = 3, услуги с id = 1, 3, 4, 5

Таблица 10.4 Распределение по очередям при RESQUE_QUEUE_POOL_SIZE=3

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.

  1. Добавлено очередей RESQUE_QUEUE_POOL_SIZE=2, услуги с id = 1, 3, 5, 7, 9

Таблица 10.5 Распределение по очередям при RESQUE_QUEUE_POOL_SIZE=2

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):

  1. containers - контейнеры для оффлайн установки

  2. dms-dirs - директория со служебными папками dms-* внутри

  3. fluent-bit - конфиги для контейнера fluent-bit для отправки логов Datamart Platform Studio в opensearch (используется в ГосТех)

  4. log - логи студии

  5. volumes - вольюмы redis (nexus, gitea и БД если они нужны)

Структура директорий |prod|

Рисунок 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>