Skip to content

Настройки

Раздел описывает доступные переменные окружения для образов axiom и axiom-web. Установка приложения описана в инструкции по установке

Приложение Axiom (API / worker)

Значения по-умолчнию указаны через = после имени переменной. Значения, указанные как = secret:... задаются через хранилище секретов Vault.

  • ENV_NM = "prod": имя среды
  • DEFAULT_PERMISSION_LEVEL = "full": уровень доступа по-умолчанию
  • APP - настройки приложения
    • APP__NAME = "axiom": отображаемое имя приложения
    • APP__AUTO_LINKS = true: создавать ли авто-связи между сущностями
    • APP__MAX_DELETE_BATCH_SIZE = 50: максимальное количество датасетов при удаление через /dataset/delete
    • APP__DEFAULT_ITEMS_LIMIT = 100: количество элементов в ответе пагинированного эндпоинта по умолчанию
    • APP__MAX_ITEMS_LIMIT = 5000: максимальное количество элементов в ответе пагинированного эндпоинта
    • APP__DEFAULT_PREVIEW_LIMIT = 100: количество строк, возвращаемое методами /dataset/preview и /v100/sources/{source_rk}/preview по-умолчанию
    • APP__MAX_PREVIEW_LIMIT = 100: максимально допустимое для запроса количество строк в методах /dataset/preview/ и /v100/sources/{source_rk}/preview
    • APP__MAX_CHAIN_LENGTH = 4: максимальная длина цепочки связей
    • APP__MAX_CHAINS_COUNT = 5000: максимальное количество цепочек связей в ответе
    • APP__DEFAULT_SOURCE_RK = -1: суррогатный ключ источника по умолчанию для запуска заданий
    • APP__DEFAULT_ASYNC_DELETE = false: удалять датасеты в фоновом процессе по умолчанию
    • APP__STAT_DISTINCT_LIMIT = 1000: максимальное количество возвращаемых значений в статистике DISTINCT
    • APP__LOCK_TIMEOUT = 7200 - максимальное время блокировки (в секундах)
  • API - настройки web-сервиса
    • API__ROOT_PATH_PREFIX = null: корневой префикс для всех эндпоинтов
  • EXECUTOR - Настройки Celery
    • EXECUTOR__BROKER_URL = secret:executor-broker-url: адрес брокера сообщений redis/sentinel или rabbit-mq
    • EXECUTOR__OPTIONS = {}: дополнительные опции приложения Celery в формате JSON
    • TASK_RETRY_COUNT = 5: количество попыток повторного запуска задачи после ошибки
    • TASK_RETRY_DELAY = 10: задержка между попытками
    • DELETE_DATASET_BATCH_SIZE = null: Размер пачки для разового удаления
    • DELETE_DATASET_DELAY = 0: Задержка после удаления пачки
  • META - настройки БД с метаданными приложения
    • META__URL = secret:meta-db-url: строка подключения до postgre c метаданными
    • META__CONN_OPTIONS = {}: дополнительные опции движка SQLAlchemy в формате JSON
    • META__SCHEMA = "meta": схема в БД, где приложение хранит метаданные
  • DB - настройки БД, где находится витрина с данными
    • DB__URL = secret:db-url: строка подключения до движка с витриной (deprecated)
    • DB__CONN_OPTIONS = {}: дополнительные опции движка SQLAlchemy в формате JSON (deprecated)
    • DB__STAGE_SCHEMA = "stage": схема в БД, используемая как staging area (deprecated)
    • DB__STORE_SCHEMA = "store": схема в БД, используемая загрузчиками (deprecated)
    • DB__DATASET_SCHEMA = "dataset": схема в БД, используемая для сохранения датасетов в API V2
    • DB__WORK_SCHEMA = "work": схема в БД, используемая для создания временных объектов (deprecated)
    • DB__MAX_NAME_LENGTH = 63: максимальное допустимая длина имени объектов в БД
  • ENGINE - настройки поведения конструктора
    • ENGINE__TEMP_OBJECTS_DROP = true: удалять ли временные объекты после завершения джоба
    • ENGINE__TEMP_OBJECTS_AS = "cte": как создавать временные объекты: table/view/cte/subquery
    • ENGINE__FINAL_OBJECTS_AS = "table": способ создания целевых таблиц: table/ctas. Если table, то таблица создается через create table + insert, иначе через create table as select
    • ENGINE__ASYNC_FACTOR = 4: максимальное количество одновременных SQL запросов
    • ENGINE__AUTO_ANALYZE = true: запускать ли сбор статистики в БД над созданными объектами
    • ENGINE__AUTO_INDEX = false: создавать ли индекс на таблицах по ключу сущности
    • ENGINE__DEFAULT_STORAGE_KEY = null: ключ распределения по-умолчанию, если движок его поддерживает (deprecated)
  • LOG - настройки логирования
    • LOG__PREFIX = "axiom-log": префикс строчки в stout, для текстового формата логов
    • LOG__LEVEL = "INFO": уровень логирования
    • LOG__FILE_NAME = "/var/log/axiom/axiom.log.jsonl": имя файла для логов
  • TELEMETRY - настройки OpenTelemetry
    • TELEMETRY__ENABLED = false: Включить отправку OpenTelemetry данных по протоколу OTLP
    • TELEMETRY__SERVICE_NAME = $APP__NAME::$SUBSYSTEM: Имя сервиса с которым будут сохраняться данные телеметрии в сборщике
    • TELEMETRY__EXCLUDE_URLS = ['/health/liveness', '/health/readiness', 'favicon.ico']: Список URL, по которых не надо собирать телеметрию
    • TELEMETRY__EVENT_LOGGERS = ['$APP__NAME', 'fs-core', 'fs-alchemy']: Список логгеров, записи которых следует добавлять в качестве события в span
  • KEYCLOAK - настройки аутентификации и авторизации
    • KEYCLOAK__AUTH_REQUIRED = false: требуется ли авторизация
    • KEYCLOAK__URL = secret:keycloak-url: адрес сервиса Keycloak
    • KEYCLOAK__SSL_VERIFICATION = true: использовать ли ssl верификацию при подключении к keycloak: true/false/<путь до сертификата>
    • KEYCLOAK__STRATEGY = "introspect": стратегия, используемая для авторизации: userinfo/introspect
    • KEYCLOAK__ACCESS_ROLES = {"read":"axiom_read","load":"axiom_load","transform":"axiom_transform","admin":"axiom_admin"}: имена ролей, используемых для ролевого доступа
    • KEYCLOAK__CLIENT_ID = "axiom_client": имя клиента, в котором заведны роли доступа
    • KEYCLOAK__CLIENT_SECRET = secret:keycloak-client-secret: секрет для доступа к клиенту, если выбрана стратегия introspect
    • KEYCLOAK__CACHE_LIFETIME = 7200: время жизни кеша с токенами в секундах
    • KEYCLOAK__SIGN_ALGORITHM = "RS256": алгоритм подписи токена, используемый в keycloak
  • S3 - настройки файлового хранилища S3
    • S3__ENABLED = false: присутствует ли S3 в инсталляции
    • S3__URL = null: адрес API хранилища S3
    • S3__SSL_VERIFICATION = true: использовать ли ssl верификацию при подключении к s3: true/false/<путь до сертификата>
    • S3__BUCKET = null: имя бакета в S3 хранилище
    • S3__ACCESS_KEY = secret:s3-access: S3 access key
    • S3__SECRET_ACCESS_KEY = secret:s3-secret: S3 secret access key
    • S3__DATASET_CSV_PATH = "dataset_csv": каталог внутри бакета, куда выгружаются CSV датасетов
    • S3__MAX_FILE_SIZE_MB = 64: максимальный размер файла в мегабайтах
    • S3__FILE_ENCODING = "utf-8": кодировка, используемая для текстовых файлов
    • S3__URL_EXPIRE_INTERVAL = 300: как долго живет ссылка для скачивания файлов, в секундах
    • S3__HTTP_TIMEOUT = 15: максимальное время ожидания ответа от S3 в секундах
  • SWAGGER - настройки работы swagger
    • SWAGGER__ENABLED = true: Доступен ли интерфейс Swagger UI по адресу /api/doc, /tech/doc и /api/v100/doc
    • SWAGGER__USE_BUNDLED = true: Использовать встроенную версию .js и .css ресурсов для сваггера
    • SWAGGER__TOKEN_URL = null: кастомный адрес, по которому получать токен

