Руководство по системному администрированию#
Сценарии администрирования#
При deploy в системе контейнеризации все токены, пароли, сертификаты и иная чувствительная информация хранится в одном из типов хранилищ:
в секретах системы управления контейнерами;
в файловой системе pod. Все токены, пароли, сертификаты и иная чувствительная информация получена из внешней системы хранения секретов Secret Management System.
Стратегия снятия резервных копий зависит от критичности данных, подлежащих сохранению, и определяется группой сопровождения.
К сценариям администрирования относятся все действия и настройки, указанные в этом разделе, а также просмотр журналов (logs) и метрик мониторинга.
Сценарий «Управление конфигурацией»#
Настройка способа получения конфигурации выполняется в файле <src/main/resources/bootstrap.yml>.
Если используется Spring Cloud, необходимо его включить и указать адрес сервера конфигурации:
spring.cloud.config.uri: http://localhost:8080
spring.cloud.config.enabled: true
Если используется локальная конфигурация, Spring Cloud необходимо отключить:
spring.cloud.config.enabled: false
В зависимости от текущего профиля данные настройки могут быть переопределены в файлах конфигурации профиля <src/main/resources/application-{profile}.yml>.
Файл application.yml должен содержать следующие конфигурационные блоки:
блок
management— настройка Spring actuator для получения метрик;блок
logging— настройка требуемого уровня логирования в системе;блок
spring— настройка конфигурации системы;блок
token— настройка авторизации пользователя;блок
сallback— настройка реализации Callback;блок
api— настройка пользовательского API;блок
events— настройка отправки событий бизнес-мониторинга.
API в формате OpenApi с расширением json доступно для скачивания.
Настройка аутентификации и авторизации#
Подробнее о каждом режиме аутентификации и авторизации описано в документе «Настройки режимов аутентификации и авторизации пользователей».
Настройки подключения к БД#
Для работы компонента Designer (BPMD) продукта Platform V Flow (BPM) необходимо настроить подключение к БД.
Список рекомендуемых БД представлен в Руководстве по установке, «Системное программное обеспечение».
Настройки БД описаны в Руководстве по установке, «Подготовка БД».
Создание и обновление структуры БД происходит автоматически во время инициализации (запуска) приложения.
Отключение функции автоматического обновления БД возможно с помощью настройки:
spring.liquibase.enabled: false
Настройка Spring actuator#
Блок management файла application.yml содержит настройки Spring actuator, необходимые для получения метрик.
Для настройки доступа к данным Spring actuator необходимо указать:
Порт, на котором будут доступны данные:
server.port 8086;Список endpoint, по которым необходимо получать данные.
endpoint |
Описание |
|---|---|
auditevents |
Предоставляет информацию о событиях аудита для текущего приложения. Требуется bean AuditEventRepository |
beans |
Отображает полный список всех компонентов Spring в приложении |
caches |
Открывает доступные кеши |
conditions |
Показывает условия, которые были созданы для классов конфигурации и автоматической конфигурации, а также причины, по которым они совпадают или не совпадают |
configprops |
Отображает упорядоченный список @ConfigurationProperties |
env |
Показывает свойства от Spring's ConfigurableEnvironment |
flyway |
Показывает все примененные миграции базы данных Flyway. Требуется один или несколько Flyway beans |
health |
Показывает информацию о состоянии приложения |
httptrace |
Отображает информацию HTTP-трассировки (по умолчанию последние 100 обменов HTTP-запросом-ответом). Требуется bean HttpTraceRepository |
info |
Отображает произвольную информацию о приложении |
integrationgraph |
Показывает график интеграции Spring. Требуется зависимость от spring-integration-core |
loggers |
Показывает и изменяет конфигурацию логеров в приложении |
liquibase |
Показывает все примененные миграции базы данных Liquibase. Требуется один или несколько Liquibase beans |
metrics |
Показывает информацию «метрики» для текущего приложения (список метрик приведен ниже) |
mappings |
Отображает упорядоченный список всех @RequestMapping путей |
scheduledtasks |
Отображает запланированные задачи в приложении |
sessions |
Позволяет получать и удалять пользовательские сеансы из хранилища сеансов Spring Session. Требуется веб-приложение на основе сервлетов, использующее Spring Session |
shutdown |
Позволяет корректно завершить работу приложения. По умолчанию отключено |
startup |
Показывает данные о шагах запуска, собранные платформой ApplicationStartup |
threaddump |
Выполняет дамп потока |
heapdump |
Возвращает hprof дамп файл |
logfile |
Возвращает содержимое файла журнала (если установлены свойства logging.file.name или logging.file.path). Поддерживает использование Range заголовка HTTP для получения части содержимого файла журнала |
prometheus |
Предоставляет метрики в формате, который может быть извлечен сервером Prometheus. Требуется зависимость от micrometer-registry-prometheus |
Настройка белых списков разрешенных классов/методов в скриптах внутри моделей процессов#
В файле конфигурации application.yml (модуля designer-executor) должна быть настроена следующая переменная:
sandboxes.groovy.security.staticWhitelistPaths– путь к файлу, содержащему перечень методов/классов, которые могут использоваться в действиях типа Выполнение сценария.
sandboxes:
groovy:
security:
staticWhitelistPaths:
- "classpath:whitelists/generic-whitelist"
- "file:///home/jboss/whitelist/generic-whitelist"
Дополнительно – запрещены методы/классы ниже (даже при добавлении соответствующих сигнатур в whitelist, их все равно нельзя будет исполнить):
"method java.lang.Runtime exit int";
"method java.lang.Runtime halt int";
"staticMethod java.lang.System exit int";
"new org.kohsuke.groovy.sandbox.impl.Checker$SuperConstructorWrapper java.lang.Object[]";
"new org.kohsuke.groovy.sandbox.impl.Checker$ThisConstructorWrapper java.lang.Object[]".
для скриптов на JavaScript будет недоступен вызов Java при исполнении.
Включить/отключить whitelist можно с помощью настройки enableSecurityScriptTask.
enableSecurityScriptTask=falseотключает использование фильтра.enableSecurityScriptTask=falseвключает использование фильтра.
Примеры содержимого файла whitelist#
Конструкторы (с параметром и без):
new java.util.ArrayList java.util.Collection
new groovy.json.JsonBuilder
Статические методы (с параметром и без):
staticMethod java.util.Arrays asList java.lang.Object[]
staticMethod java.util.Arrays toString java.lang.Object[]
staticMethod java.util.Base64 getDecoder
staticMethod java.util.Base64 getEncoder
Методы (с параметром и без):
method java.lang.Object equals java.lang.Object
method java.io.Reader read
Статическое поле:
staticField java.lang.Integer MAX_VALUE
Если в методе или конструкторе более одного параметра, тогда их типы перечисляются через пробел:
method java.io.Reader read char[] int int
new java.lang.Enum java.lang.String int
Интеграция с внешними системами#
Настройка интеграции с компонентом Аудит (AUDT) Platform V Audit SE (AUD)#
В связи с требованиями безопасности рекомендуется осуществлять передачу информации о произведенных действиях в компонент Аудит (AUDT) Platform V Audit SE (AUD).
Журнал регистрации событий, отправляемых в компонент Аудит, хранится в компоненте Аудит (AUDT) Platform V Audit SE (AUD).
Интеграция с компонентом описана в Руководстве по установке, «Интеграции с компонентом Аудит (AUDT) Platform V Audit SE (AUD)».
Настройки логирования событий аудита#
Логирование событий аудита настраивается с помощью параметра destinationPoint в application.yaml audit.destination-point.
Параметр destinationPoint может принимать значения:
rest — события аудита передаются в сервис аудирования и не логируются;
json — события аудита не передаются в сервис аудирования, а только записываются в лог-файл в формате json;
rest, json — события аудита передаются в сервис аудирования и также записываются в лог-файл в формате json.
Нижеописанные vm opts контролируют место и названия файлов для логирования в json:
DloggingDir — папка, куда складываются json-файлы с обычными логами и логами аудита;
DloggingJSONFile — название файла с обычными логами;
DauditLoggingJSONFile=auditLog.json — название файла с логами аудита.
Структура лог-файла аудита
{
"level": "%level", //уровень логирования
"thread": "%thread", //названия потока
"class": "%logger{40}", //класс логгера
"message": "%message" //сам объект аудита
}
Пример лог-файла аудита
Пример можно скачать.
Настройка интеграции с компонентом Журналирование (LOGA) Platform V Monitor (OPM)#
Интеграция с компонентом описана в Руководстве по установке, «Интеграция с компонентом Журналирование (LOGA) Platform V Monitor (OPM)»
Для корректного разбора событий необходимо, чтобы формат событий соответствовал шаблону разбора fluent-bit. Формат событий описан в xml-файле конфигурации для библиотеки logback-spring.xml.
Настройка интеграции с компонентом Объединенный мониторинг Unimon (MONA) Platform V Monitor (OPM)#
Модули BPMD публикуют метрики приложения, которые могут быть получены агентом мониторинга Unimon (MONA) Platform V Monitor (OPM). Все необходимые модули MONA устанавливаются отдельно и независимо от BPMD по инструкции компонента Unimon (MONA) Platform V Monitor (OPM).
Настройка интеграции с Secret Management System#
Интеграция с компонентом описана в Руководстве по установке, «Интеграция с Secret Management System».
Настройка подключения к META#
Подключение к META осуществляется на уровне приложения (параметры настройки подключения зашиты в код модуля designer-backend компонента Designer Platform V).
Для настройки используются следующие параметры:
Имя параметра |
Назначение параметра |
|---|---|
app.meta-user-name |
логин ТУЗ для подключения к META |
app.meta-password |
пароль ТУЗ для подключения к META |
app.meta-token-url |
URL для получения токена доступа к META |
app.meta-graphql-api-url |
URL для запросов в META |
app.meta-introspection-depth |
максимальная вложенность ответа от META (рекомендуемое значение: 5) |
Настройка подключения к S3-совместимому хранилищу (опционально)#
Интеграция описана в Руководстве по установке, «Интеграция с S3-совместимым хранилищем».
Настройка интеграции с сервером Git#
Подключение к Git осуществляется на уровне приложения.
Для настройки используются следующие параметры:
Имя параметра |
Назначение параметра |
|---|---|
app.git.useSSL |
управление SSL верификацией: false – отключена, true – SSL-подключение через egress |
app.git.port |
порт для переопределения https-запроса (по умолчанию 8080) |
app.git.tempDir |
каталог для временного хранения файлов (по умолчанию /tmp) |
Настройка интеграции с маркетплейсом (MarketPlace) для конструктора форм#
MarketPlace (Маркетплейс) – пополняемая библиотека с «кастомизированными виджетами» для плеера и редактора скриптов.
Кастомный виджет – это React компонент, предназначенный для создания и редактирования форм из json-скрипта.
Настройки, необходимые для добавления в конфигурацию сервера Nginx (конфигурация locations nginx включена в дистрибутив поставки), на котором установлен BPMD.
location /designer-app/marketplace/widget {
## проксирование на URL маркетплейса
}
location /designer-app/marketplace/list {
## проксирование на URL маркетплейса
}
location /designer-app/marketplacesandbox/widget {
## проксирование на URL маркетплейса
}
location /designer-app/marketplacesandbox/list {
## проксирование на URL маркетплейса
}
Работа с конструктором форм описана в Руководстве оператора, «Работа с Конструктором форм».
Рекомендации по использованию механизмов безопасности#
В рамках выполнения требований безопасной работы системы рекомендуется:
Предоставлять доступ к администрированию только сотрудникам, которым он необходим в соответствии с их должностными обязанностями;
Разделять среды разработки, тестирования и эксплуатации;
Администраторам системы осуществлять контроль использования средств защиты информации;
Использовать компоненты аутентификации, авторизации и аудита в качестве внешних средств защиты.
События системного журнала#
Все события, собираемые компонентом во время работы, публикуются в компоненте Журналирование (LOGA) продукта Platform V Monitor (OPM), далее по тексту – Журналирование.
Настройки интеграции с компонентом описаны в разделе «Интеграция с внешними системами», «Настройка интеграции с компонентом Журналирование (LOGA) Platform V Monitor (OPM)» и Руководстве по установке «Платформенные интеграции».
События регистрируются в формате json. Журнал регистрации событий располагается в АРМ сервиса Журналирование (LOGA) продукта Platform V Monitor (OPM). Местоположение АРМ сервиса AUDT необходимо уточнять у администраторов сред.
Регистрируются события уровней:
TRACE – менее приоритетные записи (logs) для отладки, с наименьшим уровнем логирования;
DEBUG – записи (logs), необходимые для отладки приложения. Для уверенности в том, что система делает именно то, что от нее ожидают, или описания действия системы;
INFO – записи (logs), которые содержат важные действия в приложении. Это не ошибки, это не предостережение, это ожидаемые действия системы;
WARN – обозначаются записи (logs), которые содержат предостережение. Произошло неожиданное действие, несмотря на это система устояла и выполнила запрос;
ERROR – уровень ошибок, когда есть проблемы, которые нужно решить. Ошибка не останавливает работу приложения в целом. Остальные запросы могут работать корректно;
FATAL – ошибка, после которой приложение уже не сможет работать и будет остановлено.
События уровней Trace и Debug не рекомендуется включать в ПРОМ среде.
Перечень событий
Уровень |
Текст/шаблон сообщения |
Перевод |
|---|---|---|
ERROR |
Произошла ошибка во время записи в аудит: %s |
------------ |
ERROR |
Could not resolve passed region '{}' |
Не удалось разрешить переданную область '{}' |
ERROR |
Handle error: {} |
Обработать ошибку: {} |
ERROR |
There were unfinished tasks in the queue |
В очереди есть незавершенные задачи |
ERROR |
Could not create bucket properly, try to remove partially created bucket, if it exists |
Не удалось правильно создать папку с набором моделей, попробуйте удалить частично созданную папку, если она существует |
ERROR |
Fail on remove partially created bucket |
Ошибка при удалении частично созданной папки с набором моделей |
ERROR |
Error while zipping package |
Ошибка при сжатии приложения |
ERROR |
Error while adding a model to zip |
Ошибка добавления модели в zip-архив |
ERROR |
Can't transform git url: {} |
Не удается преобразовать url-адрес git: {} |
ERROR |
Error when clearing the git directory: {} |
Ошибка при очистке каталога git: {} |
ERROR |
Error while interacting with git: {} |
Ошибка при взаимодействии с git: {} |
ERROR |
Could not upload object properly |
Не удалось правильно загрузить объект |
ERROR |
Could not remove bucket properly |
Не удалось корректно удалить папку с набором моделей |
ERROR |
Error while calling for api |
Ошибка при вызове API |
ERROR |
Token request returned status code {} |
Запрос токена вернул код {} |
ERROR |
access_token not found in {} |
Access_token не найден в {} |
ERROR |
Error fixing certs |
Ошибка исправления сертификатов |
ERROR |
Fail migrate metadata from s3 to db |
Не удалось перенести метаданные с хранилища s3 в БД |
ERROR |
The package id: {} does not include DPM credentials. Please point and try again |
Идентификатор пакета: {} не включает учетные данные DPM. Пожалуйста, укажите и повторите попытку |
DEBUG |
Request: {} |
Запрос: {} |
DEBUG |
Create versioned bucket '{}’ |
Создана папка с версией с набором моделей '{}’ |
DEBUG |
list objects by bucket '{}' prefix '{}’ |
Список объектов в папке с набором моделей '{}' префикс '{}' |
DEBUG |
Find object versions by bucket name '{}', object name '{}’ |
Найдены версии объекта по названию папки с набором моделей '{}', название объекта '{}' |
DEBUG |
Find object by bucket '{}', object name '{}’ |
Найден объект по названию папки с набором моделей '{}', название файла '{}', размер '{}' |
DEBUG |
Upload file in bucket '{}', file name '{}', size '{}’ |
Загружен файл в папку с набором моделей '{}', название файла '{}', размер '{}' |
DEBUG |
Count object by bucket name '{}’ |
Количество объектов по названию папки с набором моделей'{}’ |
DEBUG |
Remove bucket '{}’ |
Удалить папку с набором моделей '{}’ |
DEBUG |
Download file by bucket '{}', object name '{}', version id marker '{}’ |
Загрузка файла по папке с набором моделей '{}', название объекта '{}', маркер идентификатора версии '{}' |
DEBUG |
Remove object by bucket '{}', object name '{}', version id marker '{}’ |
Удаление объекта по папке с набором моделей '{}', название объекта '{}', маркер идентификатора версии '{}' |
DEBUG |
Authentication at META failed, retrying with new access_token |
Аутентификация в META не удалась, повторная попытка с новым access_token |
DEBUG |
Json response: {} |
Json-ответ: {} |
DEBUG |
Unable to refresh access token, trying to get a new one instead |
Не удалось обновить токен доступа, попытка получить новый |
DEBUG |
Creating temporary directory |
Создание временного каталога |
DEBUG |
Using temporary directory: {} |
Использование временного каталога: {} |
DEBUG |
Clone branch {} from {} for {} |
Клонирование ветки {} из {} в {} |
DEBUG |
Package base path {} |
Базовый путь пакета {} |
DEBUG |
Clean directory {} |
Очистка каталога {} |
DEBUG |
Write models to {} |
Запись моделей в {} |
DEBUG |
Model path {} |
Путь к модели {} |
DEBUG |
Create model base path {} |
Создание базового пути к модели {} |
TRACE |
Start sync for Package:{} by user: {} |
Запуск синхронизации пакета:{} пользователем: {} |
TRACE |
Request to deploy packet id:{}, from user {} |
Запрос на установку приложения с идентификатором: {}, от пользователя {} |
TRACE |
Clone the package to temp dir {} |
Клонирование пакета во временный каталог {} |
TRACE |
Commit changes to package |
Зафиксированы изменения в пакете |
TRACE |
Push changes to package |
Отправлены изменения в пакет |
TRACE |
Add models to commit |
Добавлены модели для фиксации изменений |
TRACE |
Checkout to {} branch |
Переключение на {} ветку |
WARN |
Interrupted! |
Прервано! |
WARN |
AUDIT_MODE_IS_UNKNOWN = "Audit mode is unknown. Set default mode value: {} |
AUDIT_MODE_IS_UNKNOWN = "Режим аудита неизвестен. Установите значение режима по умолчанию: {} |
WARN |
AUDIT_MODE_IS_EMPTY = "Audit mode is empty. Set default mode value: {} |
AUDIT_MODE_IS_EMPTY = "Режим аудита пуст. Установите значение режима по умолчанию: {} |
WARN |
Could not register audit metamodel successfully |
Не удалось успешно зарегистрировать метамодель аудита |
WARN |
Couldn't resolve audit metamodel version. Set default value: {} |
Не удалось разрешить версию метамодели аудита. Установить значение по умолчанию: {} |
WARN |
Synchronization task for package: {} from date: {} is no longer relevant |
Задача синхронизации для пакета: {} с даты: {} больше не актуальна |
INFO |
Trying register audit metamodel |
Попытка регистрации метамодели аудита |
INFO |
Audit metamodel successfully registered, response id '{}’ |
Метамодель аудита успешно зарегистрирована, идентификатор ответа "{}" |
INFO |
Resolved audit metamodel version {} |
Версия метамодели аудита {} |
INFO |
Using default region '{}' |
Использование области по умолчанию '{}' |
События мониторинга#
Предварительно потребитель должен создать подключение к компоненту Объединенный мониторинг Unimon (MONA) продукта Platform V Monitor (OPM), используя соответствующий resourceName.
Метрики генерируются модулем designer-backend компонента BPMD.
Метрика |
Описание |
|---|---|
Аудит |
_______________ |
audit.availability |
метрика, отображающая состояние клиента: 0 – не инициализирован, 1 – ошибка отправки, 2 – асинхронная отправка, 3 – синхронная отправка |
audit.total |
общее количество событий |
audit.successful |
количество успешно отправленных событий |
audit.errors.service |
количество не зарегистрированных событий аудита |
audit.errors.connection |
количество неудачных попыток подключения к серверу |
Настройки интеграции с компонентом описаны в разделе «Интеграция с внешними системами», «Настройка интеграции с компонентом Объединенный мониторинг Unimon (MONA) Platform V Monitor (OPM)».
Часто встречающиеся проблемы и пути их устранения#
Алгоритм для диагностирования и решения проблем с внешними интеграциями:
проанализируйте журнал компонента Engine (BPMX) продукта Platform V Flow (BPM) на наличие ошибок/успешных запросов.;
проанализируйте журнал Istio Proxy в pod сервиса на наличие ошибок/успешных запросов;
проанализируйте журнал Egress Gateway на наличие ошибок/успешных запросов;
проанализируйте журнал OTT Sidecar на Egress на наличие ошибок/успешных запросов.