Руководство по системному администрированию#

Сценарии администрирования#

При 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 необходимо указать:

  1. Порт, на котором будут доступны данные: server.port 8086;

  2. Список 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 маркетплейса
}

Работа с конструктором форм описана в Руководстве оператора, «Работа с Конструктором форм».

Рекомендации по использованию механизмов безопасности#

В рамках выполнения требований безопасной работы системы рекомендуется:

  1. Предоставлять доступ к администрированию только сотрудникам, которым он необходим в соответствии с их должностными обязанностями;

  2. Разделять среды разработки, тестирования и эксплуатации;

  3. Администраторам системы осуществлять контроль использования средств защиты информации;

  4. Использовать компоненты аутентификации, авторизации и аудита в качестве внешних средств защиты.

События системного журнала#

Все события, собираемые компонентом во время работы, публикуются в компоненте Журналирование (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 на наличие ошибок/успешных запросов.