Web-сервер: guincorn

В качестве веб сервера для API приложения используется gunicorn (WSGI) с воркерами uvicorn (ASGI), полный список настроек доступен в официальной документации.

Рекомендуемые:

  • WEB_CONCURRENCY = 4 - количество воркеров uvicorn
  • GUNICORN_CMD_ARGS = --keep-alive 65 - дополнительные параметры командной строки
  • FORWARDED_ALLOW_IPS = '*' - фильтр на IP, с которых принимаются соединения

Планировщик сelery: redbeat

Запуск заданий на расписании осуществляется через плагин к redbeat.

При запуске планировщик смотрит на следующие переменные окружения:

Мониторинг celery: flower

Настройка мониторинга описана на странице Monitoring

Менеджер процессов: supervisor

Все компоненты приложения стартуют и управляются через supervisor, полный список настроек доступен в официальной документации.

Настройки менеджера распроложены в axiom/etc/supervisor.conf, дополнительная ручная конфигурация не предусмотрена.

Web-интерфейс

// адрес API бэкэнда
FS_API = '/api'
// адрес Keycloak
AUTH_URL = 'https://auth.k8s.datasapience.ru/auth'
// клиент авторизации в keycloak
CLIENT_ID = 'frontend'
// Включение / отключение документации в интерфейсе
DOCS_ENABLED = 'false'
// Суффикс после домена адреса WEB интерфейса
ROOT_PATH_PREFIX = ''
// Доступен ли SQL лоадер в интерфейсе
LOADER_SQL = 'false'
// адрес kolmogorov predicate, если предусмотрен в инсталляции
PREDICATE_URL = 'https://predicate-dev.k8s.datasapience.ru'
// Наличие дага расчета статистик датасетов
DENSITY_PLOT = 'false'
// Есть ли sentry сервер
SENTRY_ENABLED = 'true'
// адрес sentry сервера
SENTRY_DSN = 'https://<token>@sentry-kolmogorov.k8s.datasapience.ru/4'
// переименования ключей в логгере
LOG_KEY_REDEFINE = '{\"level\":\"lvl\", \"sdkProcessingMetadata\": \"sdkPM\"}'
// Версия приложения, которая будет отображаться в углу интерфейса,
// при необходимости указать отличную от релиза
DISPLAY_VERSION = ''
// Адрес сервиса генератора Excel каталога
INFOMAP_GENERATOR_API = ''
// Отображаемое название приложения
APP_NAME = 'Morphism'
// Папка с набором логотипов для приложения
IMAGES_FOLDER_KEY = 'morphism'

