6. Конфигурирование сервера
Конфигурирование СМЭВ QL сервера выполняется путем изменения параметров настроек, определенных в файлах credentials.yaml и application.yaml.
application.yaml - конфигурирует поведение сервера;
credentials.yaml - конфигурирует представление сервера.
6.1. Конфигурация файла application.yml
ktor:
deployment:
port: "$PORT:8080"
application:
modules:
- ru.gov.digital.smevql.ApplicationKt.mainModule
sources:
directory: "$SOURCES_DIR:sources"
models:
directory: "$MODELS_DIR:models"
states:
directory: "$STATES_DIR:states"
regulated-query:
directory: "$QUERIES_DIR:queries"
swagger:
file: smevql-openapi.yaml # путь к файлу openapi спецификации
servers:
- "http://127.0.0.1:8080/smevql/api/v1"
storage: # Блок параметров хранения информации
adapter: redis # redis|postgres
pool: # Настройка подключений
- host: 127.0.0.1
port: 6379
database: "" # имя БД, используется для адаптера postgres
schema: "" # схема БД, используется для адаптера postgres
max-pool-size: 20 # Максимальный размер пула соединений
user: "" # Пользователь для подключения к redis|postgres
password: "" # Пароль
access: # Блок настроек доступа к выполнению операций чтения данных и операций стейтмашины. Допускается задание черного или белого списка
black-list: [ ] # Указывает список потребителей, для которых доступ запрещен
white-list: [ ] # Указывает список потребителей, для которых доступ разрешен
request:
strategy: delegate # Стратегия исполнения запросов delegate|atomic
timeout: 20s # Таймаут исполнения запросов
base-path: smevql/api/v1 # Префикс для всех роутов
max-nested-level: 5 # Предельная вложенность запрашиваемых ресурсов
omit-empty-array: false # Настройка, позволяющая исключить пустые строки массовов из ответа
pagination:
default: 100 # Количество элементов на странице по умолчанию
max: 1000 # Максимальное количество элементов на странице
logging:
long:
duration: 20s # Продолжительность исполнения запросов к источникам, выше которой необходимо производить логирование
percentage: 100 # Процент логирования длительных запросов к источникам. Допустимо использовать вещественные числа, например, 0.1 - только каждый тысячный долгий запрос
limits: # Блок параметров конфигурации лимитов
enabled: true # флаг влюкчения проверок лимитов
total: # Параметры по всем запросам
value: 500000 # Общее число запросов в период времени
period: 1D # Период лимитирования
mnemonic: # Блок настроек лимитирования по потребителям
value: 5000 # Число запросов в период времени
period: 1D # Период лимитирования
purpose: # Блок настроек лимитирования по целям
value: 5000 # Число запросов в период времени
period: 1D # Период лимитирования
user: # Блок настроек лимитирования по пользователям
value: 1000 # Число запросов в период времени
period: 1D # Период лимитирования
records-ttl:
day: 1M # Период хранения дневной статистики
week: 1M # Период хранения статистики за неделю
month: 1Y # Период хранения статистики за месяц
year: 2Y # Период хранения статистики за год
async: # Блок настроек асинхронного выполнения запросов
request-in: 10s # Значение интервала опроса получения данных асинхронного результата. Выдается в качестве значения атрибута request_in на запрос получения данных
read-timeout: 5m # Таймаут вычитывания асинхронных данных из источников. Используется для источников с типом smevql, если была возвращена информация по асинхронным результатам
delta:
commit-interval: 60s # Интервал фиксации дельты источника при изменении данных
force-commit-interval: 30m # Интервал принудительной фиксации дельт всех источников
state:
max-nested-event: 5 # Максимально допустимая вложенность связанных переходов стейт машины
max-updated-rows: 1 # Максимальное количество обновляемых строк при событии стейт машины
index-recommendations: # Рекомендации по аналитике
enabled: true # Флаг включения формирования рекомендаций
period: 7D # Период формирования. 7 дней
concurrency: 10 # Количество параллельных корутин сохранения статистики
# Массив описания standalone таблиц
standalone-tables: [ ]
# Пример описания
# standalone-tables:
# - readable-table: "misdm05.readable_book"
# writable-table: "misdm05.writable_book"
# anchor: "update_at"
# soft-delete: "delete_at"
# Массив описания proxy таблиц
proxy-tables: [ ]
# Пример описания
# proxy-tables:
# - table: "misdm05.notebook"
# anchor: "update_at"
# soft-delete: "delete_at"
push: # Настройки отправки push уведомлений
notification-path: "/{target}/push/notify" # Шаблон пути агента, на который необходимо отправлять нотификации
request-timeout: 1m # Таймаут на исполнение http запроса на доставку push уведомления потребителю
state-machine-enabled: false # Признак публикации нотификаций на основе событий стейт машины
status-prostore-enabled: true # Признак публикации нотификаций на основе событий статусов Простора
prostore:
type: KAFKA # KAFKA | HTTP
status-event-topic:
topic: "$PS_STATUS_EVENT_TOPIC:status.event"
property:
bootstrap.servers: "$PS_KAFKA:localhost:9092"
group.id: smevql-server-status-event
auto.offset.reset: earliest
retry:
max-attempts: 30 # Количество попыток отправки нотификации
min-period: 5s # Минимальный период ожидания перед повторной попыткой
max-period: 10s # Максимальный период ожидания перед повторной попыткой
queue:
max-attempts: 30 # Количество попыток отправки уведомлений из персистентной очереди
min-period: 1m # Минимальный период ожидания перед повторной попыткой отправки уведомления из персистентной очереди
max-period: 3m # Максимальный период ожидания перед повторной попыткой отправки уведомления из персистентной очереди
scan-waiting-period: 1m # Период сканирования отложенных уведомлений
process:
check-expired-period: 5m # Период проверки уведомлений взятых в работу и просроченных
timeout: 5m # Предельное время обработки уведомления из очереди
poisoned:
check-expired-period: 1h # Период проверки времени жизни "отравленных" уведомлений
timeout: 7d # Время хранения уведомлений в poisoned-очереди
storage-queue:
host: "$QUEUE_HOST:localhost"
port: "$QUEUE_PORT:5432"
database: "$QUEUE_DATABASE:smevql"
schema: "$QUEUE_SCHEMA:smevqlqueue"
user: "$QUEUE_USER:"
password: "$QUEUE_PASSWORD:"
agent: # Параметры конфигурирования агента ПОДД
host: 127.0.0.1 # Хост агента
port: 8171 # Порт приема api-gateway запросов
mnemonic: "" # Мнемоника агента
signature: # Блок настроек механизма подписания
enabled: true # Признак включения подписания и проверки подписи
validate-enabled: false # Признак предоставления дополнительного URL проверки подписи
algorithm: "GOST3410_2012_256" # Алгоритм формирования подписи
serial-number: "" # Серийный номер ключа подписи
alias: "" # Алиас ключа. Заполняется либо серийный номер, либо алиас
notarius: # Блок настроек сервиса Notaris, используемый для подписания
host: localhost # Хост, на котором доступен Notaris
port: 8080 # Порт, на котором доступен Notaris
cls: # Конфигурация отправки событий в СЦЛ
enabled: false # Признак включения отправки событий в СЦЛ
url: "http://127.0.0.1:8192/api/v1/cls/event" # Адрес для отправки событий СЦЛ
# Настройки модуля сбора информации о компонентах витрины
component-info:
enabled: true
# Источник в папке задаваемой настройкой ${sources.directory}
source: prostore
# DataSource Prostore
datasource: ''
# Схема Prostore
datamart: component_info
# Имя таблицы для записи информации о компоненте
table-name: component_info
# Период попыток создания схемы, при неуспехе
create-table-period: 60s
# Период публикации health-check
publish-period: 60s
# Период после которого компонент считается неактивным при отсутствии health-check
timeout-active: 300s
# Список элементов конфига маскируемых при отправке,
# если указан узловой элемент, то маскируются все вложенные в него элементы
secrets:
- storage.user
- storage.password
- storage-queue.user
- storage-queue.password
Настройка конфигурации СМЭВ QL сервера осуществляется путем редактирования параметров настроек в файле application.yml,
в котором могут быть настроены следующие секции:
ktor- настройки подключения фреймворка Ktor;sources- определение директории хранения источников;models- определение директории хранения моделей;states- определение директории хранения состояний;regulated-query- определение директории хранения регламентированных запросов;swagger- настройка файла openapi спецификации;storage- управление подключением к внутреннему хранилищу данных СМЭВ-QL;access- блок настроек доступа к выполнению операций чтения данных и операций стейт-машины;request- блок настроек исполнения запросов;delta- управление принудительными коммитами дельт витрин данных;state- установка ограничений в машинах-состояний;index_recommendations- рекомендации по аналитике;standalone-tables- массив описания standalone таблиц;proxy-tables- массив описания proxy таблиц;push- настройки отправки push уведомлений;storage-queue- настройки хранилища очередей;agent- Параметры конфигурирования агента СМЭВ4;signature- блок настроек механизма подписания;cls- конфигурация отправки событий в СЦЛ;component-info- настройки модуля сбора информации о компонентах витрины.
6.1.1. Секция ktor
В секции ktor настраивается параметры подключения фреймворка Ktor, например:
ktor:
deployment:
port: "$PORT:8080"
application:
modules:
- ru.gov.digital.smevql.ApplicationKt.mainModule
Параметры конфигурации
port- порт хоста развертывания фреймворка;modules- модули приложения.
6.1.2. Секция sources
В секции sources определяется директория хранения источников, например:
sources:
directory: "$SOURCES_DIR:sources"
Параметры конфигурации
directory- директория хранения источников.
6.1.3. Секция models
В секции models определяется директория хранения моделей, например:
models:
directory: "$MODELS_DIR:models"
Параметры конфигурации
directory- директория хранения моделей.
6.1.4. Секция states
В секции states определяется директория хранения состояний, например:
states:
directory: "$STATES_DIR:states"
Параметры конфигурации
directory- директория хранения состояний.
6.1.5. Секция regulated-query
В секции regulated-query определяется директория хранения регламентированных запросов, например:
regulated-query:
directory: "$QUERIES_DIR:queries"
Параметры конфигурации
directory- директория хранения состояний.
6.1.6. Секция swagger
В секции swagger хранится настройка файла openapi спецификации, например:
swagger:
file: smevql-openapi.yaml
servers:
- "http://127.0.0.1:8080/smevql/api/v1"
Параметры конфигурации
file- путь к файлу openapi спецификации;servers- адрес сервера.
6.1.7. Секция storage
В секции storage настраиваются параметры хранения информации, например:
storage: # Блок параметров хранения информации
adapter: redis # redis|postgres
pool: # Настройка подключений
- host: 127.0.0.1
port: 6379
database: "" # имя БД, используется для адаптера postgres
schema: "" # схема БД, используется для адаптера postgres
max-pool-size: 20 # Максимальный размер пула соединений
user: "" # Пользователь для подключения к redis|postgres
password: "" # Пароль
Параметры конфигурации
adapter- система хранения данных, на текущий момент поддерживается только redis;pool- указание host и port для подключения к хранилищу данных;host- адрес хоста;port- порт хоста;max_pool_size- максимальный размер пула соединений;user- имя пользователя для авторизации в системе хранения данных;password- пароль для авторизации в системе хранения данных.
6.1.8. Секция access
В секции access настраивается доступ к выполнению операций чтения данных и операций стейт-машины.
Допускается задание черного или белого списка.
Например:
access: # Блок настроек доступа к выполнению операций чтения данных и операций стейтмашины. Допускается задание черного или белого списка
black_list: [ ] # Указывает список потребителей, для которых доступ запрещен
white_list: [ ] # Указывает список потребителей, для которых доступ разрешен
Параметры конфигурации
black_list- перечень мнемоник ИС Потребителей, которым запрещен доступ к СМЭВ QL. Не заполняется, если заполнен white_list!white_list- перечень мнемоник ИС Потребителей, которым разрешен доступ к СМЭВ QL. Не заполняется, если заполнен black_list!
6.1.9. Секция request
В секции request хранятся настройки исполнения запросов, например:
request:
strategy: delegate # Стратегия исполнения запросов delegate|atomic
timeout: 20s # Таймаут исполнения запросов
base-path: smevql/api/v1 # Префикс для всех роутов
max-nested-level: 5 # Предельная вложенность запрашиваемых ресурсов
omit-empty-array: false # Настройка, позволяющая исключить пустые строки массовов из ответа
pagination:
default: 100 # Количество элементов на странице по умолчанию
max: 1000 # Максимальное количество элементов на странице
logging:
long:
duration: 20s # Продолжительность исполнения запросов к источникам, выше которой необходимо производить логирование
percentage: 100 # Процент логирования длительных запросов к источникам. Допустимо использовать вещественные числа, например, 0.1 - только каждый тысячный долгий запрос
limits: # Блок параметров конфигурации лимитов
enabled: true # флаг влюкчения проверок лимитов
total: # Параметры по всем запросам
value: 500000 # Общее число запросов в период времени
period: 1D # Период лимитирования
mnemonic: # Блок настроек лимитирования по потребителям
value: 5000 # Число запросов в период времени
period: 1D # Период лимитирования
purpose: # Блок настроек лимитирования по целям
value: 5000 # Число запросов в период времени
period: 1D # Период лимитирования
user: # Блок настроек лимитирования по пользователям
value: 1000 # Число запросов в период времени
period: 1D # Период лимитирования
records-ttl:
day: 1M # Период хранения дневной статистики
week: 1M # Период хранения статистики за неделю
month: 1Y # Период хранения статистики за месяц
year: 2Y # Период хранения статистики за год
async: # Блок настроек асинхронного выполнения запросов
request-in: 10s # Значение интервала опроса получения данных асинхронного результата. Выдается в качестве значения атрибута request_in на запрос получения данных
read-timeout: 5m # Таймаут вычитывания асинхронных данных из источников. Используется для источников с типом smevql, если была возвращена информация по асинхронным результатам
Параметры конфигурации
strategy- стратегия исполнения запросовdelegate``| ``atomic;timeout- таймаут исполнения запросов;base_path- префикс для роута запросов. Например,smevql/api/v1;max_nested_level- предельная вложенность запрашиваемых ресурсов;omit-empty-array- настройка, позволяющая исключить пустые строки массивов из ответа;pagination- управление количеством элементов при ответе. Содержит следующие атрибуты:default- количество элементов на странице по умолчанию;max- максимальное количество элементов на странице;
logging- управление логированием «долгих» запросов. Содержит следующие атрибуты:duration- продолжительность исполнения запросов к источникам, выше которой необходимо производить логирование. Например:20s;percentage- процент логирования длительных запросов к источникам. Допустимо использовать вещественные числа, например,0.1- только каждый тысячный долгий запрос;
limits- установка ограничений на количество запросов. Содержит следующие атрибуты:total- общее допустимое количество запросов к серверу:value- целочисленное значение количества запросов, например:1000;period- на какой период устанавливается ограничение, например: 1D (на сутки)
mnemonic- допустимое для одного потребителя данных количество запросов к серверу:value- целочисленное значение количества запросов, например:100;period- на какой период устанавливается ограничение, например:1D(на сутки);
purpose- допустимое количество запросов к одному ресурсу (таблице, объекту);value- целочисленное значение количества запросов, например:100;period- на какой период устанавливается ограничение, например:1D(на сутки);
user- допустимое количество запросов для пользователя:value- целочисленное значение количества запросов, например:100;period- на какой период устанавливается ограничение, например:1D(на сутки);
records_ttl- настройка хранения статистики по лимитам:day: 1M- период хранения дневной статистики;week: 1M- период хранения статистики за неделю;month: 1Y- период хранения статистики за месяц;year: 2Y- период хранения статистики за год;
async- блок настроек асинхронного выполнения запросов. Содержит следующие атрибуты:request_in- значение интервала опроса получения данных асинхронного результата. Выдается в качестве значения атрибута request_in на запрос получения данных;read_timeout- таймаут вычитывания асинхронных данных из источников. Используется для источников с типом smevql, если была возвращена информация по асинхронным результатам
6.1.10. Секция delta
В секции delta настраивается управление принудительными коммитами дельт витрин данных.
Например:
delta:
commit_interval: 60s # Интервал фиксации дельты источника при изменении данных
force_commit_interval: 30m # Интервал принудительной фиксации дельт всех источников
Параметры конфигурации
commit_interval- интервал фиксации дельты источника при изменении данных, например 60s;force_commit_interval- интервал принудительной фиксации дельт всех источников, например 30s.
Если commit_interval: 0 и force_commit_interval: 0, то для добавления/изменения/удаления данных в Prostore не используется
механизм открытия и закрытия дельт, а данные меняются прямым запросом.
При этом возникают следующие ограничения:
в бекап текущей реализации данные, софрмированные вне дельт, не попадают;
в результаты запросов к материализованным представлениям данные, софрмированные вне дельт, не попадают;
в рамках подписок данные, софрмированные вне дельт, не передаются.
6.1.11. Секция state
В секции state устанавливаются ограничения в стейт-машинах.
Например:
state:
max_nested_event: 5 # Максимально допустимая вложенность связанных переходов стейт машины
max_updated_rows: 1 # Максимальное количество обновляемых строк при событии стейт машины
Параметры конфигурации
max_nested_event- максимально допустимая вложенность связанных переходов стейт-машины, например 5;max_updated_rows- максимальное количество обновляемых строк при событии стейт-машины, например 1.
6.1.12. Секция index_recommendations
В секции index_recommendations настраиваются рекомендации по аналитике, например:
index_recommendations: # Рекомендации по аналитике
period: 7D # Период формирования. 7 дней
Параметры конфигурации
period- устанавливается период формирования аналитики, например 7 дней.
6.1.13. Секция standalone-tables
В секции standalone-tables настраиваются данные standalone таблиц.
Например:
standalone-tables: [ ]
# Пример описания
# standalone-tables:
# - readable-table: "misdm05.readable_book"
# writable-table: "misdm05.writable_book"
# anchor: "update_at"
# soft-delete: "delete_at"
Параметры конфигурации
readable-table- название readable таблицы;writable-table- название writable таблицы;anchor- название атрибута, характеризующего дату и время последнего изменения данных в нетемпоральной таблице;soft-delete- название атрибута, характеризующего дату и время удаления данных в нетемпоральной таблице.
6.1.14. Секция proxy-tables
В секции proxy-tables настраиваются данные прокси-таблиц.
Например:
# Массив описания proxy таблиц
proxy-tables: [ ]
# Пример описания
# proxy-tables:
# - table: "misdm05.notebook"
# anchor: "update_at"
# soft-delete: "delete_at"
Параметры конфигурации
table- название прокси таблицы;anchor- название атрибута характеризующего дату и время последнего изменения данных в нетемпоральной прокси таблице;soft-delete- название атрибута характеризующего дату и время удаления данных в нетемпоральной прокси таблице.
6.1.15. Секция push
В секции push содержатся настройки сервиса формирования push-уведомлений.
Например:
push: # Настройки отправки push уведомлений
notification-path: "/{target}/push/notify" # Шаблон пути агента, на который необходимо отправлять нотификации
request-timeout: 1m # Таймаут на исполнение http запроса на доставку push уведомления потребителю
state-machine-enabled: false # Признак публикации нотификаций на основе событий стейт машины
status-prostore-enabled: true # Признак публикации нотификаций на основе событий статусов Простора
prostore:
type: KAFKA # KAFKA | HTTP
status-event-topic:
topic: "$PS_STATUS_EVENT_TOPIC:status.event"
property:
bootstrap.servers: "$PS_KAFKA:localhost:9092"
group.id: smevql-server-status-event
auto.offset.reset: earliest
retry:
max-attempts: 30 # Количество попыток отправки нотификации
min-period: 5s # Минимальный период ожидания перед повторной попыткой
max-period: 10s # Максимальный период ожидания перед повторной попыткой
queue:
max-attempts: 30 # Количество попыток отправки уведомлений из персистентной очереди
min-period: 1m # Минимальный период ожидания перед повторной попыткой отправки уведомления из персистентной очереди
max-period: 3m # Максимальный период ожидания перед повторной попыткой отправки уведомления из персистентной очереди
scan-waiting-period: 1m # Период сканирования отложенных уведомлений
process:
check-expired-period: 5m # Период проверки уведомлений взятых в работу и просроченных
timeout: 5m # Предельное время обработки уведомления из очереди
poisoned:
check-expired-period: 1h # Период проверки времени жизни "отравленных" уведомлений
timeout: 7d # Время хранения уведомлений в poisoned-очереди
Параметры конфигурации
notification_path- шаблон пути агента, на который необходимо отправлять нотификации;request-timeout- таймаут на исполнение HTTP запроса на доставку push уведомления потребителю;state_machine_enabled- признак публикации нотификаций на основе событий стейт-машины;status-prostore-enabled- признак публикации нотификаций на основе событий статусов Prostore;prostore- настройки Prostore;retry- настройки попыток отправок нотификаций.
6.1.16. Секция storage-queue
В секции storage-queue указываются настройки хранилища очередей, например:
storage-queue:
host: "$QUEUE_HOST:localhost"
port: "$QUEUE_PORT:5432"
database: "$QUEUE_DATABASE:smevql"
schema: "$QUEUE_SCHEMA:smevqlqueue"
user: "$QUEUE_USER:"
password: "$QUEUE_PASSWORD:"
Параметры конфигурации
host- хост хранилища;port- порт хранилища;database- БД хранилища;schema- схема хранилища;user- пользователь хранилища;password- пароль подключения.
6.1.17. Секция agent
В секции agent указываются параметры подключения к Агенту СМЭВ4 поставщика, например:
agent: # Параметры конфигурирования агента СМЭВ4
host: 127.0.0.1 # Хост агента
port: 8171 # Порт приема api-gateway запросов
mnemonic: "" # Мнемоника агента
Параметры конфигурации
host- хост агента;port- порт приема api-gateway запросов;mnemonic- мнемоника агента СМЭВ4.
6.1.18. Секция signature
В секции signature настраивается управление механизмом цифровой подписи.
Например:
signature: # Блок настроек механизма подписания
enabled: true # Признак включения подписания и проверки подписи
validate_enabled: false # Признак предоставления дополнительного URL проверки подписи
algorithm: "GOST3410_2012_256" # Алгоритм формирования подписи
serial_number: "" # Серийный номер ключа подписи
alias: "" # Алиас ключа. Заполняется либо серийный номер, либо алиас
notarius: # Блок настроек сервиса Notaris, используемый для подписания
host: localhost # Хост, на котором доступен Notaris
port: 8080 # Порт, на котором доступен Notaris
Параметры конфигурации
enable- включение (true), отключение (false) подписи ответов и проверки подписей других источников;validate_enabled- признак предоставления дополнительного URL проверки подписи (доступность вызова REST-метода проверки подписи);algorithm- алгоритм формирования подписи. На текущий момент доступен только GOST3410_2012_256;serial_number- серийный номер ключа подписи;alias- алиас ключа, заполняется либо серийный номер, либо алиас;notarius- настройки подключения (host и port) к модулю криптографии notarius.
6.1.19. Секция cls
В секции signature настраивается конфигурация отправки событий в СЦЛ, например:
cls:
enabled: false
url: "http://127.0.0.1:8192/api/v1/cls/event"
Параметры конфигурации
enable- включение (true), отключение (false) отправки событий в СЦЛ;url- эндпоинт отправки событий;
6.1.20. Секция component-info
В секции component-info указываются настройки модуля сбора информации о компонентах витрины.
Например:
component-info:
enabled: true
datasource: ''
datamart: component_info
table-name: component_info
create-table-period: 60s
publish-period: 60s
timeout-active: 300s
secrets:
- redis.password
Параметры настроек
datasource- датасорс из настроек Prostore;datamart- схема Prostore;table-name- имя таблицы для записи информации о компоненте;create-table-period- период попыток создания схемы, в случае не успешного создания;publish-period- период публикации health-check;timeout-active- период, после которого компонент считается неактивным при отсутствии health-check;secrets- список элементов конфигурации, маскируемых при отправке, если указан узловой элемент, то маскируются все вложенные в него элементы.
6.2. Конфигурация файла credentials.yml
version: 1.0.0
system:
mnemonic: smev_ql_mnemonic
instance: smev_ql_instance
Параметры конфигурации
version- номер версии СМЭВ QL;mnemonic- мнемоника СМЭВ QL, по этому параметру осуществляется идентификация СМЭВ QL сервер во внешних системах и СМЭВ4;instance- наименование инстанса СМЭВ QL.
6.3. Общий сценарий выполнения
Администратор системы открывает на редактирование нужный файл (
credentials.yamlи/илиapplication.yaml) настроек СМЭВ QL сервер и меняет требуемые параметры.Перезапускает приложение для применения новых настроек. Для этого открывает консоль утилиты работы со СМЭВ QL и выполняет команду:
./smevql restart