2. Настройка программы
2.1. Настройка технических средств
Серверы, на которых устанавливается Типовое ПО «Витрина данных», должны соответствовать техническим характеристикам указанным в документе «Техническое описание системы» раздел Рекомендуемые технические и программные средства, в котором приводятся требования к серверному оборудованию (CPU, RAM, HDD и т.д.), программному обеспечению и каналам связи.
Необходимые настройки для серверов описаны в документе «Руководство по установке», в котором приводятся требования к серверам, доступности портов для каждого сервера, настройка протоколов, наличие библиотек и т.д.
2.2. Настройка программных средств
Все предварительные действия необходимые перед установкой программы, процесс установки и проверка корректной установки программы описан в документе «Руководство по установке» в разделе «Подготовка к установке».
Внимание
Программные средства настраиваются в зависимости от используемой конфигурации. Состав компонентов приведен в разделе Состав компонентов в дистрибутиве документа «Техническое описание системы».
2.2.1. Настройка ProStore
2.2.1.1. Настройка Сервиса исполнения запросов (query-execution)
Конфигурация инстанса узла Сервиса исполнения запросов (query-execution) Prostore представляет собой текстовый YAML-файл, параметры которого организованы в древовидную структуру.
Файл конфигурации содержит логику и порядок работы Сервиса исполнения запросов.
Для наглядности конфигурация сервиса исполнения запросов разделена на отдельные секции.
Пример файла конфигурации Prostore приведен в разделе Конфигурация ноды документации Prostore.
2.2.1.2. Настройка коннекторов
Следующие коннекторы требуют настройки конфигурации:
Kafka-Clickhouse writer connector;
Kafka-Postgres writer connector;
Kafka Jet writer connector.
Конфигурация коннектора представляет собой текстовый YAML-файл, параметры которого организованы в древовидную структуру.
Пример файла конфигурации Prostore приведен в разделе Конфигурация коннекторов документации Prostore.
2.2.2. Настройка СМЭВ QL Сервера
2.2.2.1. Конфигурирование сервера
Конфигурирование СМЭВ QL сервера выполняется путем изменения параметров настроек, определенных в файлах credentials.yaml и application.yaml.
application.yaml - конфигурирует поведение сервера;
credentials.yaml - конфигурирует представление сервера.
2.2.2.1.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"
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- определение директории хранения состояний;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- настройки модуля сбора информации о компонентах витрины.
2.2.2.1.1.1. Секция ktor
В секции ktor настраивается параметры подключения фреймворка Ktor, например:
ktor:
deployment:
port: "$PORT:8080"
application:
modules:
- ru.gov.digital.smevql.ApplicationKt.mainModule
Параметры конфигурации
port- порт хоста развертывания фреймворка;modules- модули приложения.
2.2.2.1.1.2. Секция sources
В секции sources определяется директория хранения источников, например:
sources:
directory: "$SOURCES_DIR:sources"
Параметры конфигурации
directory- директория хранения источников.
2.2.2.1.1.3. Секция models
В секции models определяется директория хранения моделей, например:
models:
directory: "$MODELS_DIR:models"
Параметры конфигурации
directory- директория хранения моделей.
2.2.2.1.1.4. Секция states
В секции states определяется директория хранения состояний, например:
states:
directory: "$STATES_DIR:states"
Параметры конфигурации
directory- директория хранения состояний.
2.2.2.1.1.5. Секция swagger
В секции swagger хранится настройка файла openapi спецификации, например:
swagger:
file: smevql-openapi.yaml
servers:
- "http://127.0.0.1:8080/smevql/api/v1"
Параметры конфигурации
file- путь к файлу openapi спецификации;servers- адрес сервера.
2.2.2.1.1.6. Секция 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- пароль для авторизации в системе хранения данных.
2.2.2.1.1.7. Секция access
В секции access настраивается доступ к выполнению операций чтения данных и операций стейт-машины.
Допускается задание черного или белого списка.
Например:
access: # Блок настроек доступа к выполнению операций чтения данных и операций стейтмашины. Допускается задание черного или белого списка
black_list: [ ] # Указывает список потребителей, для которых доступ запрещен
white_list: [ ] # Указывает список потребителей, для которых доступ разрешен
Параметры конфигурации
black_list- перечень мнемоник ИС Потребителей, которым запрещен доступ к СМЭВ QL. Не заполняется, если заполнен white_list!white_list- перечень мнемоник ИС Потребителей, которым разрешен доступ к СМЭВ QL. Не заполняется, если заполнен black_list!
2.2.2.1.1.8. Секция 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, если была возвращена информация по асинхронным результатам
2.2.2.1.1.9. Секция 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 не используется
механизм открытия и закрытия дельт, а данные меняются прямым запросом.
При этом возникают следующие ограничения:
в бекап текущей реализации данные, софрмированние вне дельт, не попадают;
в результаты запросов к материализованным представлениям данные, софрмированние вне дельт, не попадают;
в рамках подписок данные, софрмированние вне дельт, не передаются.
2.2.2.1.1.10. Секция state
В секции state устанавливаются ограничения в стейт машинах.
Например:
state:
max_nested_event: 5 # Максимально допустимая вложенность связанных переходов стейт машины
max_updated_rows: 1 # Максимальное количество обновляемых строк при событии стейт машины
Параметры конфигурации
max_nested_event- максимально допустимая вложенность связанных переходов стейт машины, например 5;max_updated_rows- максимальное количество обновляемых строк при событии стейт машины, например 1.
2.2.2.1.1.11. Секция index_recommendations
В секции index_recommendations настраиваются рекомендации по аналитике, например:
index_recommendations: # Рекомендации по аналитике
period: 7D # Период формирования. 7 дней
Параметры конфигурации
period- устанавливается период формирования аналитики, например 7 дней.
2.2.2.1.1.12. Секция 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- название атрибута характеризующего дату и время удаления данных в нетемпоральной таблице.
2.2.2.1.1.13. Секция proxy-tables
В секции proxy-tables настраиваются данные прокси-таблиц.
Например:
# Массив описания proxy таблиц
proxy-tables: [ ]
# Пример описания
# proxy-tables:
# - table: "misdm05.notebook"
# anchor: "update_at"
# soft-delete: "delete_at"
Параметры конфигурации
table- название прокси таблицы;anchor- название атрибута характеризующего дату и время последнего изменения данных в нетемпоральной прокси таблице;soft-delete- название атрибута характеризующего дату и время удаления данных в нетемпоральной прокси таблице.
2.2.2.1.1.14. Секция 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- настройки попыток отправок нотификаций.
2.2.2.1.1.15. Секция 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- пароль подключения.
2.2.2.1.1.16. Секция agent
В секции agent указываются параметры подключения к Агенту СМЭВ4 поставщика, например:
agent: # Параметры конфигурирования агента СМЭВ4
host: 127.0.0.1 # Хост агента
port: 8171 # Порт приема api-gateway запросов
mnemonic: "" # Мнемоника агента
Параметры конфигурации
host- хост агента;port- порт приема api-gateway запросов;mnemonic- мнемоника агента СМЭВ4.
2.2.2.1.1.17. Секция 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.
2.2.2.1.1.18. Секция cls
В секции signature настраивается конфигурация отправки событий в СЦЛ, например:
cls:
enabled: false
url: "http://127.0.0.1:8192/api/v1/cls/event"
Параметры конфигурации
enable- включение (true), отключение (false) отправки событий в СЦЛ;url- эндпоинт отправки событий;
2.2.2.1.1.19. Секция 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- список элементов конфига маскируемых при отправке, если указан узловой элемент, то маскируются все вложенные в него элементы.
2.2.2.1.2. Конфигурация файла credentials.yml
version: 1.0.0
system:
mnemonic: smev_ql_mnemonic
instance: smev_ql_instance
Параметры конфигурации
version- номер версии СМЭВ QL;mnemonic- мнемоника СМЭВ QL, по этому параметру осуществляется идентификация СМЭВ QL сервер во внешних системах и СМЭВ4;instance- наименование инстанса СМЭВ QL.
2.2.2.1.3. Общий сценарий выполнения
Администратор системы открывает на редактирование нужный файл (
credentials.yamlи/илиapplication.yaml) настроек СМЭВ QL сервер и меняет требуемые параметры.Перезапускает приложение для применения новых настроек. Для этого открывает консоль утилиты работы со СМЭВ QL и выполняет команду:
./smevql restart
2.2.3. Настройка СМЭВ3-адаптера
2.2.3.1. Конфигурация СМЭВ3-адаптер (application.yml)
Файл application.yml – основной конфигурационный файл CМЭВ3-адаптера,
в котором задана логика и порядок работы адаптера:
получение входящих запросов, их обработка;
настройка подключения к СМЭВ и FTP-серверу СМЭВ3, к Prostore через REST-запросы;
настройка алгоритма формирования и проверки электронной подписи(ЭП) и т.д.
2.2.3.1.1. Пример файла application.yml
vertx:
#Настройки вертикса
#тут можно указать все настройки из документации для vertx
props:
# метрики
metricsOptions:
enabled: true
# тип метрик, например prometheusOptions | jmxMetricsOptions
prometheusOptions:
enabled: true
startEmbeddedServer: true
embeddedServerOptions:
#порт для сервера с метриками
port: 9033
web-client:
max-pool-size: 20
spring:
main:
allow-bean-definition-overriding: true
iua: # Блок настроек взаимодействия с сервисом ИУА
it-system: "" # мнемоника информационной системы
wsdl-url: http://localhost:7575/ws/?wsdl # адрес к wsdl веб сервиса ИУА
endpoint-address: "" # Endpoint для запросов к сервису ИУА. По умолчанию указывать не требуется
retry-count: 2
retry-delay: 500ms
smev:
# self | iua
# self- собственная реализация подписи и взаимодействия с транспортом
# iua- подписание и работа с транспортом через адаптер ИУА
implementation: self
#url смэва
endpointUrl: http://localhost:7979/api/v1/soap/
keystoreType: "DUMMY"
keystoreFile: x
keystorePass: x
privateKeyAlias: x
privateKeyPass: x
certificateAlias: x
signatureURI: "http://www.w3.org/2001/04/xmldsig-more#dummy"
# алгоритм подписи
signatureAlgorithm: "DUMMY"
#метод подписи
digestMethod: "http://www.w3.org/2001/04/xmldsig-more#dummy"
#версия схемы смев
#availiabe 1.2 and 1.3
version: 1.3
#верификация входящих сообщений
incomingVerificationEnabled: false
#подпись исходящих сообщений
outgoingSigningEnabled: false
#таймаут отправки сообщения в смев
timeout: 30000
#время между попытками перепосылки в смев
retry-timeout: 30000
#максимальный размер очереди, ожидающей отправки сообщений
webMaxWaitQueueSize: -1
#пул коннектов
webMaxPoolSize: 20
receiver:
receiver-property:
- selector: # селектор сообщений из смэв
# используется при smev3->implementation: self, должно быть пусто или может отсутствовать при использовании smev3->implementation: iua
namespace: a
# используется при smev3->implementation: self, должно быть пусто или может отсутствовать при использовании smev3->implementation: iua
root-element-name: b
# используется при smev3->implementation: iua, должно быть пусто или может отсутствовать при использовании smev3->implementation: self
router-extra-queue: some_request
# пебл шаблон, который будет обрабатываться для определенного selector
template: smev3-adapter/templates/smev.xml.peb
# задержка между запросами, в случае если очередь пуста
idle-delay: PT1m
# файл, который будет отправлен в случае ошибки
fallback-response: smev3-adapter/templates/fallback.xml
pebble-refresh: PT5m
- selector:
namespace: urn://x-artefacts-testperson/1.0
root-element-name: TestPersonRequest
router-extra-queue: some_request
template: smev3-adapter/templates/smev.xml.peb
idle-delay: PT1m
response-receiver-property:
- selector: # селектор из смэв
# используется при smev3->implementation: self, должно быть пусто или может отсутствовать при использовании smev3->implementation: iua
namespace: a
# используется при smev3->implementation: self, должно быть пусто или может отсутствовать при использовании smev3->implementation: iua
root-element-name: b
# используется при smev3->implementation: iua, должно быть пусто или может отсутствовать при использовании smev3->implementation: self
router-extra-queue: some_request
# пебл шаблон, который будет обрабатываться для определенного selector
template: smev3-adapter/templates/smev.xml.peb
# задержка между запросами, в случае если очередь пуста
idle-delay: PT1m
persistence-mode: prostore # prostore -default, zookeeper
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
default-schema: demo_view
# Параметры витрины персистентности в Prostore, используемой для технического функционала
prostore-persistence:
persistence-datamart: persistence
datasource: # по умолчанию пусто, тогда берется единственный датасорс из настроек Простора
environment:
name: ${ENVIRONMENT_NAME:test}
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal}
retryPolicy:
baseSleepTime: 1000
maxRetries: 3
maxSleepTime: 3000
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
migration:
zk-enabled: ${MIGRATION_ZK_ENABLE:false}
# Конфигурация хранилища параметров (для SDB)
paramstorage:
base-path: '/smev/paramstorage'
table-variables: smev3_adapter_variables
sign:
#алгоритм подписи файла
digest-algorithm: 1.2.643.7.1.1.2.2
blob:
blob-source: # настройки подключения к BLOB адаптеру
host: 'localhost'
port: 8080
path:
ftp-destination:
host: localhost # хост фтп смева
port: 21 # порт фтп смева
# path: aaa/bbb/ccc # корневой каталог
user: user # пользователь
password: 123 # пароль
rest:
enabled: false # вкл/выкл
get: /le # путь get запроса
post: /le # путь post запроса
template: smev3-adapter/templates/smev.xml.peb # обрабатываемый шаблон
# рассылка смев
scheduler:
templates:
- enabled: false # вкл/выкл
interval: PT30s # интервал между запусками
template: smev3-adapter/templates/pfr-delta.peb # обрабатываемый шаблон
pool:
reader-executor: 20 # корутин пул для обработки смев шаблонов
schedule-executor: 1 # корутин пул для обработки шедулера
logExecutor: 20
logging:
level:
root: info
ru:
rtlabs:
smev:
logging: trace
request-response:
smev-request: true
smev-response: true
http-server:
port: ${SERVER_PORT:8080}
backup:
mode: ${BACKUP_MODE:rest} # kafka | rest
rest:
uri: ${BACKUP_URI:/backup}
backupTopic: ${BACKUP_TOPIC:adapter.backup}
statusTopic: ${STATUS_TOPIC:adapter.status}
kafka:
consumer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
group.id: ${SMEV3_BACKUP_GROUP_ID:smev3-adapter_adapter_command}
auto.offset.reset: latest
producer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
# Параметры подключения к сервису печатных форм. Указывается при использовании функции toSpf
spf:
host: ${SPF_HOST:localhost}
port: ${SPF_PORT:8080}
# Дополнительные параметры. Указываются ключ-значения сертификатов, необходимых для сервиса ПФ
params: {}
# Параметры подключения динамических конфигураций
dynamic-config:
# Включение процедуры сканирования источника на предмет наличия конфигураций
enabled: false
# Интервал проверки источника
refresh: PT3m
# Источник подключаемых конфигураций
table-receiver-scheduler: smev3_adapter_receiver_scheduler
# Источник pebble-шаблонов
table-pebble: smev3_adapter_pebble
# Настройки модуля сбора информации о компонентах витрины
component-info:
enabled: true
# 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:
- keys
# Допускаются лишь скалярные строковые значения,
# так например переменная pebble-variables→host станет доступна в pebble как {{host}}
pebble-variables: { }
2.2.3.2. Параметры конфигурации
Настройка конфигурации CМЭВ3-адаптера осуществляется путем редактирования параметров настроек в файле application.yml.
Обязательными параметрами для настройки CМЭВ3-адаптера являются секции: smev, receiver, datasource. Остальные параметры следует
оставить без изменения и настраивать только для решения определенных бизнес-задач.
Pebble-шаблоны для настройки задаются в секциях: receiver-property, rest и scheduler.
Для каждого вида сведений, предоставляемых Витриной, следует создавать отдельное сопоставление receiver и устанавливать значения
receiver-property. Остальные параметры следует оставить без изменения.
В файле конфигурации могут быть настроены следующие секции:
vertx– настройка параметров фреймворка Vert.x (подробнее на сайте разработчиков: https://vertx.io/docs/).spring– подключение к фреймворку spring boot (используется для разработки);iua- блок настроек взаимодействия с сервисом ИУА;smev– настройки подключения к CМЭВ3-адаптеру;receiver- настройка взаимодействия СМЭВ-запросов с Peblle-шаблонами (для каждогоreceiverможно настроить количествоinstance);persistence-mode- настройки хранения данных;prostore-rest-client- блок параметров конфигурирования взаимодействия с ProStore;prostore-persistence– Параметры витрины персистентности в Prostore, используемой для технического функционала;environment- настройки окружения;zookeeper– параметры подключения к Zookeeper;migration– настройка параметров миграции сервисной базы данных CМЭВ3-адаптера**` в базу данных **Zookeeper;paramstorage– указывается корневой путь хранилища параметров;sign- настройка формирования и проверки электронной подписи(ЭП) в SOAP-пакетах СМЭВ3;blob- интеграция с BLOB-адаптер;rest- настройки подключения для возможности выполнения rest-запросов к СМЭВ3-адаптеру и получения ответов на них;scheduler- настройка планировщика заданий (запуск дельт по расписанию);pool- размер прерываемого кода;logging– настраивается логирование работы модуля;http-server- указывается порт веб-сервера;backup- настройки бекапирования;spf- параметры подключения к сервису печатных форм (Указывается при использовании функции toSpf);dynamic-config- параметры подключения динамических конфигураций;component-info- настройки модуля сбора информации о компонентах витрины.
2.2.3.2.1. Секция vertx
Секция vertx предназначена для настройки параметров фреймворка Vert.x (подробнее на сайте разработчиков: https://vertx.io/docs/).
Для включения сбора метрик используйте следующий код:
vertx:
#Настройки вертикса
#тут можно указать все настройки из документации для vertx
props:
# метрики
metricsOptions:
enabled: true
# тип метрик, например prometheusOptions | jmxMetricsOptions
prometheusOptions:
enabled: true
startEmbeddedServer: true
embeddedServerOptions:
#порт для сервера с метриками
port: 9033
web-client:
max-pool-size: 20
2.2.3.2.2. Секция spring
Секция spring подключение к фреймворку spring boot (используется для разработки).
Например:
spring:
main:
allow-bean-definition-overriding: true
2.2.3.2.3. Секция iua
Секция iua хранит блок настроек взаимодействия с сервисом ИУА.
Например:
iua:
it-system: ""
wsdl-url: http://localhost:7575/ws/?wsdl
endpoint-address: "" # Endpoint для запросов к сервису ИУА. По умолчанию указывать не требуется
retry-count: 2
retry-delay: 500ms
Параметры настроек
it-system- мнемоника информационной системы;wsdl-url- адрес к wsdl веб сервиса ИУА;endpoint-address- Endpoint для запросов к сервису ИУА. По умолчанию указывать не требуется;idle-delay- периодичность опроса очереди СМЭВ3 для получения новых запросов (в формате ISO 8601).retry-count- кол-во попыток осуществления запросов к сервису;retry-delay- период задержки в секундах.
2.2.3.2.4. Секция smev
Секция smev отвечает за настройки подключения к СМЭВ3.
Например:
smev:
endpointUrl: http://127.0.0.1:7979/api/v1/soap/
keystoreType: "DUMMY"
keystoreFile: x
keystorePass: x
privateKeyAlias: x
privateKeyPass: x
certificateAlias: x
signatureURI: "http://www.w3.org/2001/04/xmldsig-more#dummy"
signatureAlgorithm: "DUMMY"
digestMethod: "http://www.w3.org/2001/04/xmldsig-more#dummy"
incomingVerificationEnabled: false
outgoingSigningEnabled: true
#таймаут отправки сообщения в смев
timeout: 30000
#время между попытками перепосылки в смев
retry-timeout: 30000
#максимальный размер очереди, ожидающей отправки сообщений
webMaxWaitQueueSize: -1
#пул коннектов
webMaxPoolSize: 20
В случае, когда СМЭВ3 не отвечает на запрос, в новой версии СМЭВ3-адаптера (секция smev), добавлена возможность, которая позволяет задать
время ожидания ответа (timeout) перед повторной отправкой запроса к СМЭВ3:
timeout- таймаут отправки сообщения в СМЭВ3;retry-timeout- время между повторной попыткой отправки запроса в СМЭВ3;webMaxWaitQueueSize- максимальный размер очереди, ожидающей отправки сообщений;webMaxPoolSize- пул коннектов.
Примечание
Для удобного отслеживания в лог-файлах всех запросов/ответов к СМЭВ3 в рамках одной бизнес-операции, в файл logback-json.xml добавлен параметр ReqMessageID.
При обработке ошибки от СМЭВ3, в лог-файл добавляется описание ошибки и код ошибки СМЭВ3 (в том случае, если СМЭВ3 вернул данный код в блоке description).
2.2.3.2.5. Секция receiver
Секция receiver предназначена для настройки параметров взаимодействия СМЭВ-запросов с peblle-шаблонами.
Например:
receiver:
receiver-property:
- selector: # селектор сообщений из смэв
# используется при smev3->implementation: self, должно быть пусто или может отсутствовать при использовании smev3->implementation: iua
namespace: a
# используется при smev3->implementation: self, должно быть пусто или может отсутствовать при использовании smev3->implementation: iua
root-element-name: b
# используется при smev3->implementation: iua, должно быть пусто или может отсутствовать при использовании smev3->implementation: self
router-extra-queue: some_request
# пебл шаблон, который будет обрабатываться для определенного selector
template: smev3-adapter/templates/smev.xml.peb
# задержка между запросами, в случае если очередь пуста
idle-delay: PT1m
# файл, который будет отправлен в случае ошибки
fallback-response: smev3-adapter/templates/fallback.xml
- selector:
namespace: urn://x-artefacts-testperson/1.0
root-element-name: TestPersonRequest
router-extra-queue: some_request
template: smev3-adapter/templates/smev.xml.peb
idle-delay: PT1m
response-receiver-property:
- selector: # селектор из смэв
# используется при smev3->implementation: self, должно быть пусто или может отсутствовать при использовании smev3->implementation: iua
namespace: a
# используется при smev3->implementation: self, должно быть пусто или может отсутствовать при использовании smev3->implementation: iua
root-element-name: b
# используется при smev3->implementation: iua, должно быть пусто или может отсутствовать при использовании smev3->implementation: self
router-extra-queue: some_request
# пебл шаблон, который будет обрабатываться для определенного selector
template: smev3-adapter/templates/smev.xml.peb
# задержка между запросами, в случае если очередь пуста
idle-delay: PT1m
Параметры настроек
selector- селектор сообщений из СМЭВ;namespace- пространство имен в XML.root-element-name- имя корневого элемента запроса обрабатываемого ВС (как указано в заявке на регистрацию ВС);router-extra-queue- очередь роутера, используется при smev3->implementation: iua, должно быть пусто или может отсутствовать при использовании smev3->implementation: self;templateимя файла, содержащего pebble-шаблон обработки запросов для данного ВС;idle-delay- периодичность опроса очереди СМЭВ3 для получения новых запросов (в формате ISO 8601).
Пример файла smev.xml.peb
<TestPersonResponse xmlns="urn://x-artefacts-testperson/1.0">
{% set my_blob = fromblob ("/Picture_13.jpg", "my_fname", "my_mime") %}
<photo>{{ toftp ("some test 1", "file.txt", "text/plain") }}</photo>
<photo>{{ toftp ("some test 2", "file.txt", "text/plain") }}</photo>
<photo>{{ toftp ("some test 3", "file2.txt", "text/plain") }}</photo>
<photo>{{ tomtom (my_blob, my_mime) }}</photo>
</TestPersonResponse>
Пример файла fallback.xml (Ответ при ошибке обработки запроса)
<TestPersonResponse xmlns="urn://x-artefacts-testperson/1.0">
<text>Произошла ошибка при обработке запроса: %error_message%</text>
</TestPersonResponse>
2.2.3.2.6. Секция persistence-mode
В секции persistence-mode указывается настройка хранения данных: или в Prostore или в Zookeeper. в случае
выбора Prostore автоматически создаются необходимые таблицы.
Например:
persistence-mode: ${PERSISTENCE_MODE:prostore} # prostore -default, zookeeper
Параметры настроек
persistence-mode- настройка хранения данных, напримерPERSISTENCE_MODE:prostore.
2.2.3.2.7. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore.
Например:
prostore-rest-client:
persistence-datamart: persistence
datasource: # по умолчанию пусто, тогда берется единственный датасорс из настроек Простора
table-variables: smev3_adapter_variables
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
default-schema: demo_view
Параметры настроек
persistence-datamart- датамарт, где будут располагаться таблицы хранения данных, используется приpersistence-mode = prostoredatasource- источник данных, напримерpersistence;table-variables- таблица переменных СМЭВ3-адаптера, напримерsmev3_adapter_variables;host- адрес Prostore, напримерPS_HOST:t5-prostore-01.ru-central1.internal;port- порт Prostore, напримерPS_PORT:9195;max-pool-size- максимальное число подключений к Prostore, напримерPS_MAX_POOL_SIZE:8.
2.2.3.2.8. Секция prostore-persistence
В секции prostore-persistence реализован блок параметров витрины персистентности в Prostore, используемой для технического функционала.
Например:
prostore-persistence:
persistence-datamart: persistence
datasource: # по умолчанию пусто, тогда берется единственный датасорс из настроек Простора
Параметры настроек
persistence-datamart- датамарт, где будут располагаться таблицы хранения данных, используется приpersistence-mode = prostoredatasource- источник данных, напримерpersistence.
2.2.3.2.9. Секция environment
В секции environment указывается среда разработки (dev, test, stable, prod)
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- Название окружения, напримерENVIRONMENT_NAME:test.
2.2.3.2.10. Секция zookeeper
Секция zookeeper предназначена для настройки параметров подключения к Zookeeper.
Например:
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal}
retryPolicy:
baseSleepTime: 1000
maxRetries: 3
maxSleepTime: 3000
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
Параметры настроек
connect-string- адреса серверов для подключения к Zookeeper (разделитель -,);baseSleepTime- начальное значение таймаута ожидания при повторных запросах;maxRetries- максимальное количество повторных запросов;maxSleepTime- максимальное значение таймаута ожидания при повторных запросах.
2.2.3.2.11. Секция migration
Секция migration реализована настройка миграции зукипера для задачи бекапирования.
Например:
migration:
zk-enabled: ${MIGRATION_ZK_ENABLE:false}
Параметры настроек
enabled- подключение миграции, например{MIGRATION_ENABLE:false}.
2.2.3.2.12. Секция paramstorage
В секции paramstorage указывается корневой путь до сервера Zookeeper для механизма параметров (ключ-значение).
Например:
paramstorage:
base-path: '/smev/paramstorage'
2.2.3.2.13. Секция deltastorage
В секции deltastorage указывается корневой путь до сервера Zookeeper для механизма дельт.
Например:
deltastorage:
base-path: '/smev/deltastorage'
2.2.3.2.14. Секция sign
Секция sign предназначена для формирования и проверки электронной подписи (ЭП) в SOAP-пакетах СМЭВ3.
Например:
sign:
digest-algorithm: 1.2.643.7.1.1.2.2
Параметры настроек
digest-algorithm- алгоритм ключа проверки электронной подписи.
2.2.3.2.15. Секция blob
Секция blob предназначена для настройки взаимодействия модуля СМЭВ3-адаптер с:
BLOB-адаптером для считывания BLOB-полей (см. Взаимодействие через СМЭВ3-адаптер);
FTP-сервером СМЭВ3, на который модуль СМЭВ3-адаптер выгружает содержимое BLOB-полей и/или большие табличные данные.
Например:
blob:
blob-source: # настройки подключения к BLOB адаптеру
host: 'localhost'
port: 8080
path:
ftp-destination:
host: localhost # хост фтп смева
port: 21 # порт фтп смева
# path: aaa/bbb/ccc # корневой каталог
user: user # пользователь
password: 123 # пароль
Параметры настроек
blob-source- настройка подключения к BLOB-адаптеру;ftp-destination- настройка подключения к FTP-серверу СМЭВ3.
2.2.3.2.16. Секция rest
Секция rest предназначена для настройки возможности выполнения REST-запросов к СМЭВ3-адаптеру и получения ответов на них.
Например:
rest:
enabled: false # вкл/выкл
get: /le # путь get запроса
post: /le # путь post запроса
template: smev3-adapter/templates/smev.xml.peb # обрабатываемый шаблон
Параметры настроек
enabled- включение настроек;get- путь GET запроса;post- путь POST запроса;template- путь к Pebble-шаблону.
2.2.3.2.17. Секция scheduler
Секция scheduler предназначена для настройки планировщика заданий в случае, если планируется использовать механизм отправки дельт
по расписанию.
Например:
scheduler:
templates:
- enabled: false
interval: PT30s
template: smev3-adapter/templates/pfr-delta.peb
Параметры настроек
enabled- включение планировщика заданий;interval- интервал между отправкой дельт;template- путь к Pebble-шаблону.
2.2.3.2.18. Секция pool
В секции pool указывается размер прерываемого кода.
Например:
pool:
reader-executor: 20
schedule-executor: 1
logExecutor: 20
Параметры настроек
reader-executor- корутин пул для обработки смев шаблонов;schedule-executor- корутин пул для обработки шедулера.
2.2.3.2.19. Секция logging
В секции logging настраивается логирование работы модуля.
Например:
logging:
level:
root: info
ru:
rtlabs:
smev:
logging: trace
request-response:
smev-request: true
smev-response: true
Параметры настроек
smev-request- логирование запросов;smev-response- логирование ответов.
2.2.3.2.20. Секция http-server
В секции http-server указывается порт веб-сервера.
Например:
server:
port: ${SERVER_PORT:8080}
Параметры настроек
port- порт веб-сервера, например:SERVER_PORT:8080.
2.2.3.2.21. Секция backup
Секция backup предназначена для настроек бекапирования модуля.
Например:
backup:
mode: ${BACKUP_MODE:rest} # kafka | rest
rest:
uri: ${BACKUP_URI:/backup}
backupTopic: ${BACKUP_TOPIC:adapter.backup}
statusTopic: ${STATUS_TOPIC:adapter.status}
kafka:
consumer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost}
group.id: ${CSV_UPLOADER_BACKUP_GROUP_ID:csv_uploader_adapter_command}
auto.offset.reset: latest
producer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost}
Параметры настроек
mode- режим бекапирования, напримерBACKUP_MODE:rest;uri- путь к файлу бекапирования в случае выбора REST-сервисов для режима бэкапирования;backupTopic- топик для отправки сохраненных данных, например:{BACKUP_TOPIC:adapter.backup};statusTopic- топик для отправки статусов бэкапирования, например:{STATUS_TOPIC:adapter.status}.
2.2.3.2.22. Секция spf
В секции spf указываются параметры подключения к сервису печатных форм. Указывается при использовании функции toSpf.
Например:
spf:
host: ${SPF_HOST:localhost}
port: ${SPF_PORT:8080}
# Дополнительные параметры. Указываются ключ-значения сертификатов, необходимых для сервиса ПФ
params: {}
Параметры настроек
host- адрес подключения, например{SPF_HOST:localhost};port- порт подключения, например:{SPF_PORT:8080};params- Дополнительные параметры. Указываются ключ-значения сертификатов, необходимых для сервиса ПФ.
2.2.3.2.23. Секция dynamic-config
В секции dynamic-config хранятся параметры подключения динамических конфигураций.
Например:
dynamic-config:
# Включение процедуры сканирования источника на предмет наличия конфигураций
enabled: false
# Интервал проверки источника
refresh: PT3m
# Источник подключаемых конфигураций
table-receiver-scheduler: smev3_adapter_receiver_scheduler
# Источник pebble-шаблонов
table-pebble: smev3_adapter_pebble
Параметры настроек
enabled- включение процедуры сканирования источника на предмет наличия конфигураций;refresh- интервал проверки источника;table-receiver-scheduler- источник подключаемых конфигураций, напримерsmev3_adapter_receiver_scheduler;table-pebble- источник pebble-шаблонов, напримерsmev3_adapter_pebble;
2.2.3.2.24. Секция 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:
- keys
Параметры настроек
enabled- статус подключения компонента, указывается булево значение;datasource- датасорс Prostore;datamart- схема Prostore;table-name- имя таблицы для записи информации о компоненте;create-table-period- период попыток создания схемы, при неуспехе, указывается в секундах;publish-period- период публикации health-check, указывается в секундах;timeout-active- период после которого компонент считается неактивным при отсутствии health-check, указывается в секундах;secrets- список элементов конфига маскируемых при отправке, если указан узловой элемент, то маскируются все вложенные в него элементы.
2.2.4. Настройка CSV-Uploader
2.2.4.1. Конфигурация CSV-uploader (application.yml)
Файл application.yml – основной конфигурационный файл модуля CSV-uploader, в котором задана логика и порядок
работы загрузчика, а также другие настройки необходимые для корректной работы адаптера.
2.2.4.1.1. Пример файла application.yml
http-server:
# Порт для старта веб сервера
port: ${HTTP_PORT:8080}
# Включить веб-сервер
enabled: ${HTTP_ENABLED:true}
file-size:
# Ограничение на размер оправляемого файла (мегабайты)
restriction: ${SEND_FILE_SIZE_RESTRICTION:1024}
logging.level:
root: info
ru.itone: debug
environment:
# Папка для ошибочных файлов
error-folder: ${ENVIRONMENT_ERROR_FOLDER:error}
prostore-rest-client:
persistence-datamart: ${PERSISTENCE_DATAMART:persistence} # датамарт, в котором будут располагаться таблицы с данными сервиса
datasource: ${PERSISTENCE_DATASOURCE:} # по умолчанию пусто, тогда берется единственный датасорс из настроек Простора
table-flk-journal: ${PERSISTENCE_FLK_JOURNAL_TABLE:csv_uploader_flk_journal} # таблица журнала ФЛК
table-upload-journal: ${PERSISTENCE_UPLOAD_JOURNAL_TABLE:csv_uploader_upload_journal} # таблица журнала загрузок
table-settings: ${PERSISTENCE_SETTINGS_TABLE:csv_uploader_settings} # таблица хранения настроек сервиса
storage-duration: 14d # продолжительность хранения данных в журналах
cleanup-interval: 10m # периодичность очистки данных из таблиц журналов
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
validation:
enabled: ${VALIDATION_ENABLE:true}
rest-uploader-url: ${REST_UPLOADER_URL:http://localhost:8081}
upload:
# требуется токен для аутентификации на rest-uploader
jwt-auth: ${JWT_AUTH:false}
jwt-token: ${JWT_TOKEN:null}
# Настройки парсера csv файлов
csv-parser:
# Символ разделителя значений
separator: ${CSV_PARSER_SEPARATOR:;}
# Символ кавычки
quote-char: ${CSV_PARSER_QUOTE_CHAR:"}
# Символ экранирования значений
escape-char: ${CSV_PARSER_ESCAPE_CHAR:'}
# Настройка интерпретации значений как null. Допустимые значения:
# - EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;
# - EMPTY_QUOTES - пустые кавычки, например ;"";
# - BOTH - оба варианта
# - NEITHER - никогда. Пустая строка всегда определяется как пустая строка
field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}
metrics:
port: ${METRICS_PORT:9837}
backup:
mode: ${BACKUP_MODE:rest} # kafka | rest
rest:
uri: ${BACKUP_URI:/backup}
backupTopic: ${BACKUP_TOPIC:adapter.backup}
statusTopic: ${STATUS_TOPIC:adapter.status}
kafka:
consumer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost}
group.id: ${CSV_UPLOADER_BACKUP_GROUP_ID:csv_uploader_adapter_command}
auto.offset.reset: latest
producer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost}
2.2.4.2. Параметры конфигурации
Настройка конфигурации CSV-uploader осуществляется путем редактирования параметров настроек в файле application.yml.
В файле конфигурации CSV-uploader могут быть настроены следующие секции:
http-server- настройки порта подключения;file-size- ограничение на размер отправляемого файла (мегабайты);logging.level- настройка сохранения лог-файла;environment- определяет папку для ошибочных файлов;prostore-rest-client- блок параметров конфигурирования взаимодействия с ProStore;validation- адрес подключения модуля REST-Uploader;upload- требование токена для аутентификации на REST-Uploader;csv-parser- настройка парсинга CSV;metrics- настройка получения метрик;backup- настройка бэкапирования модуля;
2.2.4.2.1. Секция http-server
Секция http-server предназначена для настройки порта и протокола передачи данных (одно из значений http или https).
Например:
http:
port: ${HTTP_PORT:8080}
enabled: ${HTTP_ENABLED:true}
Параметры конфигурации
port- порт для старта веб-сервера, напримерHTTP_PORT:8080;enabled- статус включения/отключения веб-сервера, напримерHTTP_ENABLED:true.
2.2.4.2.2. Секция file-size
Секция file-size отвечает за ограничение на размер отправляемого файла (указывется в мегабайтах).
file-size:
restriction: ${SEND_FILE_SIZE_RESTRICTION:1024}
Параметры конфигурации
restriction- ограничение на размер отправляемого файла, напримерSEND_FILE_SIZE_RESTRICTION:1024.
2.2.4.2.3. Секция logging.level
В секции logging.level настраиваются записи логирования.
Например:
logging.level:
root: info
ru.itone: debug
2.2.4.2.4. Секция environment
В секции environment указывается папка для ошибочных файлов.
Например:
environment:
error-folder: ${ENVIRONMENT_ERROR_FOLDER:error}
Параметры конфигурации
error-folder- папка для ошибочных файлов, напримерENVIRONMENT_ERROR_FOLDER:error.
2.2.4.2.5. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore.
Например:
prostore-rest-client:
persistence-datamart: ${PERSISTENCE_DATAMART:persistence}
datasource: ${PERSISTENCE_DATASOURCE:}
table-flk-journal: ${PERSISTENCE_FLK_JOURNAL_TABLE:csv_uploader_flk_journal}
table-upload-journal: ${PERSISTENCE_UPLOAD_JOURNAL_TABLE:csv_uploader_upload_journal}
table-settings: ${PERSISTENCE_SETTINGS_TABLE:csv_uploader_settings}
storage-duration: 14d
cleanup-interval: 10m
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
Параметры настроек
persistence-datamart- датамарт, в котором будут располагаться таблицы с данными сервиса, напримерPERSISTENCE_DATAMART:persistence;datasource- по умолчанию пусто, берется единственный датасорс из настроек Prostore;table-flk-journal- таблица журнала ФЛК, напримерPERSISTENCE_FLK_JOURNAL_TABLE:csv_uploader_flk_journal;table-upload-journal- таблица журнала загрузок, напримерPERSISTENCE_UPLOAD_JOURNAL_TABLE:csv_uploader_upload_journal;table-settings- таблица хранения настроек сервиса, напримерPERSISTENCE_SETTINGS_TABLE:csv_uploader_settings;storage-duration- продолжительность хранения данных в журналах, например14d, указывается в днях;cleanup-interval- периодичность очистки данных из таблиц журналов, например10m, указывается в минутах;host- адрес Prostore, напримерPS_HOST:localhost;port- порт Prostore, напримерPS_PORT:9195;max-pool-size- максимальное число подключений к Prostore, напримерPS_MAX_POOL_SIZE:8.
2.2.4.2.6. Секция validation
В секции validation реализован механизм настройки валидации ФЛК.
Например:
validation:
enabled: ${VALIDATION_ENABLE:true}
rest-uploader-url: ${REST_UPLOADER_URL:http://localhost:8081}
Параметры конфигурации
enabled- подключение к сервису REST-Uploader для выполнения валидации, напримерVALIDATION_ENABLE:true;rest-uploader-url- URL к сервису REST-Uploader для выполнения валидации, например{REST_UPLOADER_URL:http://localhost:8081}.
2.2.4.2.7. Секция upload
В секции upload реализована настройка требования токена для аутентификации на REST-Uploader (если true, то при переключении на вкладку
Загрузка появляется модальное окно для задания токена в текстовом виде и кнопка Сохранить).
Например:
upload:
jwt-auth: ${JWT_AUTH:false}
jwt-token: ${JWT_TOKEN:null}
Параметры конфигурации
jwt-auth- требование токена для аутентификации на REST-Uploader у пользователя при отправке данных на загрузку из пользовательского интерфейса, например{JWT_AUTH:false};jwt-token- токен аутентификации REST-Uploader, используется для загрузки по расписанию в версии 2.0
2.2.4.2.8. Секция csv-parser
Внимание
При загрузке файлов с форматно-логическим контролем, важно, чтобы настройки секции csv-parser были одинаковыми в модулях CSV-Uploader(если используется его UI),REST-Uploader и DATA-Uploader.
Секция csv-parser - настройка парсинга CSV.
Например:
# Настройки парсера csv файлов
csv-parser:
# Символ разделителя значений
separator: ${CSV_PARSER_SEPARATOR:;}
# Символ кавычки
quote-char: ${CSV_PARSER_QUOTE_CHAR:"}
# Символ экранирования значений
escape-char: ${CSV_PARSER_ESCAPE_CHAR:'}
# Настройка интерпретации значений как null. Допустимые значения:
# - EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;
# - EMPTY_QUOTES - пустые кавычки, например ;"";
# - BOTH - оба варианта
# - NEITHER - никогда. Пустая строка всегда определяется как пустая строка
field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}
Параметры конфигурации
separator- Символ разделителя значений, напримерCSV_PARSER_SEPARATOR:;;quote-char- символ кавычки, напримерCSV_PARSER_QUOTE_CHAR:";escape-char- Символ экранирования значений, напримерCSV_PARSER_ESCAPE_CHAR:';Настройка интерпретации значений как null. Допустимые значения:
EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;
EMPTY_QUOTES - пустые кавычки, например ;»»;
BOTH - оба варианта;
NEITHER - никогда. Пустая строка всегда определяется как пустая строка
field-as-null- способ определения null поля, напримерCSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS.
Дополнительное описание параметров
Параметр
CSV_PARSER_ESCAPE_CHARработает следующим образом: если символ экранирования и символ кавычки равны", то будет использован RFC4180Parser, который считывает все символы между двумя двойными кавычками, при этом двойная кавычка в тексте поля должна быть экранирована двойной кавычкой (Например"поле, ""содержащее двойную кавычку"""будет считано какполе, "содержащее двойную кавычку"). В противном случае будет использован CSVParser, использующий символ экранирования для обозначения «непечатаемых символов».Параметр
CSV_PARSER_FIELD_AS_NULLможет принимать следующие значения:EMPTY_SEPARATORS- два разделителя полей (см. csv-parser/separator) подряд считаются null. Например: строка [aaa,,ccc] содержит значения [«aaa», null, «bbb»], а строка [aaa,»»,ccc] содержит значения [«aaa», «», «bbb»].EMPTY_QUOTES- два «ограничителя строки» (см. csv-parser/escape-char) подряд считаются null. Например: строка [aaa,»»,ccc] содержит значения [«aaa», null, «bbb»], а строка [aaa,,ccc] содержит значения [«aaa», «», «bbb»].BOTH- оба варианта (см.EMPTY_SEPARATORSиEMPTY_QUOTES) считаются null. Например: обе строки [aaa,»»,ccc] и [aaa,,bbb] содержат одинаковое значение [«aaa», null, «bbb»].NEITHER- ни один из вариантов (см.EMPTY_SEPARATORSиEMPTY_QUOTES) не считается null. Например: обе строки [aaa,»»,ccc] и [aaa,,bbb] содержат одинаковое значение [«aaa», «», «bbb»].
2.2.4.2.9. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры конфигурации
port- Порт для метрик, напримерMETRICS_PORT:9837.
2.2.4.2.10. Секция backup
Секция backup предназначена для настроек бекапирования модуля.
Например:
backup:
mode: ${BACKUP_MODE:rest} # kafka | rest
rest:
uri: ${BACKUP_URI:/backup}
backupTopic: ${BACKUP_TOPIC:adapter.backup}
statusTopic: ${STATUS_TOPIC:adapter.status}
kafka:
consumer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost}
group.id: ${CSV_UPLOADER_BACKUP_GROUP_ID:csv_uploader_adapter_command}
auto.offset.reset: latest
producer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost}
Параметры настроек
mode- режим бекапирования, напримерBACKUP_MODE:rest;uri- путь к файлу бекапирования в случае выбора REST-сервисов для режима бэкапирования;backupTopic- топик для отправки сохраненных данных, например:{BACKUP_TOPIC:adapter.backup};statusTopic- топик для отправки статусов бэкапирования, например:{STATUS_TOPIC:adapter.status}.
2.2.5. Настройка DATA-Uploader – Модуль исполнения асинхронных заданий
2.2.5.1. Конфигурация модуля DATA-Uploader (application.yml)
Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля:
обеспечение обработки очереди файлов, настройка подключения к ядру витрины (секция: prostore), а также другие
настройки необходимые для корректной работы модуля.
2.2.5.1.1. Пример файла application.yml
В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
http-server:
port: ${SERVER_PORT:8082}
persistence-mode: ${PERSISTENCE_MODE:prostore} # prostore, zookeeper&redis
prostore-rest-client:
persistence-datamart: ${PERSISTENCE_DATAMART:persistence}
datasource: ${PERSISTENCE_DATASOURCE:} # по умолчанию пусто, тогда берется единственный датасорс из настроек Простора
table-completed-inserts-datamarts: ${PERSISTENCE_COMPLETED_INSERTS_TABLE:data_uploader_completed_inserts_datamarts}
table-deltas-open: ${PERSISTENCE_OPEN_DELTAS_TABLE:data_uploader_deltas_open}
# Таблица активных экземляров сервиса data-uploader (используется при persistence-mode: prostore)
table-data-uploader-health-check: ${PERSISTENCE_HEALTH_CHECK_TABLE:data_uploader_health_check}
# Имя таблицы с задачами загрузки данных (используется при persistence-mode: prostore)
table-validation-complete: ${PERSISTENCE_VALIDATION_COMPLETE_TABLE:validation_complete}
# Имя таблицы хранения статусов запросов (используется при persistence-mode: prostore)
table-requests-status: ${PERSISTENCE_STATUS_TABLE:status}
# Имя таблицы хранения данных файлов (используется при persistence-mode: prostore)
table-files: ${PERSISTENCE_FILES_TABLE:files}
# Имя таблицы хранения активных экземпляров сервисов
table-data-uploader-active: ${PERSISTENCE_ACTIVE_TABLE:data_uploader_active}
health-check-refresh-period-sec: ${HEALTH_CHECK_REFRESH_PERIOD:120}
health-check-wait-period-sec: ${HEALTH_CHECK_WAIT_PERIOD:300}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9090}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
redis:
type: ${REDIS_TYPE:STANDALONE}
connection-string: ${REDIS_CONNECTION_STRING:redis://localhost:6379}
password: ${REDIS_PASSWORD:eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81}
max-pool-size: ${REDIS_MAX_POOL_SIZE:6}
max-pool-waiting: ${REDIS_MAX_POOL_WAITING:24}
max-waiting-handlers: ${REDIS_MAX_WAITING_HANDLERS:32}
net-client-options:
tcp-user-timeout: 30
idle-timeout: 30
upload:
concurrency: ${UPLOAD_CONCURRENCY:100} # Общее количество параллельных задач загрузки
send-concurrency: ${UPLOAD_SEND_CONCURRENCY:10} # Количество параллельных отправок данных в кафку для каждого файла
poll-interval: ${UPLOAD_POLL_INTERVAL:500ms} # Интервал опроса очереди сообщений на загрузку
llw-batch: ${UPLOAD_LLW_BATCH:1000} # Число записей в одной команде upsert/delete. Используется только при mode=llw
stream-batch: ${UPLOAD_STREAM_BATCH:10000} # Число записей в одной команде upsert/delete в случае потоковой загрузки частями
creating-delta-on-upload-request: ${DELTA_CREATING_MODE:enable} # enable|disable|period Используется только при mode=llw
period: ${CREATING_DELTA_ON_UPLOAD_REQUEST_PERIOD:300}s # Используется только при mode=llw и creating-delta-on-upload-request=period
check-uniqueness: true # выполнять ли проверку уникальности первичных ключей
pool:
size: ${UPLOAD_POOL_SIZE:16}
retry:
attempts: 5
delay: 1m
preffered_mode: ${UPLOAD_MODE:stream} # stream|llw // Режим загрузки в prostore
data-storage:
compress: ${DATA_STORAGE_COMPRESS:zstd} # zstd/none редактируется синхронно для модулей rest-uploader/data-uploader!!!
type: ${DATA_STORAGE_TYPE:dir} # redis|dir|s3
# Директория хранения файлов для типа dir
dir: ${DATA_STORAGE_DIR:/tmp}
s3:
endpoint: ${S3_ENDPOINT:http://127.0.0.1:9000/}
bucket: ${S3_BUCKET:data} # Имя бакета
region: ${S3_REGION:}
access-key: ${S3_USER:minioadmin} # Пользователь, под которым происходит взаимодействие с s3
secret-key: ${S3_PASSWORD:minioadmin} # Пароль пользователя для взаимодействия с s3
environment:
name: ${ENVIRONMENT_NAME:test}
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:8640000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
csv-parser:
separator: ${CSV_PARSER_SEPARATOR:;}
quote-char: ${CSV_PARSER_QUOTE_CHAR:"}
escape-char: ${CSV_PARSER_ESCAPE_CHAR:'}
# Настройка интерпретации значений как null. Допустимые значения:
# - EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;
# - EMPTY_QUOTES - пустые кавычки, например ;"";
# - BOTH - оба варианта
# - NEITHER - никогда. Пустая строка всегда определяется как пустая строка
field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}
# опция позволяет парсить мультистроковые значения
active:
timeout: ${ACTIVE_TIMEOUT:60}
time-to-live: ${ACTIVE_TTL:180}
delta:
timeout: ${DELTA_TIMEOUT:300}
row-max-count: ${DELTA_MAX_ROWS:500000}
chunk-row-max-count: ${DELTA_CHUNK_ROWS:10000}
chunk-data-max-size: ${DELTA_CHUNK_DATA_SIZE:1048576}
# параметр ожидания перед повторной попыткой открытия дельты в случае ошибки
open-delay: ${DELTA_OPEN_DELAY:60}s
# количество попыток открытия дельты в случае ошибки
open-attempts: ${DELTA_OPEN_ATTEMPTS:5}
# период проверки открытых дельт
open-check: ${DELTA_OPEN_CHECK:60}s
# количество попыток фиксации дельты в случае ошибки
commit-attempts: ${DELTA_COMMIT_ATTEMPTS:5}
# период ожидания перед повторной попыткой фиксации дельты
commit-error-delay: ${DELTA_COMMIT_DELAY:1}s
# количество попыток отката дельты в случае ошибки
rollback-attempts: ${DELTA_COMMIT_ATTEMPTS:3}
# период ожидания перед повторной попыткой отката дельты
rollback-error-delay: ${DELTA_COMMIT_DELAY:5}s
stream:
timeout: ${DELTA_TIMEOUT:300}
row-max-count: ${DELTA_MAX_ROWS:500000}
response:
time-to-live: ${RESPONSE_TTL:36000}
# Настройки модуля сбора информации о компонентах витрины
component-info:
enabled: true
# 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:
- redis.password
metrics:
port: ${METRICS_PORT:9837}
2.2.5.2. Параметры конфигурации
Настройка конфигурации DATA-Uploader осуществляется путем редактирования параметров настроек в файле application.yml,
где настраиваются секции:
http-server- указывается порт сервера;persistence-mode- настройки хранения данных;prostore-rest-client- блок параметров конфигурирования взаимодействия с ProStore.redis- настройка подключения к Redis;upload- указываются настройки параллельной загрузки данных;data-storage- директория хранения файлов для типаdir;environment- определяет значение среды разработки;zookeeper- определяет настройки подключения к Zookeeper;csv-parser- настройка парсера CSV-файлов;active- настройки интервалов между попытками перехода в активное состояние и времени жизни ключа флага активности;delta- настройка обработок загрузок и отправок заданий на загрузку дельт;stream- настройка потоковой загрузки, в случае если поток разбивается на части;response- настройка времени хранения ответов по заданию в Redis;component-info- настройки модуля сбора информации о компонентах витрины;metrics- настройка получения метрик.
2.2.5.2.1. Секция http-server
В секции http-server указывается порт веб-сервера.
Например:
server:
port: ${SERVER_PORT:8081}
Параметры настроек
port- порт веб-сервера, например:SERVER_PORT:8081.
2.2.5.2.2. Секция persistence-mode
В секции persistence-mode указывается настройка хранения данных: или в Prostore или в Zookeeper. в случае
выбора Prostore автоматически создаются необходимые таблицы.
Например:
persistence-mode: ${PERSISTENCE_MODE:prostore} # prostore | zookeeper
Параметры настроек
persistence-mode- настройка хранения данных, напримерPERSISTENCE_MODE:prostore.
2.2.5.2.3. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с Prostore.
Например:
prostore-rest-client:
persistence-datamart: ${PERSISTENCE_DATAMART:persistence}
datasource: ${PERSISTENCE_DATASOURCE:} # по умолчанию пусто, тогда берется единственный датасорс из настроек Простора
table-completed-inserts-datamarts: ${PERSISTENCE_COMPLETED_INSERTS_TABLE:data_uploader_completed_inserts_datamarts}
table-deltas-open: ${PERSISTENCE_OPEN_DELTAS_TABLE:data_uploader_deltas_open}
# Таблица активных экземляров сервиса data-uploader (используется при persistence-mode: prostore)
table-data-uploader-health-check: ${PERSISTENCE_HEALTH_CHECK_TABLE:data_uploader_health_check}
# Имя таблицы с задачами загрузки данных (используется при persistence-mode: prostore)
table-validation-complete: ${PERSISTENCE_VALIDATION_COMPLETE_TABLE:validation_complete}
# Имя таблицы хранения статусов запросов (используется при persistence-mode: prostore)
table-requests-status: ${PERSISTENCE_STATUS_TABLE:status}
# Имя таблицы хранения данных файлов (используется при persistence-mode: prostore)
table-files: ${PERSISTENCE_FILES_TABLE:files}
# Имя таблицы хранения активных экземпляров сервисов
table-data-uploader-active: ${PERSISTENCE_ACTIVE_TABLE:data_uploader_active}
health-check-refresh-period-sec: ${HEALTH_CHECK_REFRESH_PERIOD:120}
health-check-wait-period-sec: ${HEALTH_CHECK_WAIT_PERIOD:300}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9090}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
Параметры настроек
persistence-datamart- датамарт, где будут располагаться таблицы хранения данных, используется приpersistence-mode = prostoredatasource- источник данных, напримерPERSISTENCE_DATASOURCE:, по умолчанию пусто, в этом случае берется единственный датасорс из настроек Простора;table-completed-inserts-datamarts- таблица с данными по завершенным запросам добавления данных, напримерPERSISTENCE_COMPLETED_INSERTS_TABLE:data_uploader_completed_inserts_datamarts;table-deltas-open- таблица с данными по открытым дельтам, напримерPERSISTENCE_OPEN_DELTAS_TABLE:data_uploader_deltas_open;table-data-uploader-health-check- таблица с heath-check, напримерPERSISTENCE_HEALTH_CHECK_TABLE:data_uploader_health_check;table-validation-complete- таблица с задачами загрузки данных, напрммерPERSISTENCE_VALIDATION_COMPLETE_TABLE:validation_complete;table-requests-status- таблица хранения статусов запросов. напримерPERSISTENCE_STATUS_TABLE:status;table-files- таблица хранения данных файлов, напримерPERSISTENCE_FILES_TABLE:files;table-data-uploader-active- таблица хранения активных экземпляров сервисов, напримерPERSISTENCE_ACTIVE_TABLE:data_uploader_active;health-check-refresh-period-sec: ${HEALTH_CHECK_REFRESH_PERIOD:120}- период обновления heath-check в секундах, напримерHEALTH_CHECK_REFRESH_PERIOD:120;health-check-wait-period-sec- период ожидания heath-check в секундах, напримерHEALTH_CHECK_WAIT_PERIOD:300;host- адрес Prostore, напримерPS_HOST:t5-prostore-01.ru-central1.internal;port- порт Prostore, напримерPS_PORT:9195;max-pool-size- максимальное число подключений к Prostore, напримерPS_MAX_POOL_SIZE:8.
2.2.5.2.4. Секция redis
Секция redis определяет настройки подключения к Redis.
Например:
redis:
type: ${REDIS_TYPE:STANDALONE}
connection-string: ${REDIS_CONNECTION_STRING:redis://localhost:6379}
password: ${REDIS_PASSWORD:eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81}
max-pool-size: ${REDIS_MAX_POOL_SIZE:6}
max-pool-waiting: ${REDIS_MAX_POOL_WAITING:24}
max-waiting-handlers: ${REDIS_MAX_WAITING_HANDLERS:32}
net-client-options:
tcp-user-timeout: 30
idle-timeout: 30
Параметры настроек
type- тип подключения к Redis (STANDALONE/CLUSTER), напримерREDIS_TYPE:STANDALONE;connection-string- указывается список серверов для подключения (перечисление через запятую), напримерREDIS_CONNECTION_STRING:redis://localhost:6379;password- пароль для подключения, напримерREDIS_PASSWORD:eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81;max-pool-size- устанавливается максимальный размер пула, напримерREDIS_MAX_POOL_SIZE:6;max-pool-waiting- устанавливается максимальный размер пула ожидающих команд, напримерREDIS_MAX_POOL_WAITING:24;max-waiting-handlers- устанавливается максимальный размер ожидающих обработчиков, напримерREDIS_MAX_WAITING_HANDLERS:32;net-client-options- параметры Redis клиента:tcp-user-timeout- таймаут на соединение;idle-timeout- таймаут ожидания ответа от редиса.
2.2.5.2.5. Секция upload
Секция upload определяет настройки параллельной загрузки данных.
Например:
upload:
concurrency: ${UPLOAD_CONCURRENCY:100} # Общее количество параллельных задач загрузки
send-concurrency: ${UPLOAD_SEND_CONCURRENCY:10} # Количество параллельных отправок данных в кафку для каждого файла
poll-interval: ${UPLOAD_POLL_INTERVAL:500ms} # Интервал опроса очереди сообщений на загрузку
llw-batch: ${UPLOAD_LLW_BATCH:1000} # Число записей в одной команде upsert/delete. Используется только при mode=llw
creating-delta-on-upload-request: ${DELTA_CREATING_MODE:enable} # enable|disable|period Используется только при mode=llw
period: ${CREATING_DELTA_ON_UPLOAD_REQUEST_PERIOD:300}s # Используется только при mode=llw и creating-delta-on-upload-request=period
check-uniqueness: true # выполнять ли проверку уникальности первичных ключей
pool:
size: ${UPLOAD_POOL_SIZE:16}
retry:
attempts: 5
delay: 1m
preffered_mode: ${UPLOAD_MODE:stream} # stream|llw // Режим загрузки в prostore
Параметры настроек
concurrency- общее количество параллельных задач загрузки, например100;send-concurrency- количество параллельных отправок данных в кафку для каждого файла, например10;poll-interval- интервал опроса очереди сообщений на загрузку, например500ms;llw-batch- число записей в одной команде upsert/delete, напримерUPLOAD_LLW_BATCH:1000, используется только при mode=llw;creating-delta-on-upload-request- создание дельты при запросе загрузки, напримерDELTA_CREATING_MODE:enable, используется только при mode=llw;возможные значения:
enable/disable/period;period- период создания дельты при запросе загрузки (в секундах), напримерCREATING_DELTA_ON_UPLOAD_REQUEST_PERIOD:300, используется только при mode=llw и creating-delta-on-upload-request=period;check-uniqueness- флаг выполнения проверки уникальности первичных ключей;pool/size- размер пула загрузки, напримерUPLOAD_POOL_SIZE:16;retry- повтор попытки загрузки;attempts- количество попыток;delay- период задержки (в минутах).preffered_mode- режим загрузки, напримерUPLOAD_MODE:stream;
2.2.5.2.6. Секция data-storage
В секции data-storage указывается директория хранения файлов для типа dir.
Например:
data-storage:
compress: ${DATA_STORAGE_COMPRESS:zstd} # zstd/none редактируется синхронно для модулей rest-uploader/data-uploader!!!
type: ${DATA_STORAGE_TYPE:dir} # redis|dir|s3
# Директория хранения файлов для типа dir
dir: ${DATA_STORAGE_DIR:/tmp}
s3:
endpoint: ${S3_ENDPOINT:http://127.0.0.1:9000/}
bucket: ${S3_BUCKET:data} # Имя бакета
region: ${S3_REGION:}
access-key: ${S3_USER:minioadmin} # Пользователь, под которым происходит взаимодействие с s3
secret-key: ${S3_PASSWORD:minioadmin} # Пароль пользователя для взаимодействия с s3
Параметры настроек
compress- настройки сжатия директории хранения файлов, напримерDATA_STORAGE_COMPRESS:zstd.
Внимание
блок compress редактируется синхронно для модулей rest-uploader/data-uploader
type- тип файлов, напримерDATA_STORAGE_TYPE:dir;возможные значения: redis / dir / s3;
dir- директория хранения файлов для типа dir, напримерDATA_STORAGE_DIR:/tmp;s3- настройки облачного хранилища S3;endpoint- адрес конечной точки, напримерS3_ENDPOINT:http://127.0.0.1:9000/;bucket- имя бакета, напримерS3_BUCKET:dataregion- регион хранилища;access-key- пользователь, под которым происходит взаимодействие с s3, напримерS3_USER:minioadmin;secret-key- пароль пользователя для взаимодействия с s3, напримерS3_PASSWORD:minioadmin.
2.2.5.2.7. Секция environment
В секции environment выбирается среда разработки (например, значение test, prod и т.д).
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры конфигурации
name- название окружения, напримерENVIRONMENT_NAME:test.
2.2.5.2.8. Секция zookeeper
В секции zookeeper настраиваются параметры подключения к Zookeeper.
Например:
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:8640000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
Параметры настроек
connection-string- Подключение к Zookeeper DS, напримерZZOOKEEPER_DS_ADDRESS:localhost;connection-timeout-ms- Zookeeper DS таймаут подключения, напримерZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;session-timeout-ms- Zookeeper DS таймаут сессии, напримерZOOKEEPER_DS_SESSION_TIMEOUT_MS:40000;chroot- Zookeeper DS chroot path, напримерZOOKEEPER_DS_CHROOT:/adapter.
2.2.5.2.9. Секция csv-parser
Внимание
При загрузке файлов с форматно-логическим контролем, важно, чтобы настройки секции csv-parser были одинаковы в модулях CSV-Uploader(если используется его UI),REST-Uploader и DATA-Uploader.
Секция csv-parser - настройка парсинга CSV.
Например:
csv-parser:
separator: ${CSV_PARSER_SEPARATOR:;}
quote-char: ${CSV_PARSER_QUOTE_CHAR:"}
escape-char: ${CSV_PARSER_ESCAPE_CHAR:'}
field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}
multiline-limit: 0
Параметры конфигурации
separator- Символ разделителя значений, напримерCSV_PARSER_SEPARATOR:;;quote-char- символ кавычки, напримерCSV_PARSER_QUOTE_CHAR:";escape-char- Символ экранирования значений, напримерCSV_PARSER_ESCAPE_CHAR:';Настройка интерпретации значений как null. Допустимые значения:
EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;
EMPTY_QUOTES - пустые кавычки, например ;»»;
BOTH - оба варианта
NEITHER - никогда. Пустая строка всегда определяется как пустая строка
field-as-null- способ определения null поля, напримерCSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS.multiline-limit- параметры парсинга мультистроковых значений.
Внимание
Парсер может зависать если в данных встречаются вложенные неэкранированные кавычки..
Параметр
CSV_PARSER_ESCAPE_CHARработает следующим образом: если символ экранирования и символ кавычки равны", то будет использован RFC4180Parser, который считывает все символы между двумя двойными кавычками, при этом двойная кавычка в тексте поля должна быть экранирована двойной кавычкой (Например"поле, ""содержащее двойную кавычку"""будет считано какполе, "содержащее двойную кавычку"). В противном случае будет использован CSVParser, использующий символ экранирования для обозначения «непечатаемых символов».Параметр
CSV_PARSER_FIELD_AS_NULLможет принимать следующие значения:EMPTY_SEPARATORS- два разделителя полей (см. csv-parser/separator) подряд считаются null. Например: строка [aaa,,ccc] содержит значения [«aaa», null, «bbb»], а строка [aaa,»»,ccc] содержит значения [«aaa», «», «bbb»].EMPTY_QUOTES- два «ограничителя строки» (см. csv-parser/escape-char) подряд считаются null. Например: строка [aaa,»»,ccc] содержит значения [«aaa», null, «bbb»], а строка [aaa,,ccc] содержит значения [«aaa», «», «bbb»].BOTH- оба варианта (см.EMPTY_SEPARATORSиEMPTY_QUOTES) считаются null. Например: обе строки [aaa,»»,ccc] и [aaa,,bbb] содержат одинаковое значение [«aaa», null, «bbb»].NEITHER- ни один из вариантов (см.EMPTY_SEPARATORSиEMPTY_QUOTES) не считается null. Например: обе строки [aaa,»»,ccc] и [aaa,,bbb] содержат одинаковое значение [«aaa», «», «bbb»].
2.2.5.2.10. Секция active
В секции active настраиваются интервалы между попытками перехода в активное состояние и времени жизни ключа флага
активности.
Например:
active:
timeout: ${ACTIVE_TIMEOUT:60}
time-to-live: ${ACTIVE_TTL:180}
Параметры настроек
timeout- интервал между попытками перехода в активное состояние;time-to-live- время жизни ключа флага активности.
2.2.5.2.11. Секция delta
Секция delta предназначена для указания настройки обработок загрузок и отправок заданий на загрузку дельт.
Например:
delta:
timeout: ${DELTA_TIMEOUT:300}
row-max-count: ${DELTA_MAX_ROWS:500000}
chunk-row-max-count: ${DELTA_CHUNK_ROWS:10000}
chunk-data-max-size: ${DELTA_CHUNK_DATA_SIZE:1048576}
# параметр ожидания перед повторной попыткой открытия дельты в случае ошибки
open-delay: ${DELTA_OPEN_DELAY:60}s
# количество попыток открытия дельты в случае ошибки
open-attempts: ${DELTA_OPEN_ATTEMPTS:5}
# период проверки открытых дельт
open-check: ${DELTA_OPEN_CHECK:60}s
# количество попыток фиксации дельты в случае ошибки
commit-attempts: ${DELTA_COMMIT_ATTEMPTS:5}
# период ожидания перед повторной попыткой фиксации дельты
commit-error-delay: ${DELTA_COMMIT_DELAY:1}s
# количество попыток отката дельты в случае ошибки
rollback-attempts: ${DELTA_COMMIT_ATTEMPTS:3}
# период ожидания перед повторной попыткой отката дельты
rollback-error-delay: ${DELTA_COMMIT_DELAY:5}s
Параметры настроек
timeout- максимальный интервал времени между первой считанной записью цикла загрузки и отправкой заданий на загрузку дельт, напримерDELTA_TIMEOUT:300;row-max-count- максимальное количество обработанных записей для старта отправки заданий на загрузку дельт, напримерDELTA_CHUNK_ROWS:10000;chunk-row-max-count- количество сообщений в одном чанке, напримерDELTA_CHUNK_ROWS:10000;chunk-data-max-size- максимальный размер чанка, напримерDELTA_CHUNK_DATA_SIZE:1048576;open-delay- параметр ожидания (в секундах) перед повторной попыткой открытия дельты в случае ошибки, напримерDELTA_OPEN_DELAY:60;open-attempts- количество попыток открытия дельты в случае ошибки, напримерDELTA_OPEN_ATTEMPTS:5;open-check- период проверки открытых дельт (в секундах), напримерDELTA_OPEN_CHECK:60;commit-attempts- количество попыток фиксации дельты в случае ошибки, напримерDELTA_COMMIT_ATTEMPTS:5;commit-error-delay- период ожидания перед повторной попыткой фиксации дельты (в секундах), напримерDELTA_COMMIT_DELAY:1;rollback-attempts- количество попыток отката дельты в случае ошибки, напримерDELTA_COMMIT_ATTEMPTS:3;rollback-error-delay- период ожидания перед повторной попыткой отката дельты (в секундах), напримерDELTA_COMMIT_DELAY:5.
2.2.5.2.12. Секция stream
Секция stream содержит настройки потоковой загрузки, в случае если поток разбивается на части.
Например:
stream:
timeout: ${DELTA_TIMEOUT:300}
row-max-count: ${DELTA_MAX_ROWS:500000}
Параметры настроек
timeout- максимальный интервал времени между первой считанной записью цикла загрузки и отправкой заданий на загрузку потока, напримерDELTA_TIMEOUT:300;row-max-count- максимальное количество обработанных записей для старта отправки заданий на загрузку потока, напримерDELTA_MAX_ROWS:500000.
2.2.5.2.13. Секция response
Секция response определяет настройка времени хранения ответов по заданию в Redis.
Например:
response:
time-to-live: ${RESPONSE_TTL:36000}
Параметры настроек
time-to-live- Сколько времени Redis будет хранить ответ по заданию (ключ status.<uuid>).
2.2.5.2.14. Секция 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:
- keys
Параметры настроек
enabled- статус подключения компонента, указывается булево значение;datasource- датасорс Prostore;datamart- схема Prostore;table-name- имя таблицы для записи информации о компоненте;create-table-period- период попыток создания схемы, при неуспехе, указывается в секундах;publish-period- период публикации health-check, указывается в секундах;timeout-active- период после которого компонент считается неактивным при отсутствии health-check, указывается в секундах;secrets- список элементов конфига маскируемых при отправке, если указан узловой элемент, то маскируются все вложенные в него элементы.
2.2.5.2.15. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры настроек
port- порт для метрик, напримерMETRICS_PORT:9837.
2.2.6. Настройка REST-Uploader – Модуль асинхронной загрузки данных из сторонних источников
2.2.6.1. Конфигурация модуля REST-Uploader (application.yml)
Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы модуля:
асинхронная загрузка данных из источников, настройка подключения к ядру витрины (секция: prostore), а также другие
настройки необходимые для корректной работы модуля.
2.2.6.1.1. Пример файла application.yml
В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
http-server:
port: ${SERVER_PORT:8081}
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
file-size:
restriction: ${SEND_FILE_SIZE_RESTRICTION:512}
environment:
# Название окружения
name: ${ENVIRONMENT_NAME:test}
data-storage:
compress: ${DATA_STORAGE_COMPRESS:zstd} # zstd/none редактируется синхронно для модулей rest-uploader/data-uploader!!!
compression-ratio: ${DATA_STORAGE_COMPRESSION_RATIO:4} # допустимый диапазон [-7;22] где -7 самый быстрый, а 22 наибольшее сжатие
type: ${DATA_STORAGE_TYPE:dir} # redis|dir|s3|prostore
# Директория хранения файлов для типа dir
dir: ${DATA_STORAGE_DIR:/tmp}
s3:
endpoint: ${S3_ENDPOINT:http://127.0.0.1:9000/}
region: ${S3_REGION:}
bucket: ${S3_BUCKET:data} # Имя бакета
access-key: ${S3_USER:minioadmin} # Пользователь, под которым происходит взаимодействие с s3
secret-key: ${S3_PASSWORD:minioadmin} # Пароль пользователя для взаимодействия с s3
conditions:
# включение ФЛК и поведение при обнаружении ошибок
mode: warning
# период хранения журналов ошибок
save-time: 1d
# путь хранения журналов ошибок на общем диске:
save-path: /tmp/rest-uploader/reports
# путь к хранению правил в Zookeeper
zookeeper-path: rest-uploader/conditions
# Таймаут обработки запроса. 0 - таймаут отключен
rest-timeout: ${CONDITIONS_REST_TIMEOUT:60s}
# период жизни группы
save_group_time: 1d
validation:
# таймаут выполнения асинхронной проверки
validation-timeout: 1h
# таймаут получения сообщений из redis (используется при persistence-mode: zookeeper&redis)
# значение должно быть меньше чем redis.net-client-options.tcp-user-timeout
poll-timeout: 15s
# таймаут периодического опроса prostore для получения данных из очереди (используется при persistence-mode: prostore)
poll-interval: 5s
# количество корутин асинхронной валидации
max-concurrent-handle: 1
# размер порции вычитки сообщений из redis
batch-size: 1
# признак выполнения проверки кодировки
charset-check-enabled: true
# допустимые кодировки для механизма автоопределения
valid-charsets: [ UTF-8, US-ASCII, TIS-620]
health-check:
# период жизни флага активности
timeout-active: 3m
# период обновления статуса
publish-period: 30s
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:40000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
retry-count: 3
retry-base-sleep-time-ms: 1_000
persistence-mode: ${PERSISTENCE_MODE:prostore} # prostore, zookeeper&redis
prostore-rest-client: # требуется синхронно менять в приложениях rest-uploader и data-uploader !!!
persistence-datamart: ${PERSISTENCE_DATAMART:persistence}
datasource: ${PERSISTENCE_DATASOURCE:} # по умолчанию пусто, берется единственный датасорс из настроек Простора
table-conditions: ${PERSISTENCE_TABLE_CONDITIONS:rest_uploader_conditions}
table-ids: ${PERSISTENCE_TABLE_IDS:rest_uploader_ids}
# Таблица активных экземпляров сервиса rest-uploader (используется при persistence-mode: prostore)
table-rest-uploader-health-check: ${PERSISTENCE_TABLE_HEALTH_CHECK:rest_uploader_health_check}
# Таблица групп файлов (используется при persistence-mode: prostore)
table-group-info: ${PERSISTENCE_TABLE_GROUP_INFO:group_info}
# Таблица данных о файлах в группе (используется при persistence-mode: prostore)
table-group-content: ${PERSISTENCE_TABLE_GROUP_CONTENT:group_content}
# Таблица уникальных значений полей в группе (используется при persistence-mode: prostore)
table-group-uniq: ${PERSISTENCE_TABLE_GROUP_UNIQ:group_uniq}
# Таблица очереди файлов на ФЛК (используется при persistence-mode: prostore)
table-validation-queue: ${PERSISTENCE_TABLE_VALIDATION_QUEUE:validation_queue}
# Таблица очереди файлов на загрузку (используется при persistence-mode: prostore)
table-validation-complete: ${PERSISTENCE_TABLE_VALIDATION_COMPLETE:validation_complete}
# Таблица статусов запросов (используется при persistence-mode: prostore)
table-requests-status: ${PERSISTENCE_TABLE_STATUS:status}
# Таблица с файлами (используется при persistence-mode: prostore)
table-files: ${PERSISTENCE_TABLE_FILES:files}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9090}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
response:
time-to-live: ${RESPONSE_TTL:10h} # Период хранения информации о статусе запроса
control:
delta:
# подключение возможности управления дельтами от клиента. Управление дельтами от клиента допускается только при настройках
# delta-> creating-delta-on-upload-request=disable у модулей data-uploader/podd-adapter-mppw
enable: ${CONTROL_DELTA_ENABLE:true}
redis:
type: ${REDIS_TYPE:STANDALONE}
connection-string: ${REDIS_CONNECTION_STRING:redis://localhost:6379}
password: ${REDIS_PASSWORD:eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81}
max-pool-size: ${REDIS_MAX_POOL_SIZE:6}
max-pool-waiting: ${REDIS_MAX_POOL_WAITING:24}
max-waiting-handlers: ${REDIS_MAX_WAITING_HANDLERS:32}
net-client-options:
tcp-user-timeout-duration: 30s
idle-timeout-duration: 30s
auth:
secret: ${AUTH_SECRET:gPHaT%ACXGQaQ30%1id%K7@C}
enabled: ${AUTH_ENABLED:true}
access-list-path: rest-uploader/ids
metrics:
port: ${METRICS_PORT:9837}
# Настройки парсера csv файлов
csv-parser:
# Символ разделителя значений
separator: ${CSV_PARSER_SEPARATOR:;}
# Символ кавычки
quote-char: ${CSV_PARSER_QUOTE_CHAR:"}
# Символ экранирования значений
escape-char: ${CSV_PARSER_ESCAPE_CHAR:'}
# Настройка интерпретации значений как null. Допустимые значения:
# - EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;
# - EMPTY_QUOTES - пустые кавычки, например ;"";
# - BOTH - оба варианта
# - NEITHER - никогда. Пустая строка всегда определяется как пустая строка
field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}
transform:
transformPath: ${TRANSFORM_DIR:./transform} # Папка в которую сохраняются временные файлы для преобразования
ttl: ${CLEAN_TRANSFORM_DIR_PERIOD:15m}
backup:
mode: ${BACKUP_MODE:rest} # kafka | rest
rest:
uri: ${BACKUP_URI:/backup}
backupTopic: ${BACKUP_TOPIC:adapter.backup}
statusTopic: ${STATUS_TOPIC:adapter.status}
kafka:
consumer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
group.id: ${REST_UPLOADER_BACKUP_GROUP_ID:rest-uploader_adapter_command}
auto.offset.reset: latest
producer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
# Настройки модуля сбора информации о компонентах витрины
component-info:
enabled: true
# 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:
- redis.password
2.2.6.2. Параметры конфигурации
Настройка конфигурации REST-uploader осуществляется путем редактирования параметров настроек в файле
application.yml, где настраиваются секции:
http-server- указывается порт сервера;executor- настраивается размер пула для запросов;file-size- настраиваются ограничения на размер загружаемого файла;environment- настройки окружения;data-storage- директория хранения файлов для типаdir;conditions- включение форматно-логического контроля и поведение при обнаружении ошибок;zookeeper- настройки подключения к Zookeeper;persistence-mode- настройки хранения данных;prostore-api-client- блок параметров конфигурирования взаимодействия с Prostore;response- настройка периода хранения информации о статусе запроса;control- подключение возможности управления дельтами от клиента;redis- настройка подключения к Redis;auth- указывается секрет для валидации токенов;metrics- настройка получения метрик;csv-parser- настройка парсинга CSV;transform- настройка хранения временных файлов для преобразования;backup- настройки бекапирования;component-info- настройки модуля сбора информации о компонентах витрины.
2.2.6.2.1. Секция http-server
В секции http-server указывается порт веб-сервера.
Например:
http-server:
port: ${SERVER_PORT:8081}
Параметры настроек
port- порт веб-сервера, например:SERVER_PORT:8081.
2.2.6.2.2. Секция executor
Секция executor предназначена для указания размера пула для запросов.
Например:
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
Параметры настроек
reader-pool-size- Размер пула для запросов, напримерEXECUTOR_READER_POOL_SIZE:20
2.2.6.2.3. Секция file-size
В секции file-size можно настраивать ограничения на размер загружаемого файла.
Например:
file-size:
restriction: ${SEND_FILE_SIZE_RESTRICTION:512}
Параметры настроек
file-size-restriction- ограничение на размер загружаемого файла, напримерSEND_FILE_SIZE_RESTRICTION:512.
2.2.6.2.4. Секция environment
Секция environment предназначена для настройки среды окружения.
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- Название окружения, напримерENVIRONMENT_NAME:test.
2.2.6.2.5. Секция data-storage
В секции data-storage указывается директория хранения файлов для типа dir.
Например:
data-storage:
compress: ${DATA_STORAGE_COMPRESS:zstd} # zstd/none
compression-ratio: ${DATA_STORAGE_COMPRESSION_RATIO:4} # допустимый диапазон [-7;22] где -7 самый быстрый, а 22 наибольшее сжатие
type: ${DATA_STORAGE_TYPE:dir} # redis|dir|s3|prostore
# Директория хранения файлов для типа dir
dir: ${DATA_STORAGE_DIR:/tmp}
s3:
endpoint: ${S3_ENDPOINT:http://127.0.0.1:9000/}
bucket: ${S3_BUCKET:data} # Имя бакета
region: ${S3_REGION:}
access-key: ${S3_USER:minioadmin} # Пользователь, под которым происходит взаимодействие с s3
secret-key: ${S3_PASSWORD:minioadmin} # Пароль пользователя для взаимодействия с s3
Параметры настроек
compress- настройки сжатия директории хранения файлов, напримерDATA_STORAGE_COMPRESS:zstd
Внимание
блок compress редактируется синхронно для модулей rest-uploader/data-uploader
type- тип файлов, напримерDATA_STORAGE_TYPE:dir;возможные значения: redis / dir / s3;
dir- директория хранения файлов для типа dir, напримерDATA_STORAGE_DIR:/tmp;s3- настройки облачного хранилища S3;endpoint- адрес конечной точки, напримерS3_ENDPOINT:http://127.0.0.1:9000/;bucket- имя бакета, напримерS3_BUCKET:dataregion- регион хранилища;access-key- пользователь, под которым происходит взаимодействие с s3, напримерS3_USER:minioadmin;secret-key- пароль пользователя для взаимодействия с s3, напримерS3_PASSWORD:minioadmin.
2.2.6.2.6. Секция conditions
В секции conditions - реализована возможность включения форматно-логического контроля и настройки поведения при
обнаружении ошибок.
Например:
conditions:
# включение ФЛК и поведение при обнаружении ошибок
mode: warning
# период хранения журналов ошибок
save-time: 1d
# путь хранения журналов ошибок на общем диске:
save-path: /tmp/rest-uploader/reports
# путь к хранению правил в Zookeeper
zookeeper-path: rest-uploader/conditions
# Таймаут обработки запроса. 0 - таймаут отключен
rest-timeout: ${CONDITIONS_REST_TIMEOUT:60s}
# период жизни группы
save_group_time: 1d
validation:
# таймаут выполнения асинхронной проверки
validation-timeout: 1h
# таймаут получения сообщений из redis (используется при persistence-mode: zookeeper&redis)
# значение должно быть меньше чем redis.net-client-options.tcp-user-timeout
poll-timeout: 15s
# таймаут периодического опроса prostore для получения данных из очереди (используется при persistence-mode: prostore)
poll-interval: 5s
# количество корутин асинхронной валидации
max-concurrent-handle: 1
# размер порции вычитки сообщений из redis
batch-size: 1
# признак выполнения проверки кодировки
charset-check-enabled: true
# допустимые кодировки для механизма автоопределения
valid-charsets: [ UTF-8, US-ASCII, TIS-620]
health-check:
# период жизни флага активности
timeout-active: 3m
# период обновления статуса
publish-period: 30s
Параметры настроек
mode- включение ФЛК и поведение при обнаружении ошибок, напримерwarning;save-time- период хранения журналов ошибок, например1d;save-path- путь хранения журналов ошибок на общем диске, например/tmp/rest-uploader/reports;zookeeper-path- путь к хранению правил в Zookeeper, напримерrest-uploader/conditions;rest-timeout- таймаут обработки запроса, например60s,0- таймаут отключен;save_group_time- период жизни группы, например1d;validation-timeout- таймаут выполнения асинхронной проверки, например1h;poll-timeout- таймаут получения сообщений из redis (используется при persistence-mode: zookeeper&redis)15s, значение должно быть меньше чем redis.net-client-options.tcp-user-timeout;poll-interval- таймаут периодического опроса prostore для получения данных из очереди (используется при persistence-mode: prostore);max-concurrent-handle- количество корутин асинхронной валидации, например1;batch-size- размер порции вычитки сообщений из redis, например1;charset-check-enabled- признак выполнения проверки кодировки, напримерtrue;valid-charsets- допустимые кодировки для механизма автоопределения, напримерUTF-8, US-ASCII, TIS-620;timeout-active- период жизни флага активности, например3m;publish-period- период обновления статуса, например30s;
Для настройки mode реализованы режимы:
skip_string
При необходимости пропуска строк формируется обновленный файл и сохраняется в queue с прежним ключом, после проверки всего файла;
Подтверждается чтение комплексной записи из stream
validation_queue, которая затем удаляется из стрима;Размещается запись в list с именем
validation_complete;Записывается статус 0 – Буферизирован;
В зависимости от наличия
group_idв комплексной записи:при отсутствии
group_id– завершается обработка файла;при наличии
group_id– обновляется статус в groupContent_[group_id] и выполняется проверка комплектности группы в соответствии с шагами 3-6 Журнал по группе файлов.
warning
Подтверждается чтение комплексной записи из stream
validation_queueи удаляется из стрима;Размещается запись в list с именем
validation_complete;Записывается статус 0- Буферизирован;
В зависимости от наличия
group_idв комплексной записи:при отсутствии
group_id- завершает обработку файла;при наличии
group_id- обновляет статус в groupContent_[group_id] и выполняет проверка комплектности группы в соответствии с шагами 3-6 Журнал по группе файлов.
skip_file/ skip_on_first_error:
Подтверждается чтение комплексной записи из stream
validation_queue, которая затем удаляется из стрима;Удаляется файл из hset queue по ключу;
Записывается статус 7 – Ошибки ФЛК;
В зависимости от наличия
group_idв комплексной записи:при отсутствии
group_id– завершается обработка файла;при наличии
group_id– обновляется статус в groupContent_[group_id] и проверяется комплектность группы в соответствии с шагами 3-6 Журнал по группе файлов.
skip_string_except_last пропускаются строки не прошедшие ФЛК по уникальности кроме последней
При необходимости пропуска строк формируется обновленный файл и сохраняется в queue с прежним ключом, после проверки всего файла;
Подтверждается чтение комплексной записи из stream
validation_queue, которая затем удаляется из стрима;Размещается запись в list с именем
validation_complete;Записывается статус 0 – Буферизирован;
В зависимости от наличия
group_idв комплексной записи:при отсутствии
group_id– завершается обработка файла;при наличии
group_id– обновляется статус в groupContent_[group_id] и выполняется проверка комплектности группы в соответствии с шагами 3-6 Журнал по группе файлов.
2.2.6.2.7. Секция zookeeper
В секции zookeeper указываются параметры настроек к Zookeeper.
Например:
zookeeper:
connect-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:40000}
retry-count: 3
retry-base-sleep-time-ms: 1_000
Параметры настроек
connect-string- Подключение к Zookeeper DS, напримерZOOKEEPER_DS_ADDRESS:localhost;connection-timeout-ms- Zookeeper DS таймаут подключения, напримерZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;session-timeout-ms- Zookeeper DS таймаут сессии, напримерZOOKEEPER_DS_SESSION_TIMEOUT_MS:40000;retry-count- количество попыток подключения, например3.
2.2.6.2.8. Секция persistence-mode
В секции persistence-mode указывается настройка хранения данных: или в Prostore или в Zookeeper. в случае
выбора Prostore автоматически создаются необходимые таблицы.
Например:
persistence-mode: ${PERSISTENCE_MODE:prostore} # prostore, zookeeper&redis
Параметры настроек
persistence-mode- настройка хранения данных, напримерPERSISTENCE_MODE:prostore.
2.2.6.2.9. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с Prostore.
Например:
prostore-rest-client: # требуется синхронно менять в приложениях rest-uploader и data-uploader !!!
persistence-datamart: ${PERSISTENCE_DATAMART:persistence}
datasource: ${PERSISTENCE_DATASOURCE:} # по умолчанию пусто, тогда берется единственный датасорс из настроек Простора
table-conditions: ${PERSISTENCE_TABLE_CONDITIONS:rest_uploader_conditions}
table-ids: ${PERSISTENCE_TABLE_IDS:rest_uploader_ids}
# Таблица активных экземляров сервиса rest-uploader (используется при persistence-mode: prostore)
table-rest-uploader-health-check: ${PERSISTENCE_TABLE_HEALTH_CHECK:rest_uploader_health_check}
# Таблица групп файлов (используется при persistence-mode: prostore)
table-group-info: ${PERSISTENCE_TABLE_GROUP_INFO:group_info}
# Таблица данных о файлах в группе (используется при persistence-mode: prostore)
table-group-content: ${PERSISTENCE_TABLE_GROUP_CONTENT:group_content}
# Таблица уникальных значений полей в группе (используется при persistence-mode: prostore)
table-group-uniq: ${PERSISTENCE_TABLE_GROUP_UNIQ:group_uniq}
# Таблица очереди файлов на ФЛК (используется при persistence-mode: prostore)
table-validation-queue: ${PERSISTENCE_TABLE_VALIDATION_QUEUE:validation_queue}
# Таблица очереди файлов на загрузку (используется при persistence-mode: prostore)
table-validation-complete: ${PERSISTENCE_TABLE_VALIDATION_COMPLETE:validation_complete}
# Таблица статусов запросов (используется при persistence-mode: prostore)
table-requests-status: ${PERSISTENCE_TABLE_STATUS:status}
# Таблица с файлами (используется при persistence-mode: prostore)
table-files: ${PERSISTENCE_TABLE_FILES:files}
host: ${PS_HOST:localhost}
port: ${PS_PORT:9090}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
Параметры настроек
persistence-datamart- датамарт, где будут располагаться таблицы хранения данных, напримерPERSISTENCE_DATAMART:persistence. Используется при persistence-mode =prostore.datasource- по умолчанию пусто, в таком случае берется единственный датасорс из настроек Prostore;table-conditions- условия таблиц, напримерPERSISTENCE_TABLE_CONDITIONS:rest_uploader_conditions;table-ids- настройки идентификаторов таблиц, напримерPERSISTENCE_TABLE_IDS:rest_uploader_ids;table-rest-uploader-health-check- таблица с heath-check, напримерPERSISTENCE_TABLE_HEALTH_CHECK:rest_uploader_health_check;table-group-info- таблица групп файлов, напримерPERSISTENCE_TABLE_GROUP_INFO:group_info;table-group-content- таблица данных о файлах в группе, напримерPERSISTENCE_TABLE_GROUP_CONTENT:group_content;table-group-uniq- таблица уникальных значений полей в группе, напримерPERSISTENCE_TABLE_GROUP_UNIQ:group_uniq;table-validation-queue- таблица очереди файлов на ФЛК, напримерPERSISTENCE_TABLE_VALIDATION_QUEUE:validation_queue;table-validation-complete- таблица очереди файлов на загрузку, напримерPERSISTENCE_TABLE_VALIDATION_COMPLETE:validation_complete;table-requests-status- таблица хранения статусов запросов. напримерPERSISTENCE_STATUS_TABLE:status;table-files- таблица хранения данных файлов, напримерPERSISTENCE_FILES_TABLE:files;host- адрес Prostore, напримерPS_HOST:t5-prostore-01.ru-central1.internal;port- порт Prostore, напримерPS_PORT:9195;max-pool-size- максимальное число подключений к Prostore, напримерPS_MAX_POOL_SIZE:8.
2.2.6.2.10. Секция response
В секции response указывается период хранения информации о статусе запроса.
Например:
response:
time-to-live: ${RESPONSE_TTL:10h}
Параметры настроек
time-to-live- период хранения информации о статусе запроса, напримерESPONSE_TTL:10h.
2.2.6.2.11. Секция control
Секция control определяет возможности управления дельтами от клиента. Управление дельтами от клиента допускается
только при настройках delta-> creating-delta-on-upload-request=disable у модулей DATA-Uploader и podd-adapter-mppw.
Например:
control:
delta:
enable: ${CONTROL_DELTA_ENABLE:true}
Параметры настроек
enable- подключение возможности управления дельтами от клиента, напримерCONTROL_DELTA_ENABLE:true.
2.2.6.2.12. Секция redis
Секция redis определяет настройки подключения к Redis.
Например:
redis:
type: ${REDIS_TYPE:STANDALONE}
connection-string: ${REDIS_CONNECTION_STRING:redis://localhost:6379}
password: ${REDIS_PASSWORD:eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81}
max-pool-size: ${REDIS_MAX_POOL_SIZE:6}
max-pool-waiting: ${REDIS_MAX_POOL_WAITING:24}
max-waiting-handlers: ${REDIS_MAX_WAITING_HANDLERS:32}
net-client-options:
tcp-user-timeout-duration: 30s
idle-timeout-duration: 30s
Параметры настроек
type- тип подключения к Redis (STANDALONE/CLUSTER);connection-string- указывается список серверов для подключения (перечисление через запятую);password- пароль для подключения;max-pool-size- устанавливается максимальный размер пула;max-pool-waiting- устанавливается максимальный размер пула ожидающих команд;max-waiting-handlers- устанавливается максимальный размер ожидающих обработчиков;net-client-options- параметры Redis клиента:tcp-user-timeout-duration- таймаут на соединение;idle-timeout-duration- таймаут ожидания ответа от редиса.
2.2.6.2.13. Секция auth
Секция auth служит для хранения секрета валидации токена.
Например:
auth:
secret: ${AUTH_SECRET:gPHaT%ACXGQaQ30%1id%K7@C}
enabled: ${AUTH_ENABLED:true}
access-list-path: rest-uploader/ids
Параметры настроек
secret- cекрет для валидации токенов, напримерAUTH_SECRET:gPHaT%ACXGQaQ30%1id%K7@C;enabled- включение/отключение аутентификации, напримерAUTH_ENABLED:true;access-list-path- путь к списку доступов, напримерrest-uploader/ids.
2.2.6.2.14. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры конфигурации
port- Порт для метрик, напримерMETRICS_PORT:9837.
2.2.6.2.15. Секция csv-parser
Внимание
При загрузке файлов с форматно-логическим контролем, важно, чтобы настройки секции csv-parser были одинаковы в модулях CSV-Uploader(если используется его UI),REST-Uploader и DATA-Uploader.
Секция csv-parser - настройка парсинга CSV.
Например:
csv-parser:
# Символ разделителя значений
separator: ${CSV_PARSER_SEPARATOR:;}
# Символ кавычки
quote-char: ${CSV_PARSER_QUOTE_CHAR:"}
# Символ экранирования значений
escape-char: ${CSV_PARSER_ESCAPE_CHAR:'}
# Настройка интерпретации значений как null. Допустимые значения:
# - EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;
# - EMPTY_QUOTES - пустые кавычки, например ;"";
# - BOTH - оба варианта
# - NEITHER - никогда. Пустая строка всегда определяется как пустая строка
field-as-null: ${CSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS}
Параметры конфигурации
separator- Символ разделителя значений, напримерCSV_PARSER_SEPARATOR:;;quote-char- символ кавычки, напримерCSV_PARSER_QUOTE_CHAR:";escape-char- Символ экранирования значений, напримерCSV_PARSER_ESCAPE_CHAR:';Настройка интерпретации значений как null. Допустимые значения:
EMPTY_SEPARATORS - пустое значение между двумя разделителями, например ;;
EMPTY_QUOTES - пустые кавычки, например ;»»;
BOTH - оба варианта
NEITHER - никогда. Пустая строка всегда определяется как пустая строка
field-as-null- способ определения null поля, напримерCSV_PARSER_FIELD_AS_NULL:EMPTY_SEPARATORS;multiline-limit- параметры парсинга мультистроковых значений.
Внимание
Парсер может зависать если в данных встречаются вложенные неэкранированные кавычки.
Параметр
CSV_PARSER_ESCAPE_CHARработает следующим образом: если символ экранирования и символ кавычки равны", то будет использован RFC4180Parser, который считывает все символы между двумя двойными кавычками, при этом двойная кавычка в тексте поля должна быть экранирована двойной кавычкой (Например"поле, ""содержащее двойную кавычку"""будет считано какполе, "содержащее двойную кавычку"). В противном случае будет использован CSVParser, использующий символ экранирования для обозначения «непечатаемых символов».Параметр
CSV_PARSER_FIELD_AS_NULLможет принимать следующие значения:EMPTY_SEPARATORS- два разделителя полей (см. csv-parser/separator) подряд считаются null. Например: строка [aaa,,ccc] содержит значения [«aaa», null, «bbb»], а строка [aaa,»»,ccc] содержит значения [«aaa», «», «bbb»].EMPTY_QUOTES- два «ограничителя строки» (см. csv-parser/escape-char) подряд считаются null. Например: строка [aaa,»»,ccc] содержит значения [«aaa», null, «bbb»], а строка [aaa,,ccc] содержит значения [«aaa», «», «bbb»].BOTH- оба варианта (см.EMPTY_SEPARATORSиEMPTY_QUOTES) считаются null. Например: обе строки [aaa,»»,ccc] и [aaa,,bbb] содержат одинаковое значение [«aaa», null, «bbb»].NEITHER- ни один из вариантов (см.EMPTY_SEPARATORSиEMPTY_QUOTES) не считается null. Например: обе строки [aaa,»»,ccc] и [aaa,,bbb] содержат одинаковое значение [«aaa», «», «bbb»].
2.2.6.2.16. Секция transform
Секция transform предназначена для настроек хранения временных файлов для пробразования.
Например:
transform:
transformPath: ${TRANSFORM_DIR:./transform} # Папка в которую сохраняются временные файлы для преобразования
ttl: ${CLEAN_TRANSFORM_DIR_PERIOD:15m}
Параметры настроек
transformPath- папка в которую сохраняются временные файлы для преобразования, напримерTRANSFORM_DIR:./transform;ttl- период очистки дирректории, напримерCLEAN_TRANSFORM_DIR_PERIOD:15m.
2.2.6.2.17. Секция backup
Секция backup предназначена для настроек бекапирования модуля.
Например:
backup:
mode: ${BACKUP_MODE:rest} # kafka | rest
rest:
uri: ${BACKUP_URI:/backup}
backupTopic: ${BACKUP_TOPIC:adapter.backup}
statusTopic: ${STATUS_TOPIC:adapter.status}
kafka:
consumer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost}
group.id: ${CSV_UPLOADER_BACKUP_GROUP_ID:csv_uploader_adapter_command}
auto.offset.reset: latest
producer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost}
Параметры настроек
mode- режим бекапирования, напримерBACKUP_MODE:rest;uri- путь к файлу бекапирования в случае выбора REST-сервисов для режима бэкапирования;backupTopic- топик для отправки сохраненных данных, например:{BACKUP_TOPIC:adapter.backup};statusTopic- топик для отправки статусов бэкапирования, например:{STATUS_TOPIC:adapter.status}.
2.2.6.2.18. Секция 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- список элементов конфига маскируемых при отправке, если указан узловой элемент, то маскируются все вложенные в него элементы.
2.2.6.3. Проверка форматно-логического контроля
Проверка форматно-логического контроля включает в себя:
обязательные проверки, выполняющиеся вне зависимости от настроек модуля в синхронном режиме;
необязательные проверки, индивидуальные для каждой таблицы, которыми управляет администратор Системы, выполняющиеся в асинхронном режиме.
Наименование проверки |
Код ошибки |
Кирилическое описание |
|---|---|---|
Проверка уникальности |
|
Дубликат файла/группы |
Проверка парсинга файла |
|
Ошибка парсинга: текст ошибки |
Проверка кодирования |
|
Кодировка файла не соответствует кодировке UTF-8 |
Проверка превышения предельного размера файла (больше 512 Мб) |
|
Слишком большой файл |
Проверка наличия данных в файле |
|
Пустой файл |
Проверка соответствия заголовков инфосхеме |
|
Структура файла не соответствует схеме |
Проверка соответствия числа столбцов в строке |
|
Некорректное число столбцов в строке |
Проверка соответствия типам полей |
|
Значение не соответствует типу требуемый тип |
Проверка уникальности полей |
|
Значение не отвечает требованиям уникальности |
Проверка регулярных выражений |
|
Значение не соответствует регулярному выражению регулярное выражение |
Проверка соответствия условию |
|
Значение не соответствует условию условие |
Таймаут валидации |
|
Истек таймаут валидации файла |
2.2.6.3.1. Синхронная проверка ФЛК
Примечание
синхронные проверки выполняются вне зависимости от настроек модуля REST-Uploader;
синхронные проверки являются блокирующими;
ошибки синхронных проверок возвращаются в теле ответа по REST-API.
К синхронным проверкам относятся:
проверка соответствия инфосхеме:
проверка соответствия имен и количества полей в заголовках;
проверка типа данных;
проверка экранирования данных: проверка соответствия числа столбцов по каждой строке;
проверка соответствия файла кодировке UTF-8 , отсутствие BOM (при наличии BOM при загрузке удаляются начальные байты
efbbbf);проверка размера файла и наличия данных:
проверка предельного размера загружаемого файла 512Мб;
проверка наличия данных в файле.
2.2.6.3.2. Асинхронная проверка
Примечание
асинхронные проверки выполняются в зависимости от настроек модуля;
проверки не являются блокирующими (поведение при их наличии определяется конфигурацией модуля);
список проверок уникален для каждой таблицы и хранится в Zookeeper в виде отдельного YAML файла.
К асинхронным проверкам относятся:
проверка уникальности полей:
по сочетанию атрибутов (для комплексных ключей);
по заданному атрибуту;
сравнение значения с константой;
соответствие регулярному выражению.
Для одного поля возможно создать не более одной проверки одного типа, при этом у каждого поля может быть несколько проверок разных типов.
2.2.6.3.2.1. Проверка уникальности по одному или по сочетанию полей
Проверка уникальности проводится:
в рамках группы файлов, если заданы headers - для проверки в рамках группы обязательно заполнения всех полей:
group_id;group_file_num;group_file_count.
Пример запроса для проверки уникальности по группе файлов:
--проверка по сочетанию полей
fields:
id:
uniq: true
uniq-with: [type,region]
--проверка уникальности по одному полю
snils:
match: "/^[-\s\d]{11}$/"
uniq: true
2.2.6.3.2.2. Проверка соответствия заданному значению
проверка соответствия заданному значению проводится для каждого файла вне зависимости от наличия group_id;
проверка осуществляется для значений каждого поля в соответствии с заданным правилом;
проверка соответствия заданному значению включает в себя:
проверку сравнения с константой (
>,<,>=,<=,=,!=);проверку соответствия регулярному выражению (должна выполняться на основе Java Util Regexp https://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html )
2.2.6.3.2.3. Поведение в случае таймаута валидации
Период выполнения асинхронных проверок определяется конфигурационным параметром validation-timeout и по умолчанию
составляет 60 минут.
В случае, если за указанное в настройках время асинхронные проверки не были выполнены, файл удаляется из очереди с
обогащением отчета о найденных ошибках ошибкой validationTimeout.
В случае возникновения подобной ошибки рекомендуется:
проверить регулярные выражения, по которым происходит проверка, так как неверно заданное регулярное выражение кратно увеличивает скорость проверки;
увеличить значение
validation-timeoutи повторить загрузку данных.
2.2.6.4. Статусная модель
Статус запроса к модулю REST-Uploder можно получить, выполнив запрос с передачей идентификатора запроса GET '/v2/requests/:requestId/status'
В ответ возвращается три поля:
code - код статуса;
errorMessage - сообщение об ошибке, заполняется лишь в случае ошибочного статуса;
description - описание ошибки, заполняется лишь в случае ошибочного статуса.
Пример ответа на запрос статуса
{"code":2,"description":null,"errorMessage":null}
{"code":3,"description":"Успешно обработан","errorMessage":null}
{"code":4,"description":"Ошибка обработки запроса","errorMessage":"ru.itone.dtm.data.uploader.upload.UploadException: ru.itone.dtm.prostore.rest.api.ProstoreRestException: Error executing query [insert into univer.slots select resource_id,slot_id,tag_type,tag_age,available_date,duration,slot_create_ts,slot_update_ts,slot_status,sys_op from univer.slots_upload_ext]: All of the connectors are failed\n\tat"}
{"code":5,"description":"Идентификатор запроса не обнаружен","errorMessage":null}
{"code":7,"description":"Ошибки ФЛК","errorMessage":null}
В свою очередь, идентификатор запроса ранее был получен в ответ от REST-Uploader:
POST“/v2/datamarts/{datamart_name}/tables/{table_name}/upload;
POST“/v2/datamarts/{datamart_name}/tables/{table_name}/delete.
Код статуса |
Описание статуса |
Действия при получении данного статуса |
|---|---|---|
-1 |
Загрузка данных в буффер |
Данный статус клиентскому приложению не возвращается, ответ вернется после того как загружаемые данные будут сохранены приложением REST-Uploader для дальнейшей загрузки. |
0 |
Запрос буфферизирован |
Выполнить повторный запрос статуса с некоторой задержкой. Рекомендуемая задержка 30сек. |
1 |
Ожидает открытия дельты |
Выполнить повторный запрос статуса с некоторой задержкой. Рекомендуемая задержка 30сек. |
2 |
В обработке (модулем DATA-Uploader) |
Выполнить повторный запрос статуса с некоторой задержкой. Рекомендуемая задержка 30сек. |
3 |
Успешно обработан |
Дополнительных действий не требуется |
4 |
Ошибка обработки запроса |
Необходимо:
|
5 |
Идентификатор запроса не обнаружен |
Использовать действующий идентификатор запроса |
6 |
Форматно-логический контроль |
Выполнить повторный запрос статуса с некоторой задержкой. Рекомендуемая задержка 30сек. |
7 |
Ошибки ФЛК |
В процессе ФЛК выявлены ошибки, необходимо запросить отчет ФЛК, обратившись к
REST-Uploader c запросом Далее проанализировать и устранить выявленные недочеты в загружаемых данных или скорректировать проверки ФЛК. |
2.2.6.5. Спецификация модуля асинхронной загрузки данных из сторонних источников
Данная спецификация описывает возможность загрузки данных в витрину, получение статуса запроса, удаление данных из витрины.
Метод |
URL |
Назначение |
|---|---|---|
POST |
|
Загрузка данных в витрину с учетом реализации ФЛК |
GET |
|
Получение статуса запроса |
DELETE |
|
Логическое удаление данных из витрины |
POST |
|
Запрос для загрузки списка правил для таблицы, для сохранения в Zookeeper |
PUT |
|
Запрос для добавления правил для таблицы, для сохранения в Zookeeper |
GET |
|
Запрос для получения списка проверок для таблицы, хранящийся в Zookeer |
DELETE |
|
Запрос для удаления всего списка проверок по таблице |
GET |
|
Возвращает отчет по форматно логическом контроле загружаемых данных в формате .csv |
GET |
|
Запрос возвращает отчет по комплектности группы загружаемых файлов в формате .csv |
POST |
|
Физическое удаления и/или очистка исторических данных |
openapi: 3.0.1
info:
title: Rest-uploader
description: This is a rest-uploader service for datamart filling
version: 2.0.0
paths:
/v2/datamarts/{datamart_name}/tables/{table_name}/upload:
post:
summary: Add a new data to the datamart
operationId: v2-datamarts-datamart_name-tables-table_name-upload
description: Загрузка данных из внешних источников. К телу прикладывается файл csv
tags:
- data
parameters:
- $ref: '#/components/parameters/datamartName'
- $ref: '#/components/parameters/tableName'
- $ref: '#/components/parameters/groupId'
- $ref: '#/components/parameters/groupFileNum'
- $ref: '#/components/parameters/groupFileCount'
requestBody:
$ref: '#/components/requestBodies/uploadData'
responses:
'200':
description: OK
headers:
requestId:
schema:
$ref: '#/components/schemas/requestId'
content:
text/plain:
schema:
$ref: '#/components/schemas/requestId'
'400':
$ref: '#/components/responses/badRequest'
'401':
$ref: '#/components/responses/unauthorized'
'500':
$ref: '#/components/responses/internalServerError'
security:
- bearerAuth: []
/v2/requests/{request_id}/status:
get:
summary: Return request status
description: Возвращение статуса запроса
operationId: get-v2-request-request_id-status
tags:
- data
parameters:
- $ref: '#/components/parameters/requestId'
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
required:
- code
- description
- errorMessage
properties:
code:
type: integer
description: Код статуса
description:
type: string
description: Описание статуса
errorMessage:
type: string
description: Описание ошибки
'401':
$ref: '#/components/responses/unauthorized'
'500':
$ref: '#/components/responses/internalServerError'
security:
- bearerAuth: []
/v2/requests/{request_id}/reportFLK:
get:
summary: Return report FLK check
description: Возвращает отчет по формато логическом контроле загружаемых данных
operationId: get-v2-request-request_id-reportFLK
tags:
- report
parameters:
- $ref: '#/components/parameters/requestId'
responses:
'200':
description: OK
content:
text/csv:
schema:
type: array
items:
type: array
items:
type: string
'401':
$ref: '#/components/responses/unauthorized'
'500':
$ref: '#/components/responses/internalServerError'
security:
- bearerAuth: []
/v2/group/{groupId}/report:
get:
summary: Return report group
description: Возвращает отчет по комплектности группы загружаемых файлов
operationId: get-v2-group-groupId-report
tags:
- report
parameters:
- name: groupId
in: path
description: Identifier of group
required: true
schema:
type: string
responses:
'200':
description: OK
content:
text/csv:
schema:
type: array
items:
type: array
items:
type: string
'401':
$ref: '#/components/responses/unauthorized'
'500':
$ref: '#/components/responses/internalServerError'
security:
- bearerAuth: []
/v2/datamarts/{datamart_name}/beginDelta:
post:
summary: begin delta
operationId: post-v2-datamart_name-begin_delta
tags:
- delta
parameters:
- $ref: '#/components/parameters/datamartName'
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
deltaNum:
type: integer
'400':
description: Bad Request
'401':
$ref: '#/components/responses/unauthorized'
'500':
$ref: '#/components/responses/internalServerError'
description: открытие дельты
security:
- bearerAuth: []
/v2/datamarts/{datamart_name}/commitDelta:
post:
summary: commit delta
operationId: post-v2-datamart_name-commit_delta
tags:
- delta
parameters:
- $ref: '#/components/parameters/datamartName'
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
deltaNum:
type: integer
deltaDate:
type: string
cnFrom:
type: integer
'400':
description: Bad Request
'401':
$ref: '#/components/responses/unauthorized'
'500':
$ref: '#/components/responses/internalServerError'
description: применение дельты
security:
- bearerAuth: []
/v2/datamarts/{datamart_name}/rollbackDelta:
post:
summary: rollback delta
operationId: post-v2-datamart_name-rollback_delta
tags:
- delta
parameters:
- $ref: '#/components/parameters/datamartName'
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
deltaNum:
type: integer
'400':
description: Bad Request
'401':
$ref: '#/components/responses/unauthorized'
'500':
$ref: '#/components/responses/internalServerError'
description: отмена дельты
security:
- bearerAuth: []
/v2/datamarts/{datamart_name}/getDeltaOk:
get:
summary: get delta ok
operationId: get-v2-datamart_name-get_delta_ok
tags:
- delta
parameters:
- $ref: '#/components/parameters/datamartName'
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
deltaNum:
type: integer
deltaDate:
type: string
cnFrom:
type: integer
'400':
description: Bad Request
'401':
$ref: '#/components/responses/unauthorized'
'500':
$ref: '#/components/responses/internalServerError'
description: получение примененной дельты
security:
- bearerAuth: []
/v2/datamarts/{datamart_name}/getDeltaHot:
get:
summary: get delta hot
operationId: get-v2-datamart_name-get_delta_hot
tags:
- delta
parameters:
- $ref: '#/components/parameters/datamartName'
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
deltaNum:
type: integer
cnFrom:
type: integer
cnMax:
type: integer
isRollingBack:
type: boolean
writeOpFinished:
type: string
'400':
description: Bad Request
'401':
$ref: '#/components/responses/unauthorized'
'500':
$ref: '#/components/responses/internalServerError'
description: получение открытой дельты
security:
- bearerAuth: []
/v2/LengthFlkQueue:
get:
summary: get length flk queue
operationId: get-v2-get_length_flk_queue
tags:
- data
responses:
'200':
description: OK
content:
text/plain:
schema:
type: integer
'401':
$ref: '#/components/responses/unauthorized'
'500':
$ref: '#/components/responses/internalServerError'
description: |-
получение длины очереди ФЛК
security:
- bearerAuth: []
/v2/datamarts/{datamart_name}/LengthUploadQueue:
get:
summary: get length upload queue
operationId: get-v2-get_length_upload_queue
tags:
- data
parameters:
- $ref: '#/components/parameters/datamartName'
responses:
'200':
description: OK
content:
text/plain:
schema:
type: integer
'400':
description: Bad Request
'401':
$ref: '#/components/responses/unauthorized'
'500':
$ref: '#/components/responses/internalServerError'
description: получение длины очереди загрузки данных в датамарт
security:
- bearerAuth: []
/v2/datamarts/{datamart_name}/tables/{table_name}/delete:
post:
summary: Delete data by primary key array
operationId: post-v2-datamart_name-tables-table_name-delete
tags:
- data
parameters:
- $ref: '#/components/parameters/datamartName'
- $ref: '#/components/parameters/tableName'
responses:
'200':
description: OK
headers:
requestId:
schema:
$ref: '#/components/schemas/requestId'
content:
text/plain:
schema:
$ref: '#/components/schemas/requestId'
'400':
$ref: '#/components/responses/badRequest'
'401':
$ref: '#/components/responses/unauthorized'
'500':
$ref: '#/components/responses/internalServerError'
description: Удаление данных по массиву первичных ключей
security:
- bearerAuth: []
requestBody:
$ref: '#/components/requestBodies/deleteData'
/v2/datamarts/{datamart_name}/tables/{table_name}/truncate:
post:
summary: Delete historical data by primary key array
operationId: post-v2-datamart_name-tables-table_name-truncate
tags:
- data
parameters:
- $ref: '#/components/parameters/datamartName'
- $ref: '#/components/parameters/tableName'
- $ref: '#/components/parameters/forSystemTime'
responses:
'200':
description: OK
headers:
requestId:
schema:
$ref: '#/components/schemas/requestId'
content:
text/plain:
schema:
$ref: '#/components/schemas/requestId'
'400':
$ref: '#/components/responses/badRequest'
'401':
$ref: '#/components/responses/unauthorized'
'500':
$ref: '#/components/responses/internalServerError'
description: Удаление исторических данных по массиву первичных ключей
security:
- bearerAuth: [ ]
requestBody:
$ref: '#/components/requestBodies/deleteData'
/v2/conditions/{datamart}/{table}:
parameters:
- $ref: '#/components/parameters/datamartName'
- $ref: '#/components/parameters/tableName'
post:
summary: Create verification conditions
description: Формирование правил проверки для датамарта/таблицы
operationId: post-v2-conditions
tags:
- conditions
requestBody:
content:
application/x-yaml: {}
responses:
'200':
description: OK
'401':
$ref: '#/components/responses/unauthorized'
'500':
$ref: '#/components/responses/internalServerError'
security:
- bearerAuth: []
put:
summary: Update verification conditions
description: Обновление правил проверки для датамарта/таблицы
operationId: put-v2-conditions
tags:
- conditions
requestBody:
content:
application/x-yaml: {}
responses:
'200':
description: OK
'401':
$ref: '#/components/responses/unauthorized'
'500':
$ref: '#/components/responses/internalServerError'
security:
- bearerAuth: []
get:
summary: Return verification conditions
description: Возвращение правил проверки для датамарта/таблицы
operationId: get-v2-conditions
tags:
- conditions
responses:
'200':
description: OK
content:
text/yaml: {}
'401':
$ref: '#/components/responses/unauthorized'
'500':
$ref: '#/components/responses/internalServerError'
security:
- bearerAuth: []
delete:
summary: Delete verification conditions
description: Удаление правил проверки для датамарта/таблицы
operationId: delete-v2-conditions
tags:
- conditions
responses:
'200':
description: OK
'401':
$ref: '#/components/responses/unauthorized'
'500':
$ref: '#/components/responses/internalServerError'
security:
- bearerAuth: []
components:
requestBodies:
uploadData:
description: "загружаемые данные"
required: true
content:
text/csv:
schema:
type: array
items:
type: array
items:
type: string
multipart/form-data:
schema:
required:
- uploadData
properties:
uploadData:
type: string
description: Data for uploading
format: binary
deleteData:
description: "Удаляемые данные, важны лишь ключевые поля, остальные могут отсутствовать или будут проигнорированы"
required: true
content:
application/json:
schema:
type: object
properties:
primaryKeys:
type: array
description: Массив первичных ключей
items:
type: array
items:
type: string
text/csv:
schema:
type: array
items:
type: array
items:
type: string
multipart/form-data:
schema:
required:
- uploadData
properties:
uploadData:
type: string
description: Data for uploading
format: binary
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
schemas:
requestId:
type: string
description: Идентификатор запроса
example: e5091d55-a0c8-4cc0-ba70-b89d03dde1a6
parameters:
datamartName:
name: datamart_name
in: path
description: 'Мнемоника витрины данных'
required: true
schema:
type: string
tableName:
name: table_name
in: path
description: 'Наименование таблицы'
required: true
schema:
type: string
groupId:
name: group_id
in: header
description: 'Идентификатор группы'
required: false
schema:
type: string
groupFileNum:
name: group_file_num
in: header
description: 'Номер файла в группе'
required: false
schema:
type: integer
groupFileCount:
name: group_file_count
in: header
description: 'Число файлов в группе'
required: false
schema:
type: integer
requestId:
name: request_id
in: path
description: Идентификатор запроса
required: true
schema:
$ref: '#/components/schemas/requestId'
forSystemTime:
name: for_system_time
in: header
description: Метка времени для удаления истории операций
required: false
schema:
type: string
responses:
badRequest:
description: Bad request
content:
text/plain:
schema:
type: string
description: Сообщение об ошибке
example: Отсутствует целевая таблица passenger в модели данных univer
internalServerError:
description: Internal server error
content:
text/plain:
schema:
type: string
description: Сообщение об ошибке
example: Internal server error
unauthorized:
description: Unauthorized
content:
text/plain:
schema:
type: string
description: Сообщение об ошибке
example: Unauthorized
examples: {}
security:
- bearerAuth: []
tags:
- name: data
description: Загрузка и удаление данных из Витрины, получение статуса запроса
- name: conditions
description: Управление правилами проверок для таблицы
- name: report
description: Получение отчетов
- name: delta
description: Управление дельтами
2.2.7. Настройка BLOB-адаптера
2.2.7.1. Конфигурация BLOB-адаптера (application.yml)
Файл application.yml – основной конфигурационный файл BLOB-адаптер, в котором задана логика и порядок работы модуля:
получение и обработка входящих запросов;
настройка подключения к СМЭВ3-адаптеру, СМЭВ4-адаптеру и Хранилищу BLOB-объектов, и другие настройки необходимые для корректной работы модуля.
2.2.7.1.1. Пример файла application.yml
В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
http-server:
enabled: ${SERVER_ENABLED:true}
port: ${SERVER_PORT:8081}
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
vertx:
web-client:
max-pool-size: 100
blob:
default-request-timeout: 60s
storage:
client: awssdk # vertx/awssdk
protocol: ${BLOB_STORAGE_PROTOCOL:http} # use only for client vertx
host: ${BLOB_STORAGE_HOST:localhost}
port: ${BLOB_STORAGE_PORT:8888}
path-prefix: ${BLOB_STORAGE_PATH_PREFIX:}
path-postfix: ${BLOB_STORAGE_PATH_POSTFIX:}
bucket: ${BUCKET:} # use only for client awssdk
auth:
type: ${BLOB_STORAGE_AUTH_TYPE:NONE} # BASIC/TOKEN/AUTH/NONE/AWSBASICCREDENTIALS
user: ${BLOB_STORAGE_AUTH_USER:user} # use only for auth.type BASIC
password: ${BLOB_STORAGE_AUTH_PASSWORD:pass} # use only for auth.type BASIC
access-token: ${ACCESS_TOKEN:} # use only for auth.type AWSBASICCREDENTIALS
secret-token: ${SECRET_TOKEN:} # use only for auth.type AWSBASICCREDENTIALS
token: ${BLOB_STORAGE_AUTH_TOKEN:token} # use only for auth.type TOKEN
authorization-server: # use only for auth.type AUTH
protocol: ${AUTH_SERVER_PROTOCOL:http}
host: ${AUTH_SERVER_HOST:localhost}
port: ${AUTH_SERVER_PORT:80}
path: ${AUTH_SERVER_PATH:oauth2/token}
client-id: ${AUTH_SERVER_CLIENT_ID:}
client-secret: ${AUTH_SERVER_CLIENT_SECRET:}
logging:
request-response:
blob-request: ${BLOB_REQUEST_LOG_ENABLED:false}
blob-response: ${BLOB_RESPONSE_LOG_ENABLED:false}
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9095}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
# Настройки модуля сбора информации о компонентах витрины
component-info:
enabled: true
# 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:
- blob.storage.auth.user
- blob.storage.auth.password
- blob.storage.auth.token
- blob.storage.auth.authorization-server.client-secret
metrics:
port: ${METRICS_PORT:9837}
2.2.7.2. Параметры конфигурации
Настройка конфигурации BLOB-адаптера осуществляется путем редактирования параметров настроек в файле application.yml,
где настраиваются секции:
http-server- указывается порт сервера;executor- настраивается размер пула для запросов;vertx- настраиваются значения вертиклов;blob- настраивается подключение к Хранилищу BLOB-объектов;logging- настраивается логирование работы модуля;prostore-rest-client- блок параметров конфигурирования взаимодействия с ProStore;component-info- настройки модуля сбора информации о компонентах витрины;metrics- настраивается получение метрик.
2.2.7.2.1. Секция http-server
Секция http-server позволяет настраивать взаимодействие с BLOB-объектами через модуль СМЭВ3-адаптер по
протоколу http/https и задавать порт, на котором будет открыт доступ к серверу.
Например:
http-server:
enabled: ${SERVER_ENABLED:true}
port: ${SERVER_PORT:8081}
enabled- флаг активации работы с сервером;port- порт, на котором будет открыт доступ к серверу.
2.2.7.2.2. Секция executor
Секция executor предназначена для масштабирования нагрузки (увеличения / уменьшения) на модуль.
Например:
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
Параметры настроек
reader-pool-size- размер пула для чтения Kafka, напримерEXECUTOR_READER_POOL_SIZE:20.
2.2.7.2.3. Секция vertx
Секция vertx определяет настройки количества вертиклов.
Например:
vertx:
web-client:
max-pool-size: 20
Параметры настроек
max-pool-size- максимальное значение для веб-клиента.
2.2.7.2.4. Секция blob
Секция blob предназначена для настройки:
размера выгружаемого чанка BLOB;
пути к Хранилищу BLOB-объектов (GET-запрос);
метода аутентификации для модуля BLOB-адаптера;
получения токена;
повторной аутентификаций при истечении времени жизни токена.
Например:
blob:
default-request-timeout: 60s
storage:
client: awssdk # vertx/awssdk
protocol: ${BLOB_STORAGE_PROTOCOL:http} # use only for client vertx
host: ${BLOB_STORAGE_HOST:localhost}
port: ${BLOB_STORAGE_PORT:8888}
path-prefix: ${BLOB_STORAGE_PATH_PREFIX:}
path-postfix: ${BLOB_STORAGE_PATH_POSTFIX:}
bucket: ${BUCKET:} # use only for client awssdk
auth:
type: ${BLOB_STORAGE_AUTH_TYPE:NONE} # BASIC/TOKEN/AUTH/NONE/AWSBASICCREDENTIALS
user: ${BLOB_STORAGE_AUTH_USER:user} # use only for auth.type BASIC
password: ${BLOB_STORAGE_AUTH_PASSWORD:pass} # use only for auth.type BASIC
access-token: ${ACCESS_TOKEN:} # use only for auth.type AWSBASICCREDENTIALS
secret-token: ${SECRET_TOKEN:} # use only for auth.type AWSBASICCREDENTIALS
token: ${BLOB_STORAGE_AUTH_TOKEN:token} # use only for auth.type TOKEN
authorization-server: # use only for auth.type AUTH
protocol: ${AUTH_SERVER_PROTOCOL:http}
host: ${AUTH_SERVER_HOST:localhost}
port: ${AUTH_SERVER_PORT:80}
path: ${AUTH_SERVER_PATH:oauth2/token}
client-id: ${AUTH_SERVER_CLIENT_ID:}
client-secret: ${AUTH_SERVER_CLIENT_SECRET:}
Параметры конфигурации
default-request-timeout- значение в секундах таймаута запроса;client- клиент сервера хранилища BLOB-объектов, напримерBLOB_STORAGE_CLIENT:awssdk;protocol- протокол обмена с сервером хранилища BLOB-объектов (одно из значенийhttpилиhttps), напримерBLOB_STORAGE_PROTOCOL:http;host- имя сервера хранилища BLOB-объектов, напримерBLOB_STORAGE_HOST:localhost;port- порт сервера хранилища BLOB-объектов, если отсутствует, то следует использовать следующие порты80для HTTP,443для HTTPS, напримерBLOB_STORAGE_PORT:8888;path-prefix- путь до места хранилища BLOB-объектов, путь до места хранения BLOB-объекта на сервере хранилища BLOB-объектов, напримерBLOB_STORAGE_PATH_POSTFIX:;path-postfix- окончание пути, начало списка параметров, напримерBLOB_STORAGE_PATH_PREFIX:;bucket- наименование хранилища, только для клиентов AWSSDK;auth- параметры аутентификации BLOB-адаптера;type-тип аутентификации (NONE- нет,BASIC- по имени/паролю,TOKEN- по токену,AUTH- через сервер аутентификации), напримерBLOB_STORAGE_AUTH_TYPE:NONE;user- имя пользователя (для аутентификацииBASIC), напримерBLOB_STORAGE_AUTH_USER:user;password- пароль (для аутентификацииBASIC), напримерBLOB_STORAGE_AUTH_PASSWORD:pass;token- токен (для аутентификацииTOKEN), напримерBLOB_STORAGE_AUTH_TOKEN:token;protocol- имя протокола HTTP или HTTPS (для аутентификацииAUTH), напримерAUTH_SERVER_PROTOCOL:http;host- строка с IP или FQDN сервера авторизации (для аутентификацииAUTH), напримерAUTH_SERVER_HOST:localhost;port- TCP-порт (для аутентификацииAUTH), напримерAUTH_SERVER_PORT:80;path- путь на сервере (для аутентификацииAUTH), напримерAUTH_SERVER_PATH:oauth2/token;client-id- идентификатор клиента, присвоенный BLOB-адаптеру в сервере авторизации (для аутентификацииAUTH), напримерAUTH_SERVER_CLIENT_ID:;client-secret- секретный код клиента, присвоенный BLOB-адаптеру в сервере авторизации (для аутентификацииAUTH), напримерAUTH_SERVER_CLIENT_SECRET:.
Пример cURL-запроса к серверу аутентификации
cURL (windows)
curl -X POST http://t5-avanpost-01.ru-central1.internal/oauth2/token ^
-H "Accept: application/json"^
-H "Content-type: application/x-www-form-urlencoded"^
--data "grant_type=client_credentials&client_id=b0fd0f28-4b99-40d7-8dd3-e663a6cc77d1&client_secret=Zaq1sd!sa2" ^
-o result.txt ^
--trace-ascii result.log
cURL (linux)
curl --request POST \
--url http://t5-avanpost-01.ru-central1.internal/oauth2/token \
--header 'Accept: application/json' \
--header 'Content-type: application/x-www-form-urlencoded' \
--data 'grant_type=client_credentials&client_id=b0fd0f28-4b99-40d7-8dd3-e663a6cc77d1&client_secret=Zaq1sd!sa2' \
-o result.txt
Пример cURL-запроса к Хранилищу BLOB-объектов
cURL (windows)
curl -X GET http://vmserv1.internal.example.com:8080/datamart/data/v1/blobs/1234567 ^
-H "Authorization: bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjEifQ.eyJqdGkiOiI5YmQ3MzdjZi05MDNmLTQxZTktYjI5Mi1mZmUwM2QzNDhkNWIiLCJleHAiOjE2NTQxMDI5NDgsImlhdCI6MTY1NDEwMTE0OCwiaXNzIjoiY2VydC5pc3N1ZXIuaG9zdCIsImF1ZCI6IiIsImV4cGlyZXNfaW4iOjE4MDAsImNsaWVudF9pZCI6ImIwZmQwZjI4LTRiOTktNDBkNy04ZGQzLWU2NjNhNmNjNzdkMSJ9.qi8JKlQAdMsK3fTq4H88Z5-FppaUP95OH-rmPtCxEMmlPnyhNCRJe34aKMR5mXVldEzY1clV87-qjWCyPLH_Zkqji1C7aQz7fMbgZixhY2wrQnXAXRfslkRe5Ph3GYYd26GvWOG1xl99AHvfDWIfI1SGcJyd0z_iOl1GbghLvSV38MquZ8ugBdKaDjV-Ww3U_sWlJVO-oF8xjUMYuhOSsCNxhxMng1oVwUdAUbbgoB5ldyoGTbqmbQMYvBmKBT0eZqOR6RnJEAjmfOC9YeWwADKwovFybvGOaQZsjlaoJ2XxpmS79U7UO_6KXK1cnHfshVuB5_yUwubrRh6tRxt0CA"^
-o result.bin ^
--trace-ascii result.log
Пример настройки динамической ссылки на файлы с содержимым BLOB-полей
Пример 1
Если в Витрине поле с типом LINK содержит текст 12345678 и для получения содержимого BLOB надо использовать строку вызова:
http://aa.bb.cc:8080/api/v1/blobs/12345678
Настройки файла application.yml должны иметь следующий вид:
blob-storage:
protocol: http
host: aa.bb.cc
port: 8080
path-prefix: api/v1/blobs/
Пример 2
Если в Витрине поле с типом LINK содержит текст 12345678 и для получения содержимого BLOB надо использовать строку вызова:
https://aa.bb.cc/api/v1/blobs/12345678/data?format=jpg&size=low&backgraund=#000000,
Настройки файла application.yml должны иметь следующий вид:
blob-storage:
protocol: https
host: aa.bb.cc
path-prefix: api/v1/blobs/
path-postfix: /data
params:
format: jpg
size: low
backgraund: "#000000"
Пример 3
Если в Витрине поле с типом LINK содержит текст 12345678 и для получения содержимого BLOB надо использовать строку вызова:
http://aa.bb.cc:8080/api/v1/blobs/12345678
Настройки файла application.yml должны иметь следующий вид:
blob-storage:
protocol: ${PROT:http}
host: ${HOST:aa.bb.cc}
port: ${PORT:80}
path-prefix: ${PREFIX:api/v1/blobs/}
Пример 4
Если требуется получить строку вида:
https://aa.bb.cc:8080/app/{link}/download?requester_id={value}&user=fdsfs&zip=true
Необходимо настроить:
В Витрине данных поле с типом
LINKдолжно содержать текст:
12345678/download?requester_id=ABCDEFGH
В файл
application.ymlдобавить следующие настройки:
blob-storage:
protocol: https
host: aa.bb.cc
port: 8080
path-prefix: api/
params:
user: fdsfs
zip: true
Указание дополнительных параметров к Хранилищу BLOB-объектов
Например
blob-storage:
params:
name1: value1
name2: value2
Пример запроса
/files/test?name1=value1&name2=value2
2.2.7.2.5. Секция logging
В секции logging настраивается логирование работы модуля.
Например:
logging:
request-response:
blob-request: ${BLOB_REQUEST_LOG_ENABLED:false}
blob-response: ${BLOB_RESPONSE_LOG_ENABLED:false}
Параметры настроек
blob-request- журналировать запросы, напримерBLOB_REQUEST_LOG_ENABLED:false;blob-request- журналировать ответы, напримерBLOB_RESPONSE_LOG_ENABLED:false.
2.2.7.2.6. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore.
Например:
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9095}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:8}
Параметры настроек
host- адрес ProStore, напримерPS_HOST:localhost;port- порт ProStore, напримерPS_PORT:9195;max-pool-size- максимальное число подключений к ProStore, напримерPS_MAX_POOL_SIZE:8;
2.2.7.2.7. Секция 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:
- keys
Параметры настроек
enabled- статус подключения компонента, указывается булево значение;datasource- датасорс Prostore;datamart- схема Prostore;table-name- имя таблицы для записи информации о компоненте;create-table-period- период попыток создания схемы, при неуспехе, указывается в секундах;publish-period- период публикации health-check, указывается в секундах;timeout-active- период после которого компонент считается неактивным при отсутствии health-check, указывается в секундах;secrets- список элементов конфига маскируемых при отправке, если указан узловой элемент, то маскируются все вложенные в него элементы.
2.2.7.2.8. Секция metrics
Секция metrics предназначена для настройки параметров метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры конфигурации
port- Порт для метрик, напримерMETRICS_PORT:9837.
2.2.8. Настройка Сервиса формирования документов
2.2.8.1. Конфигурация Сервиса Формирования документов (application.yml)
Файл application.yml – основной конфигурационный файл Сервиса Формирования документов, в котором задана логика и порядок работы сервиса:
настройка и обработка документов;
путь к pebble-шаблонам документов (секция
printable-forms);настройка сервиса формирования подписи (
sign-service);настройка подключения к базе данных (секция:
datasource);настройка проверки состояния БД (секция
health) и другие настройки необходимые для корректной работы сервиса.
2.2.8.1.1. Пример файла application.yml
В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
http-server:
port: ${HTTP_PORT:8080}
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:20}
metrics:
port: ${METRICS_PORT:9837}
vertx:
web-client:
max-pool-size: 20
counter-service:
host: ${COUNTER_SERVICE_HOST:localhost}
port: ${COUNTER_SERVICE_PORT:9000}
serviceName: ${COUNTER_SERVICE_NAME:printableform}
timeout: ${COUNTER_SERVICE_TIMEOUT:30}
sign-service:
url: ${SIGN_SERVICE_URL:http://localhost:8192}
timeout: ${SIGN_SERVICE_TIMEOUT:30}
pool-size: ${SIGN_SERVICE_POOL_SIZE:5}
notarius:
host: ${NOTARUIS_HOST:localhost}
port: ${NOTARUIS_PORT:8192}
enabled: ${NOTARIUS_ENABLED:FALSE}
props:
maxContentLength: ${NOTARUIS_MAX_CONTENT_LENGTH:104857600}
signatureURI: ${NOTARUIS_SIGNATURE_URI:urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256}
digestMethod: ${NOTARUIS_DIGEST_METHOD:http://www.w3.org/2001/04/xmldsig-more#gostr3411}
printable-forms:
reports:
# имя документа
- report: document_1
# настройки по извлечению данных
extract:
# путь pebble шаблона, который будет извлекать данные
template: extract_static.peb
# настройки по формированию xml документа
xml:
# путь pebble шаблона, который будет формировать xml документ
template: generate_xml_1.peb
# Id подписываемого элемента, если не указано, то подписывается весь xml
elementId: elementToSign
# имя элемента, куда добавлять ЭП, если не указано, то в корень
elementName: signature
# имя файла, если не указано, то <Id_ПФ + ".xml">
fileName: document_1.xml
# настройки по формированию xml документа с открепленной подписью
xml_detached_sig:
# имя файла, если не указано, то <Id_ПФ + ".xml">
fileName: document_1.xml
# имя файла p7s, если не указано, то <Id_ПФ + ".p7s">
fileSign: xmlSign.p7s
# настройки по формированию pdf документа
pdf:
# путь pebble шаблона, который будет формировать pdf документ
template: generate_pdf_1.peb
# имя файла, если не указано, то <Id_ПФ + ".pdf">
fileName: pdfFileName.pdf
# настройки по формированию pdf документа с открепленной подписью
pdf_sig:
# путь pebble шаблона, который будет формировать подписываемый pdf документ, задается в .pdf.template
# (для генерации "pdf без ЭП" и "pdf с ЭП" используется единый pebble-шаблон)
# имя файла, если не указано, то <Id_ПФ + ".pdf">
fileName: pdfFileName.pdf
# имя файла p7s, если не указано, то <Id_ПФ + ".p7s">
fileSign: pdfSign.p7s
# Настройки модуля сбора информации о компонентах витрины
component-info:
enabled: true
# 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:
- keys
2.2.8.2. Параметры конфигурации
Настройка конфигурации Сервиса Формирования документов осуществляется путем редактирования параметров настроек в файле application.yml,
где настраиваются секции:
http-server- указывается порт веб-сервера;executor- предназначена для указания размера пула для запросов;prostore-rest-client- настраивается блок параметров взаимодействия с Prostore;metrics- указывается порт для получения метрик;counter-service- указываются настройки подключения к сервису генерации номера;sign-service- указываются настройки подключения к сервису подписания документа;notarius- указываются настройки сервиса подписания и проверки подписи «Нотариус»;printable-forms- указываются настройки сервиса формирования документов;component-info- настройки модуля сбора информации о компонентах витрины.
2.2.8.2.1. Секция http-server
В секции http-server указывается порт веб-сервера.
Например:
http-server:
port: ${HTTP_PORT:8080}
Параметры настроек
port- порт веб-сервера, например:HTTP_PORT:8080.
2.2.8.2.2. Секция executor
В секции executor указывается размер пула для запросов.
Например:
executor:
reader-pool-size: ${EXECUTOR_READER_POOL_SIZE:20}
Параметры настроек
reader-pool-size- Размер пула для чтения запросов, напримерEXECUTOR_READER_POOL_SIZE:20
2.2.8.2.3. Секция prostore-rest-client
В секции prostore-rest-client настраивается блок параметров взаимодействия с Prostore.
Например:
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:20}
Параметры настроек
host- адрес Prostore, напримерPS_HOST:localhost;port- порт Prostore, напримерPS_PORT:9195;max-pool-size- максимальное число подключений к Prostore, напримерPS_MAX_POOL_SIZE:20.
2.2.8.2.4. Секция metrics
В секции metrics указывается порт для получения метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры настроек
port- порт для получения метрик, напримерMETRICS_PORT:9837
2.2.8.2.5. Секция counter-service
В секции counter-service настраивается подключение к сервису генерации номера.
Например:
counter-service:
host: ${COUNTER_SERVICE_HOST:localhost}
port: ${COUNTER_SERVICE_PORT:9000}
serviceName: ${COUNTER_SERVICE_NAME:printableform}
timeout: ${COUNTER_SERVICE_TIMEOUT:30}
Параметры настроек
host- адрес сервиса генерации номера, напримерCOUNTER_SERVICE_HOST:t5-printable-form-01.ru-central1.internal;port- порт сервиса генерации номера, напримерCOUNTER_SERVICE_PORT:9000;serviceName- значение имени сервиса, напримерCOUNTER_SERVICE_NAME:printableform;timeout- таймаут на генерации номера, напримерCOUNTER_SERVICE_TIMEOUT:30.
2.2.8.2.6. Секция sign-service
В секции sign-service настраивается подключение к сервису подписания документа.
Например:
sign-service:
url: ${SIGN_SERVICE_URL:http://dev-dtm-poddagent01.ru-central1.internal:8192}
timeout: ${SIGN_SERVICE_TIMEOUT:30}
pool-size: ${SIGN_SERVICE_POOL_SIZE:5}
Параметры настроек
url- URL сервиса подписания документа, напримерSIGN_SERVICE_URL:http://dev-dtm-poddagent01.ru-central1.internal:8192;timeout- таймаут на подписание документа (сек), напримерSIGN_SERVICE_TIMEOUT:30;pool-size- размер пула для сервиса подписания, напримерSIGN_SERVICE_POOL_SIZE:5.
2.2.8.2.7. Секция notarius
В секции notarius указываются настройки сервиса Нотариус.
Например:
notarius:
host: ${NOTARUIS_HOST:dev-dtm-poddagent01.ru-central1.internal}
port: ${NOTARUIS_PORT:8192}
enabled: ${NOTARIUS_ENABLED:FALSE}
props:
maxContentLength: ${NOTARUIS_MAX_CONTENT_LENGTH:104857600}
signatureURI: ${NOTARUIS_SIGNATURE_URI:urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256}
digestMethod: ${NOTARUIS_DIGEST_METHOD:http://www.w3.org/2001/04/xmldsig-more#gostr3411}
Параметры настроек
host- адрес сервиса Нотариус, напримерNOTARUIS_HOST:dev-dtm-poddagent01.ru-central1.internal;port- порт сервиса Нотариус, напримерNOTARUIS_PORT:8192;enabled- выбор сервиса подписания между schloussler и notarius, напримерNOTARIUS_ENABLED:FALSE;maxContentLength- максимальный размер отправляемого объекта, напримерNOTARUIS_MAX_CONTENT_LENGTH:1048576005;signatureURI- URI алгоритма хэширования, напримерNOTARUIS_SIGNATURE_URI:urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256;digestMethod- алгоритм хэширования, напримерNOTARUIS_DIGEST_METHOD:http://www.w3.org/2001/04/xmldsig-more#gostr3411.
2.2.8.2.8. Секция printable-forms
В секции printable-forms настраивается сервис формирования документов.
Например:
printable-forms:
reports:
# имя документа
- report: document_1
# настройки по извлечению данных
extract:
# путь pebble шаблона, который будет извлекать данные
template: ./src/main/resources/extract_static.peb
# настройки по формированию xml документа
xml:
# путь pebble шаблона, который будет формировать xml документ
template: ./src/main/resources/generate_xml_1.peb
# Id подписываемого элемента, если не указано, то подписывается весь xml
elementId: elementToSign
# имя элемента, куда добавлять ЭП, если не указано, то в корень
elementName: signature
# имя файла, если не указано, то <Id_ПФ + ".xml">
fileName: document_1.xml
# настройки по формированию pdf документа
pdf:
# путь pebble шаблона, который будет формировать pdf документ
template: ./src/main/resources/generate_pdf_1.peb
# имя файла, если не указано, то <Id_ПФ + ".pdf">
fileName: pdfFileName.pdf
# настройки по формированию pdf документа с открепленной подписью
pdf_sig:
# путь pebble шаблона, который будет формировать подписываемый pdf документ, задается в .pdf.template
# (для генерации "pdf без ЭП" и "pdf с ЭП" используется единый pebble-шаблон)
# имя файла, если не указано, то <Id_ПФ + ".pdf">
fileName: pdfFileName.pdf
# имя файла p7s, если не указано, то <Id_ПФ + ".p7s">
fileSign: pdfSign.p7s
Внимание
В конфигурационном файле application.yml пути к файлам pebble-шаблонов должны быть либо: относительно директории запуска, либо абсолютные пути.
2.2.8.2.9. Секция 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:
- keys
Параметры настроек
enabled- статус подключения компонента, указывается булево значение;datasource- датасорс Prostore;datamart- схема Prostore;table-name- имя таблицы для записи информации о компоненте;create-table-period- период попыток создания схемы, при неуспехе, указывается в секундах;publish-period- период публикации health-check, указывается в секундах;timeout-active- период после которого компонент считается неактивным при отсутствии health-check, указывается в секундах;secrets- список элементов конфига маскируемых при отправке, если указан узловой элемент, то маскируются все вложенные в него элементы.
2.2.8.3. Примеры pebble-шаблонов для Сервиса Формирования документов
2.2.8.3.1. Возможность вызова REST-сервисов из шаблона Сервиса Формирования документов
Для вызова REST-сервисов из шаблона Сервиса Формирования документов используется функция callRest.
Пример вызова функции из pebble-шаблона:
{% set host = "smevql-dtm-smevqlserver01.ru-central1.internal" %}
{% set port = "8080" %}
{% set route = "data" %}
{% set rq = "${jsonRequest.replace("\"", "\\\"")}" %}
{% set varName = callRest(
method = "POST",
url = "http://#\{host}:#{port}/#{route}",
headers = "Content-Type=application/json",
body = rq,
responseType = "JSON"
)
%}
{{ varName["response"]["ticket"][0]["id"]}}
Для асинхронного вызова (без ожидания ответа), необходимо выставить параметр async=true.
2.2.8.3.2. Pebble-шаблон для обработки поступившего запроса и формирования json-файла
{# формируем sql запрос в переменную passengersquery#}
{% var passengersquery %}
{% if params[0] is empty %}
select * from smart.all_types limit 10
{% else %}
select * from smart.all_types limit {{ params[0] }}
{% endif %}
{% endvar %}
{# выполняем sql запрос и помещаем результат выполнения в переменную rows.searchpassenger #}
{{ sql("searchpassenger", passengersquery) }}
{% var json_data %}
{
"passengers": [
{% for p in rows.searchpassenger %}
{# формируем json динамически #}
{% if loop.first %}
{% else %}
,
{% endif %}
{
"id": "{{ p.id }}",
"firstname": "{{ p.firstname }}",
"middlename": "{{ p.middlename }}",
"lastname": "{{ p.lastname }}",
"birthday": "{{ p.birthday }}"
}
{% endfor %}
]
}
{% endvar %}
{#выведем полученный json в неэкранированной форме#}
{{ json_data | raw }}
2.2.8.3.3. Pebble-шаблон для формирования xml-документа
<root>
<passengers Id="elementToSign">
{% for p in data.passengers %}
<passenger id="{{ p.id }}">
<firstname>{{ p.firstname }}</firstname>
<middlename>{{ p.middlename }}</middlename>
<lastname>{{ p.lastname }}</lastname>
<birthday>{{ p.birthday }}</birthday>
</passenger>
<cert>
<organization>{{ certification_info.subjectDN.commonName }}</organization>
<serial>{{ dec_to_hex(certification_info.serialNumber) }}</serial>
<issuer>{{ certification_info.issuerDN.commonName }}</issuer>
<valid-from>{{ certification_info.notBefore | date("dd.MM.yyyy") }}</valid-from>
<valid-until>{{ certification_info.notAfter | date("dd.MM.yyyy") }}</valid-until>
</cert>
{% endfor %}
</passengers>
<signature/>
</root>
2.2.8.3.4. Pebble-шаблон для формирования pdf-документа
<html>
<head>
<style>
table, th, td {
border: 1px solid black;
}
</style>
</head>
<body>
<h3>Certificate</h3>
<table>
<tr>
<th>Организация</th>
<th>Сертификат</th>
<th>Издатель</th>
<th>Действителен с</th>
<th>Действителен по</th>
</tr>
<tr>
<td>{{ certification_info.subjectDN.commonName }}</td>
<td>{{ certification_info.serialNumber }}</td>
<td>{{ certification_info.issuerDN.commonName }}</td>
<td>{{ certification_info.notBefore }}</td>
<td>{{ certification_info.notAfter }}</td>
</tr>
</table>
<h3>Passengers</h3>
<table>
<tr>
<th>id</th>
<th>firstname</th>
<th>middlename</th>
<th>lastname</th>
<th>birthday</th>
</tr>
{% for p in data.passengers %}
<tr>
<td>{{ p.id }}</td>
<td>{{ p.firstname }}</td>
<td>{{ p.middlename }}</td>
<td>{{ p.lastname }}</td>
<td>{{ p.birthday }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
2.2.9. Настройка Counter-provider – Сервиса генерации уникального номера
2.2.9.1. Конфигурация модуля Counter-Provider (application.yml)
Файл application.yml – основной конфигурационный файл модуля, в котором задана его логика и порядок работы сервиса:
среда разработки;
настройка счетчика;
настройка подключения к Zookeeper, а также другие настройки необходимые для корректной работы сервиса.
2.2.9.2. Пример файла application.yml
В конфигурационном файле следует задавать только те настройки, которые необходимы для решения текущих бизнес-задач.
environment:
name: ${ENVIRONMENT_NAME:test}
http-server:
port: ${HTTP_PORT:9000}
counter:
start-number: ${COUNTER_START_NUMBER:1}
retry-after-failure: ${COUNTER_RETRY_AFTER_FAILURE:3}
update-timeout: ${COUNTER_UPDATE_TIMEOUT:}
reset-period: ${COUNTER_RESET_PERIOD:}
increment-gap: ${INCREMENT_GAP:1}
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:localhost}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
persistence-mode: ${PERSISTENCE_MODE:prostore} # prostore | zookeeper
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:5}
persistence-datamart: ${PERSISTENCE_DATAMART:persistence}
datasource: ${PERSISTENCE_DATASOURCE:} # по умолчанию пусто, тогда берется единственный датасорс из настроек Простора
counter-prefix: ${COUNTER_PREFIX:counter_}
migration:
enabled: ${MIGRATION_ENABLE:false}
old-connection-string: ${OLD_ZOOKEEPER_DS_ADDRESS:localhost}
backup:
mode: ${BACKUP_MODE:rest} # kafka | rest
rest:
uri: ${BACKUP_URI:/backup}
backupTopic: ${BACKUP_TOPIC:adapter.backup}
statusTopic: ${STATUS_TOPIC:adapter.status}
kafka:
consumer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
group.id: ${COUNTER_BACKUP_GROUP_ID:counter_provider_adapter_command}
auto.offset.reset: latest
producer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
# Настройки модуля сбора информации о компонентах витрины
component-info:
enabled: true
# 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:
- keys
metrics:
port: ${METRICS_PORT:9837}
2.2.9.3. Параметры конфигурации
Настройка конфигурации Сервиса генерации уникального номера осуществляется путем редактирования параметров настроек в
файле application.yml, где настраиваются секции:
environment- указывается среда разработки;http-server- указывается порт веб-сервера;counter- указываются настройки счетчика;zookeeper- определяет настройки подключения к Zookeeper;persistence-mode- настройки хранения данных;prostore-rest-client- блок параметров конфигурирования взаимодействия с ProStore;migration- настройки миграции;backup- настройки бекапирования;component-info- настройки модуля сбора информации о компонентах витрины;metrics- настройка порта для получения метрик.
2.2.9.3.1. Секция environment
В секции environment указывается среда разработки (dev, test, stable, prod)
Например:
environment:
name: ${ENVIRONMENT_NAME:test}
Параметры настроек
name- среда разработки, напримерENVIRONMENT_NAME:test.
2.2.9.3.2. Секция http-server
В секции http указывается порт веб-сервера.
Например:
http-server:
port: ${HTTP_PORT:9000}
Параметры настроек
port- порт веб-сервера, например:HTTP_PORT:9000.
2.2.9.3.3. Секция counter
В секции counter можно настраивать начальный номер счетчика, а также количество попыток записи счетчика после ошибки
обновления.
Например:
counter:
start-number: ${COUNTER_START_NUMBER:1}
retry-after-failure: ${COUNTER_RETRY_AFTER_FAILURE:3}
update-timeout: ${COUNTER_UPDATE_TIMEOUT:}
reset-period: ${COUNTER_RESET_PERIOD:}
increment-gap: ${INCREMENT_GAP:1}
Параметры настроек
start-number- начальный номер счетчика, напримерCOUNTER_START_NUMBER:1;retry-after-failure- количество попыток записи счетчика после ошибки обновления, напримерCOUNTER_RETRY_AFTER_FAILURE:3;update-timeout- таймаут обновления счетчика, напримерCOUNTER_UPDATE_TIMEOUT:;reset-period- период сброса счетчика, напримерCOUNTER_RESET_PERIOD:;increment-gap- шаг инкремента, напримерINCREMENT_GAP:1.
2.2.9.3.4. Секция zookeeper
В секции zookeeper настраиваются параметры подключения к Zookeeper.
Например:
zookeeper:
connection-string: ${ZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal}
connection-timeout-ms: ${ZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000}
session-timeout-ms: ${ZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000}
chroot: ${ZOOKEEPER_DS_CHROOT:/adapter}
Параметры настроек
connection-string- Подключение к Zookeeper DS, напримерZOOKEEPER_DS_ADDRESS:t5-adsp-01.ru-central1.internal;connection-timeout-ms- Zookeeper DS таймаут подключения, напримерZOOKEEPER_DS_CONNECTION_TIMEOUT_MS:30000;session-timeout-ms- Zookeeper DS таймаут сессии, напримерZOOKEEPER_DS_SESSION_TIMEOUT_MS:86400000;chroot- Zookeeper DS chroot path, напримерZOOKEEPER_DS_CHROOT:/adapter.
2.2.9.3.5. Секция persistence-mode
В секции persistence-mode указывается настройка хранения данных: или в Prostore или в Zookeeper. В случае
выбора Prostore автоматически создаются необходимые таблицы.
Например:
persistence-mode: ${PERSISTENCE_MODE:prostore} # prostore | zookeeper
Параметры настроек
persistence-mode- настройка хранения данных, напримерPERSISTENCE_MODE:prostore.
2.2.9.3.6. Секция prostore-rest-client
В секции prostore-rest-client реализован блок параметров конфигурирования взаимодействия с ProStore.
Например:
prostore-rest-client:
host: ${PS_HOST:localhost}
port: ${PS_PORT:9195}
http:
max-pool-size: ${PS_MAX_POOL_SIZE:5}
persistence-datamart: ${PERSISTENCE_DATAMART:persistence}
datasource: ${PERSISTENCE_DATASOURCE:}
counter-prefix: ${COUNTER_PREFIX:counter_}
Параметры настроек
host- адрес ProStore, напримерPS_HOST:localhost;port- порт ProStore, напримерPS_PORT:9195;max-pool-size- максимальное число подключений к ProStore, напримерPS_MAX_POOL_SIZE:8;persistence-datamart- настройка хранения данных, например{PERSISTENCE_DATAMART:persistence};datasource- источник данных, напримерPERSISTENCE_DATASOURCE:, по умолчанию пусто, в этом случае берется единственный датасорс из настроек Простора.
2.2.9.3.7. Секция migration
В секции migration настраиваются миграции Zookeeper для задачи бекапирования.
Например:
migration:
enabled: ${MIGRATION_ENABLE:false}
old-connection-string: ${OLD_ZOOKEEPER_DS_ADDRESS:localhost}
Параметры настроек
enabled- подключение миграции, например{MIGRATION_ENABLE:false};old-connection-string- адрес Zookeeper, например{OLD_ZOOKEEPER_DS_ADDRESS:localhost}.
2.2.9.3.8. Секция backup
В секции backup настраивается бекапирования модуля.
Например:
backup:
mode: ${BACKUP_MODE:rest} # kafka | rest
rest:
uri: ${BACKUP_URI:/backup}
backupTopic: ${BACKUP_TOPIC:adapter.backup}
statusTopic: ${STATUS_TOPIC:adapter.status}
kafka:
consumer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
group.id: ${COUNTER_BACKUP_GROUP_ID:counter_provider_adapter_command}
auto.offset.reset: latest
producer:
property:
bootstrap.servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
Параметры настроек
mode- режим бекапирования, напримерBACKUP_MODE:rest;uri- путь к файлу бекапирования в случае выбора REST-сервисов для режима бэкапирования;backupTopic- топик для отправки сохраненных данных, например:{BACKUP_TOPIC:adapter.backup};statusTopic- топик для отправки статусов бэкапирования, например:{STATUS_TOPIC:adapter.status}.
2.2.9.3.9. Секция 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:
- keys
Параметры настроек
enabled- статус подключения компонента, указывается булево значение;datasource- датасорс Prostore;datamart- схема Prostore;table-name- имя таблицы для записи информации о компоненте;create-table-period- период попыток создания схемы, при неуспехе, указывается в секундах;publish-period- период публикации health-check, указывается в секундах;timeout-active- период после которого компонент считается неактивным при отсутствии health-check, указывается в секундах;secrets- список элементов конфига маскируемых при отправке, если указан узловой элемент, то маскируются все вложенные в него элементы.
2.2.9.3.10. Секция metrics
В секции metrics настраивается порт получения метрик.
Например:
metrics:
port: ${METRICS_PORT:9837}
Параметры настроек
port- Порт для получения метрик, например{METRICS_PORT:9837}.
2.2.10. Настройка Arenadata Cluster Manager (ADCM)
Подробная инструкция по настройке Arenadata Cluster Manager (ADCM) приведена в официальной документации разработчика на странице https://docs.arenadata.io/adcm/.
2.2.11. Настройка сервиса журналирования
Сервис журналирования позволяет работать с логами прикладных модулей запущенных в средах WildFly и Kubernetes/OpenShift.
Настройка сервиса журналирования должна быть применена к каждому модулю.
Ниже приведены шаги по настройке сервиса журналирования.
Добавьте зависимости в проект:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>logger-test</artifactId>
<properties>
<java.version>11</java.version>
<spring-cloud.version>Hoxton.SR5</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback.contrib</groupId>
<artifactId>logback-json-classic</artifactId>
<version>0.1.5</version>
</dependency>
<dependency>
<groupId>ch.qos.logback.contrib</groupId>
<artifactId>logback-jackson</artifactId>
<version>0.1.5</version>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.0.6</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.5.9.RELEASE</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Подключите FluentBit к приложению как отдельный контейнер в OpenShift:
containers:
- name: fluent-bit
image: fluent/fluent-bit:latest
volumeMounts: #перенос конфигураций, и лог файла из проекта в контейнер
- name: logger
mountPath: /fluent-bit/logger/
- name: fluent-bit-config
mountPath: /fluent-bit/etc/
terminationMessagePolicy: File
envFrom:
- configMapRef:
name: logger-fluent-bit-config-env
Создайте файл
logback.xmlдля логирования приложения ( подробнее см. документацию):
Внимание
Обязательно в appender FILE_FLUENT прописать путь до конфигураций FluentBit, иначе в контейнер логи не подтянутся. Например, <file>name-project/docker/fluentbit/conf/log.log</file>.
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
<Pattern>
%d{yyyy-MM-dd HH:mm:ss}%-5level %logger{36} - %msg%n
</Pattern>
</pattern>
</layout>
</appender>
<appender name="FILE_FLUENT" class="ch.qos.logback.core.FileAppender">
<file>docker/fluentbit/conf/log.log</file>
<append>false</append>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
<Pattern>
x-b3-traceid=%X{X-B3-TraceId:-} x-b3-spanid=%X{X-B3-SpanId:-} x-b3-parentspanid=%X{X-B3-ParentSpanId:-} x-b3-sampled=%X{X-B3-Sampled:-} x-b3-flags=%X{X-B3-Flags:-} caller_file_name=%file serverEventDatetime="%d" logLevel=%level threadName=%thread message="%replace(%replace(%m){'\n','\u2028'}){'\"','\''}" exception="%replace(%replace(%ex){'\"','\u2028'}){'\n','\u2028'}%nopex" callerLine=%L callerMethod="%replace(%caller){'\n','\u2028'}" loggerName="%10.10logger" callerClass=%logger{40} levelStr="%level" levelInt="%level" mdc= \n
</Pattern>
</pattern>
</layout>
</appender>
<root level="debug" additivity="false">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE_FLUENT"/>
</root>
</configuration>
Добавьте описание конфигурации для FluentBit (подробнее см документацию ):
[SERVICE]
Flush 1
Log_Level info
Daemon off
Parsers_File /fluent-bit/etc/parsers.conf
[INPUT]
Name tail
Path /fluent-bit/logger/log.log
Tag kafka-efs
Buffer_Chunk_Size 400k
Buffer_Max_Size 6MB
Mem_Buf_Limit 6MB
Parser logfmt
Refresh_Interval 20
[FILTER]
Name record_modifier
Match kafka-efs
Record subsystem ${SUBSYSTEM}
Record distribVersion ${DISTRIBVERSION}
Record deploymentUnit ${DEPLOYMENTUNIT}
Record hostName ${HOSTNAME}
Record ipAddress ${IPADDRESS}
[FILTER]
Name modify
Match kafka-efs
Hard_copy callerClass className
[FILTER]
Name record_modifier
Match kafka-efs
Whitelist_key serverEventDatetime
Whitelist_key subsystem
Whitelist_key distribVersion
Whitelist_key deploymentUnit
Whitelist_key hostName
Whitelist_key ipAddress
Whitelist_key logLevel
Whitelist_key className
Whitelist_key threadName
Whitelist_key message
Whitelist_key x-b3-traceid
Whitelist_key x-b3-spanid
[FILTER]
Name lua
Match kafka-efs
script convert_date.lua
call convert_date_efs
[OUTPUT]
Name stdout
Match kafka-efs
Format json
json_date_key time
[OUTPUT]
Name http
Match kafka-efs
Host logstash-service-gt-tatarstan-test-efs.apps.ocp-public.sbercloud.ru
Port 80
Format json
json_date_key time
Для правильной работы подключите parsers.conf.
[PARSER]
Name logfmt
Format logfmt
Настройте форматирование даты:
function convert_date_efs(tag, timestamp, record)
local pattern = "(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+),(%d+)"
dt_str = record["serverEventDatetime"]
local year, month, day, hour, minute, seconds, milliseconds = dt_str:match(pattern)
ts = os.time{year = year, month = month, day = day, hour = hour, min = minute, sec = seconds }
ts = (ts * 1000) + milliseconds
record["serverEventDatetime"] = ts
return 2, timestamp, record
end
function convert_date_pprb(tag, timestamp, record)
local pattern = "(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+),(%d+)"
dt_str = record["serverEventDatetime"]
local year, month, day, hour, minute, seconds, milliseconds = dt_str:match(pattern)
ts = os.time{year = year, month = month, day = day, hour = hour, min = minute, sec = seconds }
ts = (ts * 1000) + milliseconds
record["timestamp"] = ts
return 2, timestamp, record
end
function convert_date_logstash(tag, timestamp, record)
local pattern = "(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+),(%d+)"
dt_str = record["serverEventDatetime"]
local year, month, day, hour, minute, seconds, milliseconds = dt_str:match(pattern)
ts = os.time{year = year, month = month, day = day, hour = hour, min = minute, sec = seconds }
ts = (ts * 1000) + milliseconds
record["time"] = ts
return 2, timestamp, record
end
Добавьте параметры модуля:
kind: ConfigMap
apiVersion: v1
metadata:
name: logger-fluent-bit-config-env
data:
MODULEID: 1.0.0
MODULEVERSION: 1.0.0
NODEID: 12345
HOSTADDRESS: 0.0.0.0
SUBSYSTEM: LOGGER-TEST
DISTRIBVERSION: 1.0.0
DEPLOYMENTUNIT: TEST-UNIT
IPADDRESS: 0.0.0.1
Настройте конфигурацию для OpenShift. Для того, чтобы Prometheus мог идентифицировать сервис и собирать с него информацию, создайте Service и укажите путь, на котором располагаются метрики приложения.
apiVersion: v1
kind: Service
metadata:
name: monitoring-rest
annotations:
description: 'Exposes Prometheus App by CLuster Ip'
prometheus.io.scrape: 'true'
prometheus.io.path: '/monitoring-rest/actuator/prometheus'
prometheus.io.port: '8081'
labels:
app: monitoring-rest
spec:
type: LoadBalancer
ports:
- name: http
port: 9837
targetPort: 9837
selector:
app: monitoring-rest
2.2.12. Установка компонента сбора данных запросов и ответов Витрины данных
Компонент сбора данных запросов и ответов Витрины данных реализован с целью проведения бизнес-мониторинга ИЭП процессов обработки запросов типовым ПО витрины данных, как в целом, так и в части функционирования отдельных витрин для последующей передачи данных в СЦЛ.
2.2.12.1. Процесс установки
Общий процесс установки состоит из следующих действий:
Настройка логирования модулей.
Установка и настройка Vector.
Установка и настройка HaProxy.
Установка и настройка fluentbit.
2.2.12.1.1. Настройка логирования модулей
Необходимо настроить формирование логов в формате JSON на стороне модулей:
BLOB-адаптер;
Сервис формирования документов.
Для этого в файле logback.xml включите параметр net.logstash.logback.encoder.LogstashEncoder.
Пример logback.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>logs/application.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- keep 30 days' worth of history capped at 3GB total size -->
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
Подробная информация об encoder: https://github.com/logfellow/logstash-logback-encoder
Чтобы включить генерацию СЦЛ в секции logging файлa настроек application.yaml установите значения true.
2.2.12.1.2. Установка и настройка Vector
Установка производится по официальной документации: https://vector.dev/docs/setup/installation/
Пример настройки source:
json_source:
type: fluent
address: 0.0.0.0:24226
Пример фильтрации сообщений, имеющих флаг scl:
scl_tags_filter:
type: filter
inputs:
- json_source
condition:
type: "vrl"
source: |-
exists(.tags) && includes(array!(.tags), "TYPE_SCL")
Пример парсинга scl-сообщений:
scl_message_remap:
type: remap
inputs:
- scl_tags_filter
source: |-
. = parse_json!(.message)
Пример отправки scl-сообщений в Kafka:
podd_agent_sink:
type: kafka
inputs:
- scl_message_remap
bootstrap_servers: kafka:9092
topic: "<префикс>.scl.signal"
acknowledgements: true
compression: "gzip"
encoding:
codec: json
healthcheck: true
2.2.12.1.3. Установка и настройка HaProxy
Установка производится по официальной документации: http://docs.haproxy.org/
Для настройки HaProxy в секции backend перечислите список установленных инстансов Vector.
Пример файла haproxy.cfg:
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
defaults
mode tcp
log global
retries 3
maxconn 3000
listen stats
bind 0.0.0.0:1936
mode http
stats enable
stats uri /
frontend services
bind 0.0.0.0:24226
default_backend services
mode tcp
backend services
balance roundrobin
mode tcp
server vector01 vector-01:24226
server vector02 vector-02:24226
2.2.12.1.4. Установка и настройка Fluent bit
Установка производится по официальной документации: (https://docs.fluentbit.io/manual/installation/getting-started-with-fluent-bit).
Fluent bit должен быть настроен на чтение файлов логов приложений.
Пример файла конфигурации fluent-bit.conf:
[SERVICE]
flush 5
daemon off
log_level info
parsers_file parsers.conf
[INPUT]
name tail
path <путь до лог файла приложения>
tag *
parser json
[OUTPUT]
name forward
match *
host haproxy
port 24226
Пример файла parsers.conf:
[PARSER]
Name json
Format json
На этом настройка fluentbit завершена.
2.2.12.1.5. Работа с БД ClickHouse
В рамках технического решения по хранению протоколируемых запросов и ответов с возможностью извлечение данных по уникальному идентификатору реализовано использование колоночной аналитической базы данных ClickHouse.
Ключевые функциональные особенности базы данных ClickHouse:
движок базы данных: по умолчанию ClickHouse использует движок Atomic;
движок таблиц: MergeTree;
версия ClickHouse: LTS;
запрос на создание таблицы хранения логов в ClickHouse: CREATE TABLE.
Пример создания таблицы:
CREATE TABLE {Название БД}.logs
(
logger String,
timestamp DateTime,
level String,
requestId String,
message String,
messageType String,
customerId String,
customerOgrn String,
queryMnemonic String
)
ENGINE = MergeTree()
PARTITION BY timestamp
ORDER BY timestamp
SETTINGS index_granularity = 8192;
Пример задания конфигурационных настроек:
clickhouse_default_config:
clickhouse:
logger:
level: trace
log: /var/log/clickhouse-server/clickhouse-server.log
errorlog: /var/log/clickhouse-server/clickhouse-server.err.log
size: 1000M
count: 10
http_port: 8123
tcp_port: 9000
listen_host: 0.0.0.0
max_connections: 4096
keep_alive_timeout: 3
user_directories:
users_xml:
path: users.xml
local_directory:
path: "{{ clickhouse_root_data_folder }}/access/"
path: "{{ clickhouse_root_data_folder | add_slash }}"
2.2.12.1.6. Включение / выключение отправки сообщений в СЦЛ
Отправка логов в СЦЛ осуществляется автоматически после корректной настройки компонента.
Для выключения отправки логов закомментируйте блок отправки сообщений podd_agent_sink в Kafka в настройках Vector.
2.2.13. Настройка Агента СМЭВ4
Порядок установки и описание настроек Агента СМЭВ4 см. в документе: «Руководство администратора СМЭВ4».
Описание формата взаимодействия между Агентом СМЭВ4 и СМЭВ4-адаптером (название топиков, формат сообщений, схема взаимодействия) описан в разделе Спецификация Модуля исполнения запросов.
2.2.13.1. Настройка взаимодействия программы с Агентом СМЭВ4
После установки программы и Агента СМЭВ4 настройте их взаимодействие между собой. Для этого:
Настройте Агента СМЭВ4 и СМЭВ4-адаптер на работу с одним и тем же брокером сообщения Kafka:
Если вместе с Агентом СМЭВ4 устанавливается брокер сообщений Kafka, а Агент СМЭВ4 преднастроен на работу именно с этим экземпляром брокера сообщений, то укажите адрес этого брокера сообщений в конфигурационном файле СМЭВ4-адаптера (
application.yml), параметрkafkaUrl.Если вместе с Агентом СМЭВ4 не устанавливается брокер сообщений Kafka, то в Агенте СМЭВ4 согласно его документации настройте работу с брокером сообщений Kafka, установленным с программой. Для этого используйте адрес сервера Kafka из конфигурационного файла СМЭВ4-адаптера (
application.yml), параметрkafkaUrl.
Настройте названия топиков (см. Таблица 2.14) для обмена сообщениями в конфигурационном файле СМЭВ4-адаптера (
application.yml).
№ |
Назначение |
Настройка |
Значение по умолчанию |
|---|---|---|---|
1 |
Получение запросов |
|
|
2 |
Ответы на запросы |
|
|
3 |
Ошибки запросов |
|
|
4 |
Результат запроса оценки |
|
|
Формат обмена электронными сообщениями с СМЭВ4-адаптером описан в разделе Спецификация Модуля исполнения запросов.
2.3. Настройка сервиса мониторинга
Для мониторинга состояния работы Типового ПО «Витрина данных» используется связка Grafana + Prometheus.
Prometheus — система мониторинга, обладающая возможностями тонкой настройки метрик. Prometheus используется для отслеживания состояния работы компонентов системы на низком уровне.
Grafana — инструмент с открытым исходным кодом для визуализации данных из различных систем сбора статистики. Grafana используется для представления в графическом виде временных рядов и текстовых данных.
Примечание
Описание установки системы мониторинга приведено в разделе Установка системы мониторинга документа «Руководство по установке Типового ПО «Витрина данных»».
2.3.1. Предоставление источника данных
Существует два способа предоставления источника данных:
с помощью конфигурационного файла;
с помощью интерфейса Grafana.
Каждый файл конфигурации предоставления источника данных содержит манифест, в котором указывается желаемое состояние набора подготовленных источников данных.
При запуске Grafana загружает файлы конфигурации и предоставляет источники данных, перечисленные в манифестах.
Ниже приведен пример настройки источника данных TestData , который можно использовать для информационных панелей.
В директории
provisioning/datasources/создайте файлdtm.ymlсо следующим содержимым:
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
access: proxy
url: <ip:port>
jsonData:
httpMethod: POST
manageAlerts: false
prometheusType: Prometheus
Перезапустите Grafana, чтобы загрузить новые изменения.
На боковой панели наведите курсор на значок « Конфигурация» (шестеренка) и нажмите «Источники данных». TestData появится в списке источников данных.
Примечание
Папка
provisioning/datasources/находится в/etc/grafana/.
Для работы Prometheus с Grafana необходимо добавить Prometheus в качестве источника получения данных в Grafana.
Откройте Grafana — Configuration — Data sources, нажмите Add data source и выберите Prometheus.
Рисунок - 2.9 Выбор Prometheus в качестве источника получения данных
В поле URL введите адрес и порт, по которому доступен Prometheus.
Рисунок - 2.10 Ввод URL Prometheus
Внизу страницы нажмите кнопку Save & test
Рисунок - 2.11 Применение настроек
После успешной проверки Prometheus будет добавлен в Grafana.
2.3.2. Предоставление информационной панели
Определить поставщика информационных панелей можно также двумя способами:
с помощью конфигурационного файла;
с помощью интерфейса Grafana.
Каждый файл конфигурации информационной панели содержит манифест, который определяет желаемое состояние набора поставщиков информационной панели.
Поставщик информационной панели сообщает Grafana, где найти и где разместить определения информационной панели.
Grafana регулярно проверяет изменения в определениях панели мониторинга (по умолчанию каждые 10 секунд).
В директории provisioning/dashboards/ создайте файл dtm.yml со следующим содержимым:
apiVersion: 1
providers:
- name: 'DTM Metrics' # Уникальное идентифицируемое имя поставщика
folder: 'dtm-metrics' # Папка, в которую помещаются дашборды
type: file
disableDeletion: false
updateIntervalSeconds: 10
allowUiUpdates: false
options:
path: <path to dashboard definitions>
foldersFromFilesStructure: false
Примечание
Папка provisioning/dashboards/ находится в /etc/grafana/.
2.3.2.1. Настройка конфигурационного файла Prometheus
Пример конфигурационного файла prometheus.yml:
global:
scrape_timeout: 5s
scrape_interval: 5s
scrape_configs:
- job_name: 'smevql-server'
static_configs:
- targets: ['ip:8080']
- job_name: 'blob-adapter'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'counter-provider'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'csv-uploader'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'data-uploader'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'podd-adapter-group-repl'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'podd-adapter-group-tp'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9843']
- job_name: 'podd-adapter-import-tp'
static_configs:
- targets: ['ip:19843']
- job_name: 'podd-adapter-mppr'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9843']
- job_name: 'podd-adapter-mppw'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9843']
- job_name: 'podd-adapter-query'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'podd-adapter-replicator'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'podd-avro-defragmentator'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'printable-form-service'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'rest-uploader'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9837']
- job_name: 'smev3-adapter'
static_configs:
# изменить стандартный порт в application.yml сервиса на кастомный, так как он совпадает с другими сервисами
- targets: ['ip:9033']
2.3.2.2. Health check
В данной концепции приведены health check по СМЭВ3, ПОДД, REST, BLOB и печатным формам. Health check по ETL реализуется штатными способами Spark, Airflow, Hadoop, Tarantool, так же как и health check по Kafka и Zookeeper.
Каждый сервис, из перечисленных выше, дорабатывается таким образом, чтобы возвращать информацию liveness и readiness в виде метрик Prometheus.
Дополнительно, по каждому сервису реализуется соответствующие REST запросы: ../api/v1/liveness и ..api/v1/readiness, показывающим
liveness и readyness проверки соответственно. Обращение к каждому конкретному сервису из представленных ниже по REST, обусловлено передачей
хоста и порта в URL, соответствующих сервису согласно схеме развертывания.
liveness возвращает информацию о работоспособности сервиса.
readiness сообщает о готовности сервиса к работе.
Готовность сервиса к работе характеризуется доступностью окружающих его сервисов, с которыми ведется прямое взаимодействие.
Когда liveness проверка не проходит, то это сигнализирует о том что сервис мертв и должен быть как минимум перезагружен.
Когда readiness проверка не проходит, то это говорит о том, что проверяемый сервис не готов к принятию входящего сетевого трафика.
В будущем это приложение может прийти в готовность, но сейчас оно не должно принимать трафик.
Liveness и readiness проверки проходят успешно только в том случае, если все входящие в них проверки (свои для каждого сервиса) прошли успешно.
Внимание
Для управления всеми типами health check наружу выставляются рычаги/конфиги, позволяющие включать/отключать проверки а также устанавливать частоту вызова и таймауты по каждой проверке. Readiness и Liveness проверки проходят в realtime. Таймауты для данных проверок должны быть выставлены с учетом того, что проверка сможет пройти в данный срок.
Liveness
Для liveness проверок вертиклов принимается следующее ограничение:
Если, например, для работы вертикла требуется Kafka, и она в данный момент времени недоступна - то, при условии что вертикл задеплоен, проверка liveness вернет положительный ответ. Отловить подобную ситуацию можно будет только на проверке Readiness.
2.3.2.2.1. BLOB-Adapter
Liveness
Проверяется состояние вертиклов. В рамках проверки осуществляется корректность деплоя вертиклов. Берется список всех вертиклов по сервису, и выполняется проверка, что они есть в списке задеплоеных вертиклов. В случае если все вертиклы задеплоены - проверка проходит успешно.
Readiness
Хранилище (внешнее или внутренне). Получение адреса хранилища. Проверка, существует ли хранилище по конкретному адресу. Порт доступен, открыт и доступен для подключения.
2.3.2.2.2. Сервис печатных форм
Liveness
Проверяется состояние вертиклов. В рамках проверки осуществляется корректность деплоя вертиклов. Берется список всех вертиклов по сервису, и выполняется проверка, что они есть в списке задеплоеных вертиклов. В случае если все вертиклы задеплоены - проверка проходит успешно.
Readiness
ProStore: получения адреса, подключение по JDBC и проверка выполнения запроса «CHECK_VERSIONS()».
Kafka агента ПОДД: получение строк подключения. Проверка, что Kafka существует по конкретному адресу, порт доступен, открыт и доступен для подключения.
2.3.2.2.3. СМЭВ3 адаптер
Liveness
Проверяется состояние вертиклов. В рамках проверки осуществляется корректность деплоя вертиклов. Берется список всех вертиклов по сервису, и выполняется проверка, что они есть в списке задеплоеных вертиклов. В случае если все вертиклы задеплоены - проверка проходит успешно.
Readiness
ProStore: получения адреса, подключение по JDBC и проверка выполнения запроса «CHECK_VERSIONS()».
VipNet SignerCP: Если в файле конфигурации указан доступ к VipNet, то по указанной строке подключения проверяется доступность VipNet.
Postgress: Получения строки подключения, подключение по JDBC и проверка выполнения запроса «select 1».
СМЭВ3: Проверить telnet порт СМЭВ3 на доступность командой
Опционально, проверить зафиксированные результаты обращений вертикла ресивера в СМЭВ3.