49 KiB
Описание параметров конфигурации сервера приложений
Файл /standalone/configuration/standalone.xml
Общие
webbpm.security.login.case_sensitive. Default value = true. Параметр отвечающий за чувствительность к регистру при обработке логина пользователя.- true - Login и login, обрабатываются как разные логины.
- false - Login и login, обрабатывается как один и тот же логин.
webbpm.db.pool_size. Нужен только дляwebbpm.mode= development.webbpm.mode. Режим работы приложения. Значения - development, production.- development - в этом режиме используется соединение к БД проекта, заданное в Studio.
- production - в этом режиме используется соединение к БД проекта, заданное с помощью jndi имени.
jBPM
com.arjuna.ats.arjuna.allowMultipleLastResourceswebbpm.jbpm.audit-log.disabled- флаг, отвечающий за включение/отключение аудита jBPMwebbpm.jbpm.cleaner_cron- cron расписание автоматической очистки БД JBPM, по умолчанию "-" т.е. выключен. Очищаются незавершенные процессы.webbpm.jbpm.cleaner_timeout- время, спустя которое процесс считается устаревшим. По умолчанию - 10 часов.webbpm.jbpm.finished_process_cleaner_cron- cron расписание автоматической очистки аудита процессов в БД JBPM, по умолчанию "-" т.е. выключенwebbpm.jbpm.finished_process_cleaner_timeout- время, спустя которое процесс считается устаревшим. По умолчанию - 10 часов.
Пример:
<property name="com.arjuna.ats.arjuna.allowMultipleLastResources" value="true"/>
<property name="webbpm.db.pool_size" value="5"/>
<property name="webbpm.mode" value="development"/>
jBPM Runtime Strategy
Возможные варианты runtime strategy:
- SINGLETON
- PER_REQUEST (значение по умолчанию)
- PER_PROCESS_INSTANCE
- PER_CASE
Пример:
<property name="webbpm.jbpm.runtime_strategy" value="PER_PROCESS_INSTANCE"/>
Способ аутентификации
- authentication.method - способ аутентификации. Поддерживаемые способы аутентификации: form, kerberos, cert_over_db, cert_over_ldap
По логину и паролю
Пример конфигурации:
<property name="authentication.method" value="form"/>
По сертификату
- cert_over_db - проверка наличия пользователя в базе данных безопасности
- cert_over_ldap - проверка наличия пользователя в базе данных безопасности и в LDAP
Примеры:
<property name="authentication.method" value="cert_over_db"/>
<property name="authentication.method" value="cert_over_ldap"/>
Параметр способа аутентификации authentication.method должен быть также установлен на клиентской части приложения в app-config.json
Также для аутентификации по сертификату нужны свойства для хранилища сертификатов:
-
certificate.keystore.location - путь до java key store. Key store - это хранилище доверенных сертификатов, с помощью которых можно проверить корневой сертификат. Сертификат устанавливается с помощью команды:
keytool -importcert -alias myAlias -file Example.cer -keystore exampleKeyStore -
certificate.keystore.password - пароль для keystore, установленный при импорте сертификата
Примеры:
<property name="certificate.keystore.location" value="${jboss.home.dir}/mfc"/>
<property name="certificate.keystore.password" value="mfc_auth"/>
Kerberos
Получите от администратора Kerberos .keytab файл, из которого командой klist -k http.keytab можно получить список principal-ов
Проверить успешность авторизации principal-а можно командой kinit -t -i http.keytab %principal%.
В
случае успешной авторизации команда klist в качестве default principal которым проводилась авторизация.
После этого в standalone.xml поправить параметр app.service-principal на principal, которым успешно авторизовались. principal имеет формат: HTTP/%hostname%@%REALM%
Пример конфигурации:
<property name="app.service-principal" value="HTTP/oleg-rxserver.alt.dom@ALT.DOM"/>
<property name="app.keytab-location" value="${jboss.home.dir}/http.keytab"/>
<property name="authentication.method" value="kerberos"/>
- app.service-principal. Пример - HTTP/oleg-rxserver.alt.dom@ALT.DOM
- app.keytab-location - расположение keytab файла. Пример - ${jboss.home.dir}/
- http.keytab.
Также необходимо в настройках браузера на клиенте задать параметр network.negotiate-auth.trusted-uris задать значение .%domain%.
Пример:
.ALT.DOM
Ldap
Аутентификация происходит посредством логина и пароля синхронизированного пользователя Ldap. Логин и пароль введенные в форму входа, будут проверены сервисом Ldap.
Пример конфигурации:
<property name="ldap.url" value="ldap://localhost:389"/>
<property name="ldap.base" value="dc=example,dc=org"/>
<property name="ldap.username" value="cn=admin,dc=example,dc=org"/>
<property name="ldap.password" value="admin"/>
<property name="authentication.method" value="form"/>
Настройка сервера приложений для работы с Kerberos
-
создать учетные записи в домене:
- тестовые для проверки работоспособности функционала (пользователи домена, почтовые ящики):
User1 pass1 user1@example.comUser2 pass2 user2@example.com- сервисную для доступа сервиса(приложения) к MS AD - (пользователь домена - снять устаревание пароля, ограничение по времени действия, почтовый ящик):
serviceUser servicePass serviceuser@example.com
-
завести учетную запись машины
appserver.machine.name(fqdn-имя сервиса) в AD (вручную, как запись в computer) и в DNS (A-запись)appserver.machine.name 10.250.216.91 -
сгенерировать keytab (утилита ktpass) для аутентификации сервисов(приложения) для единой точки входа -
serviceUser- с именем test.file.name.keytab - привязав к ней пользователя serviceUserнапример, так:
ktpass -princ http/appserverMachineName.example.com@example.com -mapuser example.com\serviceUser -pass "пароль_уз_serviceUser" -crypto All -ptype KRB5_NT_PRINCIPAL -out "путь_к_директории_выгрузки_файла\test.file.name.keytab"
Kerberos FAQ
-
В случае, если авторизация не проходит и в логах сервера приложений присутствует следующий вывод:
2019-05-14 05:33:36,588 INFO [security.controller.KerberosAuthenticationController] (default task-3) Authentication request header Authorization not exists 2019-05-14 05:33:36,588 INFO [security.controller.KerberosAuthenticationController] (default task-3) Authentication object is not presentedнеобходимо проверить настройку браузера firefox
network.negotiate-auth.trusted-uris, она должна соответствовать домену из principal-а. Для этого в поисковую строку браузера вводим "about:config", в открывшемся окне нажимаем "accept with risk and continue", в поисковой строке открывшейся страницы ввестиnetwork.negotiate-auth.trusted-uris. Пример: для principal-аHTTP/oleg-rxserver.alt.dom@ALT.DOMнастройка в браузере должна быть.alt.dom, приложение в браузере должно открываться поhttp:\\oleg-rxserver.alt.dom:8080\... -
если в логах сервера приложений есть ошибка:
2019-05-13 14:13:07,095 WARN [org.springframework.security.kerberos.web.authentication.SpnegoAuthenticationProcessingFilter] (default task-1) Negotiate Header was invalid: Negotiate TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAKAGNFAAAADw==: org.springframework.security.authentication.BadCredentialsException: Kerberos validation not successful ... Caused by: java.security.PrivilegedActionException: GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag) at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.8.0_211] at javax.security.auth.Subject.doAs(Subject.java:422) [rt.jar:1.8.0_211] at org.springframework.security.kerberos.authentication.sun.SunJaasKerberosTicketValidator.validateTicket(SunJaasKerberosTicketValidator.java:68) [spring-security-kerberos-core-1.0.1.RELEASE.jar:1.0.1.RELEASE] ... 66 more Caused by: GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag) at sun.security.jgss.GSSHeader.(GSSHeader.java:97) [rt.jar:1.8.0_211] at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:306) [rt.jar:1.8.0_211] at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:285) [rt.jar:1.8.0_211] at org.springframework.security.kerberos.authentication.sun.SunJaasKerberosTicketValidatorKerberosValidateAction.run(SunJaasKerberosTicketValidator.java:170) [spring-security-kerberos-core-1.0.1.RELEASE.jar:1.0.1.RELEASE] at org.springframework.security.kerberos.authentication.sun.SunJaasKerberosTicketValidatorKerberosValidateAction.run(SunJaasKerberosTicketValidator.java:153) [spring-security-kerberos-core-1.0.1.RELEASE.jar:1.0.1.RELEASE] ... 69 moreнеобходимо проверить правильность указанного в standalone.xml principal-а.
Комбинации нескольких способов аутентификации
Приложение может обрабатывать запросы на несколько способов аутентификации. Для этого необходимо переичислить нужные профили через запятую. Примеры:
<property name="authentication.method" value="form,cert_over_db"/>
<property name="authentication.method" value="form,cert_over_ldap"/>
<property name="authentication.method" value="kerberos,cert_over_db"/>
<property name="authentication.method" value="kerberos,cert_over_ldap"/>
Время жизни токенов аутентификации
<property name="webbpm.security.access_token.duration.minutes" value="60"/>
<property name="webbpm.security.refresh_token.duration.days" value="30"/>
<property name="webbpm.security.session.active.count" value="2"/>
webbpm.security.access_token.duration.minutes - опциональный параметр (значение по умолчанию 60), время жизни в минутах, сколько будет действителен токен, после истечения этого времени токен будет обновлён webbpm.security.refresh_token.duration.days - опциональный параметр (значение по умолчанию 30), время жизни в днях, после истечения этого времени с последнего обновления, пользователю будет необходимо повторно войти webbpm.security.session.active.count - опциональный параметр (значение по умолчанию 1), количество сохраняемых в базу токенов обновления (количество активных сессий)
Примечания.
- Нельзя использовать одновременно профили cert_over_db c cert_over_ldap и kerberos с form.
Синхронизация пользователей с LDAP
<property name="ldap.auto.sync.enabled" value="true"/>
<property name="ldap.synchronizer.cron" value="0 0 * * * *"/>
<property name="ldap.url" value="ldap://localhost:389"/>
<property name="ldap.base" value="dc=alt,dc=dom"/>
<property name="ldap.username" value="uid=test,ou=People,dc=alt,dc=dom"/>
<property name="ldap.password" value="password"/>
<property name="webbpm.ldap.implementation" value="open-ldap"/>
Настройки подключения к LDAP:
ldap.auto.sync.enabled- включает/отключает автоматическую синхронизацию с LDAPldap.synchronizer.cron- cron расписание автоматической синхронизации с LDAPldap.url. Пример - ldap://localhost:389ldap.base. Пример - dc=alt,dc=domldap.username. Пример - uid=test,ou=People,dc=alt,dc=domldap.passwordwebbpm.ldap.implementation. Допускается два значения: open-ldap и active-directory.
WEBGUARD
Для синхронизации пользователей в WEBGUARD и для корректной работы админки необходимо указать настройки соединения к REST API WEBGUARD
<property name="webguard.url" value="http://wg-host:8081/security-manager"/>
<property name="webguard.user.login" value="wg-user"/>
<property name="webguard.user.password" value="wg-password"/>
Статистика
jbpm hibernate statistics
Статистика hibernate jbpm доступна по jmx по пути org.hibernate:type=Stats,name=jbpm.
Полный список параметров можно посмотреть через jconsole.
По умолчанию включена, отключить можно настройкой webbpm.jbpm.hibernate_statistics.enabled:
<property name="webbpm.jbpm.hibernate_statistics.enabled" value="false"/>
Schedulers по очистке базы jbpm.
-
Очистка таблиц аудита от завершенных процессов по истечении таймаута
webbpm.jbpm.finished_process_cleaner_cron- задает расписание (spring cron), если настройка не задана - джоб не запускаетсяwebbpm.jbpm.finished_process_cleaner_timeout- таймаут в часах (целое числовое значение)
Пример:
<property name="webbpm.jbpm.finished_process_cleaner_cron" value="0 * * * * *"/> <property name="webbpm.jbpm.finished_process_cleaner_timeout" value="2"/>Ограничения для запросов БД.
-
webbpm.db.query_limit_enabled- флаг, отвечающий за вывод сообщений о превышении лимитов на количество возвращаемых записей. По умолчанию - false. -
webbpm.db.select_records_max_limit- максимальный лимит возвращаемых строк для запросов в БД, при превышении/равенстве данного лимита будет выброшена ошибка (целое числовое значение). По умолчанию - 100000 -
webbpm.db.select_records_min_limit- минимальный лимит возвращаемых строк для запросов в БД, при превышении/равенстве данного лимита в логи будет выведен warning (целое числовое значение). По умолчанию - 1000 -
webbpm.db.execution_time_threshold. The threshold for time of executing a statement. Система выводит сообщение в логи при превышении. Действует для запросов, созданных в jOOQ. По умолчанию - 1000 миллисекунд -
webbpm.db.result_read_time_threshold. The threshold for time of fetching a set of records from a ResultSet. . Система выводит сообщение в логи при превышении. Действует для запросов, созданных в jOOQ. По умолчанию - 50 миллисекунд -
webbpm.db.results_count_threshold. Система выводит сообщение в логи при превышении. Действует для запросов, созданных в jOOQ. По умолчанию - 1000 записей -
webbpm.db.full_time_threshold. Ограничение на полное время выполнения запроса. Система выводит сообщение в логи при превышении. Действует для запросов, созданных в jOOQ. По умолчанию sum(webbpm.db.result_read_time_threshold, webbpm.db.execution_time_threshold) миллисекунд -
webbpm.db.query_timeout. Ограничение на время выполнения запроса. При превышении запрос будет отклонен. Действует для запросов, созданных в jOOQ в dev режиме. По умолчанию 120 секунд.
Пример:
<property name="webbpm.db.query_limit_enabled" value="false"/>
<property name="webbpm.db.select_records_max_limit" value="100000"/>
<property name="webbpm.db.select_records_min_limit" value="1000"/>
<property name="webbpm.db.execution_time_threshold" value="1000"/>
<property name="webbpm.db.results_count_threhold" value="50"/>
<property name="webbpm.db.result_read_time_threshold" value="50"/>
<property name="webbpm.db.full_time_threshold" value="300"/>
<property name="webbpm.db.query_timeout" value="120"/>
Добавление версии приложения в URL при запросах к backend-у
При сборке приложения с профилем enable-version-in-url в URL будет добавляться версия приложения, указанная в pom.xml.
Шаблон URL:
<protocol>//<hostname>:<port>/backend<app-version>/<some-controller>
Включение регистрации пользователя
- Укажите конфигурацию почтового сервера для отправки писем с подтверждением регистрации. Для этого в файле проекта jndi-resources.xml добавьте ресурс SmtpConfiguration. Шаблон:
<jndi-resource name="java:comp/env/webbpm/testResource" type="bpmn.handler.common.SmtpConfiguration">{"host":"host","port":1234,"login":"user","password":"password","from":"email_from","senderName":"sender_name","isSecured":true}</jndi-resource>
Почтовый сервер - зарегистрированный актуальный почтовый адрес. В поле password нужно указывать не пароль для входа в почту, а создать пароль для приложений в учетке почты и указать его. 2. Для включения регистрации добавьте в standalone.xml свойство
<property name="registration.enabled" value="true"/>
- Также в standalone.xml укажите ресурс для отправки писем для подтверждения регистрации (из п.1)
<property name="mail.jndi.resource.name" value="java:comp/env/webbpm/testResource"/>
-
При необходимости, отредактируйте шаблон письма для подтверждения регистрации (resources/src/main/resources/mail/confirmation.html)
-
При необходимости, отредактируйте шаблон письма для восстановления пароля (resources/src/main/resources/mail/reset_password.html)
Настройка браузера для входа в систему с помощью Kerberos
- Запустите браузер firefox.
- В адресной строке введите about:config, нажать кнопку "я принимаю на себя риск"
- С помощью поиска найдите параметр network.negotiate-auth.trusted-uris и в качестве значения ввести домен(например для домена example.com надо ввести .example.com)
- Откройте в браузере приложение. Пример http://app.example.com/ . Приложение должно открыться без запроса логина/пароля
Восстановление структуры БД
На основе БД проекта с помощью jOOQ генерируются Java классы для каждого объекта БД. Это происходит по нажатию кнопки Обновить на панели БД в студии. При необходимости можно сформировать DDL на основе данных классов. Пример класса для генерации DDL
package ru.cg.webbpm.test_project.db_beans;
import org.jooq.*;
import org.jooq.impl.*;
public class Main {
public static void main (String args []) {
DefaultConfiguration defaultConfiguration = new DefaultConfiguration();
defaultConfiguration.setSQLDialect(SQLDialect.POSTGRES);
Queries ddl = DSL.using(defaultConfiguration).ddl(DefaultCatalog.DEFAULT_CATALOG);
for (Query query : ddl.queries()) {
System.out.println(query);
}
}
}
** ВНИМАНИЕ: **
- этим способом нельзя восстановить функции/процедуры БД
см. также Generating DDL from objects
Распределенный кэш (Hazelcast)
В платформе подключен кэш. Он используется для подсчёта количества пользователей и кэширования подсистемы безопасности
webbpm.cache.hazelcast.port- входящий порт hazelcast. по дефолту 5701.- Обязательное задать одно из двух следующих параметров
webbpm.cache.hazelcast.hosts- список хостов серверов приложений. webbpm.cache.hazelcast.hosts = hostname1,hostname2,hostname3webbpm.cache.hazelcast.kubernetes.service_name- имя сервиса в среде kubernetes, используемый для обнаружения других подов. Подходит как стратегия обнаружения, если используется kubernetes
webbpm.cache.hazelcast.outbound_port_definitions- исходящие порты hazelcast. по дефолту не задано, система сама выбирает свободные порты. Задать диапазон 5801 - 5820webbpm.cache.hazelcast.backup_count. Нужны чтобы когда сервер выключается был доступен бекап. Если предполагается выключать несколько серверов за раз, то нужно увеличить. Данный бекап делает копии синхронно с основной записью и операция записи ждет пока будет записана везде. Можно делать бекап асинхронно, настраивается через async_backup_count подробнее про бекапы Hazelcast IMDG Reference Manual . по дефолту 1webbpm.cache.hazelcast.async_backup_countwebbpm.cache.hazelcast.public_addresswebbpm.cache.hazelcast.interfaces
Пример конфигурации:
<property name="webbpm.cache.hazelcast.hosts" value="app1,app2"/>
<property name="webbpm.cache.hazelcast.outbound_port_definitions" value="5801-5820"/>`
Подключение компоненты адреса в режиме ГАР (Государственный адресный реестр)
Необходимо задать параметры:
gar.enable- флаг, который включает/отключает сервис для работы с ГАР. Должен быть задан для работы компоненты в режиме ГАР. По умолчанию true, для отключения задать false.gar.elastic.url.host- хост на котором развернут elasticsearch.gar.elastic.password- пароль для аутентификации elasticsearch.
Дополнительные параметры:
gar.elastic.url.port- порт на котором развернут elasticsearch.gar.elastic.username- логин для аутентификации elasticsearch.
Пример конфигурации:
<property name="gar.enable" value="true"/>
<property name="gar.elastic.url.host" value="localhost"/>
<property name="gar.elastic.password" value="password"/>
Метрики
Отчет
Отчет собирается раз в 30 секунд по дефолту, меняется параметром webbpm.metrics.report_period_ms.
Все метрики идут за отчетный период, после сбора отчета они сбрасываются.
Получить json со всеми метриками можно по урлу backend/metrics/v1/all - метрики будут с последнего собранного отчета, запрос не триггерит сбор отчета - это независимые операции. Отчет содержит только метрики по которым был совершен хотя бы один вызов в отчетный период. То есть, если какая-то операция не была совершена в отчетный период, то соответствующая ей метрика не попадет в отчет - ее не будет в json.
Значения метрик
Все метрики идут за отчетный период, после сбора отчета они сбрасываются.
Нас в основном интересуют callsCountSum, latencyMin, latencyAvg, latencyMax
callsCountSum- количество завершенных вызововlatencyMin- минимальное время выполненияlatencyAvg- среднее время выполненияlatencyMax- максимальное время выполненияactiveCallsCountMax- количество начатых, но еще не завершенных вызовов.activeCallsLatencyMax- длительность самого долгого еще не завершенного вызова
Текущие метрики приложения
-
Получение коннекта из пула
webbpm.jbpm.db.connection.acquirewebbpm.security.db.connection.acquirewebbpm.db.connection.acquire
-
Время с момента получения коннекта до возврата его в пул
webbpm.jbpm.db.connection.in_usewebbpm.security.db.connection.in_usewebbpm.db.connection.in_use
-
Время выполнения запроса на бд проекта
webbpm.db.query.success.execution_time
-
Время выполнения запроса на бд проекта + время получения коннекта из пула
webbpm.db.query.success.full_time
-
active-users-count.indicatorMax
-
active-users-count-ttl.indicatorMax
Количество пользователей
-
webbpm.active_users_counter.enabled- включает подсчет пользователей, нужно чтобы не запускать hazelcast на дев машинах. по дефолту false. На боевых серверах необходимо установить в true. -
webbpm.active_users_counter.max_time_between_operations_in_seconds- время, которое пользователь считается активным после действия. по дефолту 15 минут. -
webbpm.active_users_counter.hazelcast.app_pool_size. Запись в hazelcast производится асинхронно в отдельном пуле, не блокируя обработку http запроса. Это размер этого пула. по дефолту 4. Можно пока оставить 4 и последить за метриками pool.hazelcast-executor.queue.indicatorMax и pool.hazelcast-executor.activeThreads.indicatorMax. Если очередь будет сильно копиться, то увеличить.
Настройка логов
Все настройки делаются в файле standalone.xml, если не указано иначе.
Общие настройки
Платформа Web-bpm использует корневую категорию логирования ru.cg.webbpm, рекомендуется выставлять ее в уровень info. todo check prod config
<logger category="ru.cg.webbpm">
<level name="INFO"/>
</logger>
При этом компоненты используемые в проекте могут использовать другие категории.
Параметры конфигурации
Рекомендованное использование: всегда в info.
Все параметры конфигурации загружаемые платформой web-bpm и пользовательским приложением через api webbpm логируются категорией ru.cg.webbpm.modules.core.app_info.api.property.BaseProperty. Она всегда должна быть выставлена в info.
Пример вывода:
2017-12-04 16:02:19,074 INFO [ru.cg.webbpm.modules.core.app_info.api.property.BaseProperty] (EclipseGeminiBlueprintExtenderThread-1) System property [webbpm.active_users_counter.enabled] not set. Using default value [false]
2017-12-04 16:02:19,074 INFO [ru.cg.webbpm.modules.core.app_info.api.property.BaseProperty] (EclipseGeminiBlueprintExtenderThread-1) System property [webbpm.active_users_counter.hazelcast.hosts] set to [127.0.0.1]
БД проекта
Логирование запросов в бд security и бд проекта
Рекомендованное использование: только при разработке.
Использовать только при разработке. Категория org.jooq.tools.LoggerListener в debug уровень.
<logger category="org.jooq.tools.LoggerListener">
<level name="DEBUG"/>
</logger>
Пример вывода:
2017-12-04 18:21:10,391 DEBUG [org.jooq.tools.LoggerListener] (default task-19) Executing query : select "department"."department_name", "department"."department_id", "department"."parent_department_id", "department"."parent_department_id", "department"."department_id", (select (count(*) <> ?) from "public"."department" as "$$child" where "$$child"."parent_department_id" = "department"."department_id") as "$$hasChildren" from "public"."department" as "department" limit ?
2017-12-04 18:21:10,395 DEBUG [org.jooq.tools.LoggerListener] (default task-19) -> with bind values : select "department"."department_name", "department"."department_id", "department"."parent_department_id", "department"."parent_department_id", "department"."department_id", (select (count(*) <> 0) from "public"."department" as "$$child" where "$$child"."parent_department_id" = "department"."department_id") as "$$hasChildren" from "public"."department" as "department" limit 2147483647
2017-12-04 18:21:10,568 DEBUG [org.jooq.tools.LoggerListener] (default task-19) Fetched result : +-----------------+-------------+--------------------+--------------------+-------------+-------------+
2017-12-04 18:21:10,568 DEBUG [org.jooq.tools.LoggerListener] (default task-19) : |department_name |department_id|parent_department_id|parent_department_id|department_id|$$hasChildren|
2017-12-04 18:21:10,568 DEBUG [org.jooq.tools.LoggerListener] (default task-19) : +-----------------+-------------+--------------------+--------------------+-------------+-------------+
2017-12-04 18:21:10,568 DEBUG [org.jooq.tools.LoggerListener] (default task-19) : |Головной офис 1 | 8| {null}| {null}| 8|true |
2017-12-04 18:21:10,568 DEBUG [org.jooq.tools.LoggerListener] (default task-19) : |Головной офис 2 | 9| {null}| {null}| 9|true |
2017-12-04 18:21:10,568 DEBUG [org.jooq.tools.LoggerListener] (default task-19) : |Головной офис 3 | 10| {null}| {null}| 10|true |
2017-12-04 18:21:10,568 DEBUG [org.jooq.tools.LoggerListener] (default task-19) : |Подразделение 1.1| 11| 8| 8| 11|true |
2017-12-04 18:21:10,568 DEBUG [org.jooq.tools.LoggerListener] (default task-19) : |Подразделение 1.2| 12| 8| 8| 12|true |
2017-12-04 18:21:10,568 DEBUG [org.jooq.tools.LoggerListener] (default task-19) : +-----------------+-------------+--------------------+--------------------+-------------+-------------+
2017-12-04 18:21:10,568 DEBUG [org.jooq.tools.LoggerListener] (default task-19) : |...55 record(s) truncated...
Логирование больших запросов
Рекомендованное использование: всегда в info, с подобранными для проекта значениями. В проде значения должны быть проверены что они не вызывают излишнее логирование.
-
Для отслеживания больших запросов в пользовательскую базу нужно задать параметры что считать большими запросами, логироваться будут запросы больше заданных показателей. Чтобы логировать все запросы можно задать значение
-1. Добавляются как property в разделsystem-properties:<property name="webbpm.db.full_time_threshold" value="1050"/> <property name="webbpm.db.results_count_threshold" value="1000"/>В
infoрежиме работают:webbpm.db.full_time_threshold- полное время выполнения запроса в миллисекундах. Включает построение запроса библиотекой, выполнение и загрузку результатов. Пример сообщения2023-01-11 13:09:38,361 WARN [ru.cg.webbpm.modules.database.impl.analytics.PerformanceListener] (default task-33) Query full time threshold exceeded. full_time=[6565ms] execution_time=[6565ms] read_time=[0ms] results_count=[4] query=[<your query>]webbpm.db.results_count_threshold- количество записей, которое вернул запрос. Пример сообщения2023-01-11 13:10:34,088 WARN [ru.cg.webbpm.modules.database.impl.analytics.PerformanceListener] (default task-41) Query results count threshold exceeded. results_count=[11177] query=[<your query>]
В
debugрежиме дополнительно к работающим в info:webbpm.db.execution_time_threshold- время выполнения запроса + построения запроса библиотекой.webbpm.db.result_read_time_threshold- время чтения результатов запроса
-
После задания настроек нужно настроить логирование - категория
ru.cg.webbpm.modules.database.impl.analytics.PerformanceListener, уровеньinfoилиdebug.<logger category="ru.cg.webbpm.modules.database.impl.analytics.PerformanceListener"> <level name="INFO"/> </logger>
JBPM
Основные настройки
JBPM использует 3 корневых категории логирования – org.jbpm, org.drools, org.kie. Все они должны быть выставлены в warn.
<logger category="org.jbpm">
<level name="WARN"/>
</logger>
<logger category="org.drools">
<level name="WARN"/>
</logger>
<logger category="org.kie">
<level name="WARN"/>
</logger>
Логирование запросов в БД
Рекомендованное использование: только при разработке.
Для логирования sql запросов нужно включить категорию org.hibernate.SQL в debug:
<logger category="org.hibernate.SQL">
<level name="DEBUG"/>
</logger>
Чтобы вывести параметры запросов и результат выполнения – категорию org.hibernate.type.descriptor.sql в trace:
<logger category="org.hibernate.type.descriptor.sql">
<level name="TRACE"/>
</logger>
Пример вывода:
18:21:06,938 DEBUG [org.hibernate.SQL] (default task-47) select names0_.Task_Names_Id as Task_Nam7_16_0_, names0_.id as id1_16_0_, names0_.id as id1_16_1_, names0_.language as language2_16_1_, names0_.shortText as shortTex3_16_1_, names0_.text as text4_16_1_ from I18NText names0_ where names0_.Task_Names_Id=?
18:21:06,939 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] (default task-47) binding parameter [1] as [BIGINT] - [180]
18:21:06,940 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] (default task-47) extracted value ([id1_16_1_] : [BIGINT]) - [539]
18:21:06,940 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] (default task-47) extracted value ([language2_16_1_] : [VARCHAR]) - [en-UK]
18:21:06,940 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] (default task-47) extracted value ([shortTex3_16_1_] : [VARCHAR]) - [Список записей]
18:21:06,941 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] (default task-47) extracted value ([text4_16_1_] : [CLOB]) - [Список записей]
18:21:06,941 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] (default task-47) extracted value ([Task_Nam7_16_0_] : [BIGINT]) - [180]
18:21:06,942 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] (default task-47) extracted value ([id1_16_0_] : [BIGINT]) - [539]
Дополнительные логи hibernate
Рекомендованное использование: только при разработке в случае необходимости.
-
Время выполнения запроса и количество результатов.
Включаются категорией
org.hibernate.statвdebug. При этом в hibernate должен быть включен сбор статистики. Похоже что логируется только hql select запросов.<logger category="org.hibernate.stat"> <level name="DEBUG"/> </logger>Пример вывода:
18:21:06,858 DEBUG [org.hibernate.stat.internal.ConcurrentStatisticsImpl] (default task-41) HHH000117: HQL: select t from AuditTaskImpl t where t.taskId = :taskId, time: 6ms, rows: 1 -
Показатели hibernate сессий
Включаются категорией
org.hibernate.engine.internal.StatisticalLoggingSessionEventListenerвinfo. При этом в hibernate должен быть включен сбор статистики. Тут может быть интересно количество запросов, флашей и общее время на все запросы сессией.Пример вывода:
2017-12-04 17:25:58,493 INFO [org.hibernate.engine.internal.StatisticalLoggingSessionEventListener] (default task-21) Session Metrics { 63408365 nanoseconds spent acquiring 17 JDBC connections; 521509 nanoseconds spent releasing 17 JDBC connections; 65732621 nanoseconds spent preparing 17 JDBC statements; 31471897 nanoseconds spent executing 17 JDBC statements; 0 nanoseconds spent executing 0 JDBC batches; 0 nanoseconds spent performing 0 L2C puts; 0 nanoseconds spent performing 0 L2C hits; 0 nanoseconds spent performing 0 L2C misses; 297556 nanoseconds spent executing 1 flushes (flushing a total of 16 entities and 0 collections); 430168 nanoseconds spent executing 1 partial-flushes (flushing a total of 16 entities and 16 collections) }
Логирование hbm2ddl
Рекомендованное использование: всегда в trace.
Должно быть включено всегда. Позволяет убедиться что hibernate не накатывал никакие миграции на базу. Этот функционал отключен у нас в коде.
<logger category="org.hibernate.tool.hbm2ddl">
<level name="TRACE"/>
</logger>
Взаимодействие с ЕСНСИ в части получения справочника ОКОПФ
Свойства задаются в файле config/standalone/dev/standalone.xml
Параметры
esnsi.okopf.url- url который обращается к еснси для получения справочника и скачивает данные спровочников организации в виде заархивированного json файла.esnsi.okopf.cron.load- настройка, которая указывет расписание для загрузки справочника окопф и сохранение данных по справкам в БД
Описание параметров конфигурации клиентской части
Свойства задаются в файле frontend/src/resources/app-config.json или frontend.war/src/resources/app-config.json
Общие
dev_mode- настройка задающая dev_mode для просмотра логов (true/false). При отсутствие оставляет значение при сборкеguard.confirm_exit- выводить или нет диалог подтверждения, если обнаружены несохраненные данные в форме. Значение по умолчанию - false.password.pattern- Регулярное выражение для валидации пароля.password_pattern_error- Сообщение об ошибке валидации.show.client.errors- отвечает за отображение ошибок javascript-a пользователю (должна использоваться только в тестовых контурах) по умолчанию выключена- 'available_task.single_fetch' - Отвечает за количество запросов available_task при завершении процесса. true - одиночный запрос, false/не указано - 10 запросов(старая реализация).
Вывод сообщений
message_service_error_timeoutвремя в мс, в течение которого будет отображено сообщение об ошибке. Значение по умолчанию - таймаут не задан (окно не закрывается).message_service_warning_timeoutвремя в мс, в течение которого будет отображено предупреждающее сообщение. Значение по умолчанию - таймаут не задан (окно не закрывается).message_service_success_timeoutвремя в мс, в течение которого будет отображено сообщение об успехе. Значение по умолчанию - таймаут не задан (окно не закрывается).message_service_info_timeoutвремя в мс, в течение которого будет отображено информационное сообщение. Значение по умолчанию - таймаут не задан (окно не закрывается).
Электронная подпись
Esmart
electronic_sign.esmart_extension_url- url для создания расширенной подписи. Подробная информация по ссылке http://demo.esmart.ruelectronic_sign.tsp_address- адрес сервера службы штампов времени
Пример:
"electronic_sign.esmart_extension_url": "http://dsig.ibsdemo.ru/ibs_dsig/ibs_dSig.asmx"
Способ аутентификации
auth_method- способ аутентификации. Может принимать одно значение из списка: form, kerberos, cert_over_db, cert_over_ldap
Таймер очистки закешированных значений фильтров
filter_cleanup_interval_hours- время жизни закешированного значения фильтра в часах. По умолчанию - 720 часов,filter_cleanup_check_period_minutes- период проверки наличия просроченных закешированных значений в минутах. По умолчанию - 30 минут
Добавление версии приложения в URL при запросах к frontend-у
В модуле frontend в src/resources/app-config.json добавлены 2 переменные
"enable.version.in.url": "%enable.version.in.url%"- подставлять ли версию в URL приложения. По умолчанию false. Если сборка произведена"app.version": "%project.version%"- версия приложения.
с профилемenable-version-in-url, то значение будет true.
Добавление Jivo чат в проект
Свойства задаются в файле frontend/src/resources/app-config.json или frontend.war/src/resources/app-config.json
jivo_chat_widget_api_url- API url для работы Jivo чата. Необходимо заменить {WIDGET_ID} на реальный Widget API IDjivo_chat_widget_enabled- параметр отвечающий за активацию Jivo чата. По дефолту false, для активации задать true.
Пример:
"jivo_chat_widget_api_url": "https://code.jivo.ru/widget/{WIDGET_ID}",
"jivo_chat_widget_enabled": false
Прочее
Смена удалённого репозитория
- Смените адрес NPM registry в файле frontend.npmrc. Пример - registry=https://repo.example.com/repository/npm-all/
- Поменяйте ссылки в блоке , файла pom.xml