Поддержка Excel каталога (инфокарты)

Для реализации возможности импорта каталога в формате Excel необходимо:

  • Развернуть сервис генератор инфокарты
  • Указать в values.yaml адрес сервиса в переменную INFOMAP_GENERATOR_API

Настройка иконок и логотипов в web-интерфейсе

Предустановлены логотипы/иконки для следующих продуктов: Morphism, Audience, Alphyn. Значения переменной IMAGES_FOLDER_KEY соответственно morphism, audience, alphyn.

Для настройки собственных иконок и логотипов следующий порядок действий:

  • Создать новую папку в public/images/<folder name>
  • Загрузить в нее изображения со следующими именами:
    • logo_favicon.svg - иконка для вкладки браузера
    • logo_main.svg - иконка на главной странице входа
    • logo_title.svg - логотип в верхнем левом углу интерфейса
  • Указать <folder name> в переменной IMAGES_FOLDER_KEY

Пояснения для SSL settings

Настройка SSL верификации доступна для разделов S3 и KEYCLOAK. Правила настройки общие:

  • Если SSL верификация не требуется, указать значение переменной <PREFIX>__SSL_VERIFICATION = false
  • Если все сервисы, к которым идет обращение, поднимаются с тем же самым сертификатом, что и приложение axiom, достаточно указать значение <PREFIX>__SSL_VERIFICATION = true.
  • Если какой-то из сервисов поднимается с самоподписанным сертификатом, то необходимо:
    • Выгрузить его сертификат в файл <prefix>_cert.crt.
    • Создать секрет в кластере k8s из файла-сертификата с именем ssl-cert-secret, содержащий в себе все необходимые самоподписанные сертификаты.
    • Примонтировать файлы-сертификат к приложению Axiom
      (закомметированные строки в values.yaml: service.persistentVolumes -> ssl-verification-cert)
    • Указать значение переменной <PREFIX>__SSL_VERIFICATION = '/usr/certs/<prefix>_cert.crt'