В состав SoftWLC включен WEB-портал, с помощью которого реализуется модель авторизации hotspot-клиентов. Неизвестный системе пользователь может свободно (без получения заранее логина и пароля) подключиться к точке доступа, но при попытке выйти в интернет через браузер пользователь перенаправляется на страницу WEB-портала, на которой может по выбору пройти процедуру авторизации или получения данных для авторизации (например, с помощью SMS). В процессе выполнения процедуры авторизации абонент может наблюдать рекламные сообщения в виде баннеров, кастомизированных в соответствии с требованиями оператора.
Данный сервис используется для отображения страниц виртуальных порталов и проведения регистрации и авторизации пользователей Wi-Fi, подключающихся к точкам доступа Eltex или при помощи ESR/BRAS.
Во время инициализации сервиса eltex-portal и до полной его загрузки, вместо портала будет отображаться страница "Warming up", что свидетельствует о том, что портал еще в процессе инициализации, а модули сервиса находятся в процессе конфигурации. После того как сервис eltex-portal полностью загрузился, будет произведен автоматический редирект пользователя на главную страницу портала.
Пример страницы инициализации портала:
apt-get install eltex-portal |
| Действие | Команда | Ответ | |||||
|---|---|---|---|---|---|---|---|
| Проверка состояния |
|
| |||||
| Запуск сервиса |
|
| |||||
| Остановка сервиса |
|
| |||||
| Перезапуск сервиса |
|
|
Чтобы сервис eltex-portal получил доступ для работы с БД MariaDB необходимо создать пользователя.
eltex-potal create-db-user -h <server_ip> |
При выполнении данной команды происходит подключение к БД и создание пользователя указанного в настройка конфигурационного файла /etc/eltex-portal-constructor/application.conf
Cодержит основные настройки сервиса:
portal {
defaultRedirectUrl = "http://eltex-co.ru"
# If set to 'true', an authentication URL will be shortened when proxy-server detected
shortenAuthUrlOnProxy = true
scheduler {
tariffCheckerPeriod = 1d
promoBindingsCleaner {
period = 1d
bindingsLifetime = 5d
}
paymentsCleanerPeriod = "0 0 * * * ?"
}
}
jetty {
http.port = 9000
https {
port = 9443
keystorePass = 12345
keystoreFile = /etc/eltex-portal/localhost.pfx
keystoreType = PKCS12
keyAlias = 1
ciphers = [
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
]
}
}
database {
host = localhost
port = 3306
name = ELTEX_PORTAL
user = javauser
password = javapassword
pool {
# Time to wait for a connection
connectionTimeout = 10s
# Time to wait for connection validation
validationTimeout = 3s
min = 1
max = 10
}
cache {
# Limit of cached simple entries count (for each query type)
maxEntries = 1000
# Limit of total cached portal resources size
maxResourceBytes = 32m
# Maximum time to retain items in the cache
expireTime = 2m
}
}
jdbc {
properties {
useSSL = false
}
}
}
// JWT validation. You need a key from Eltex Doors.
// Or you could generate it yourself.
validation {
public_key = "etc/eltex-doors/keys/public.pem"
} |
| Параметры | Описание |
|---|---|
| portal | |
defaultRedirectUrl | Адрес, на который будет выполнено перенаправление пользователя, в случае необходимости перезапуска его сессии на портале. Должен быть настроен по протоколу http. |
tariffCheckerPeriod | Интервал выполнения проверки наличия тарифных планов на порталах. В случае отсутствия тарифного плана: формируется сообщение об ошибке. |
| promoBindingsCleaner | period - настройка периода проверки привязок, показанных баннеров клиенту. Указывается в минутах/часах/днях m/h/d bindingsLifetime - время жизни привязки, показанного баннера клиенту. Указывается в минутах/часах/днях m/h/d |
| paymentsCleanerPeriod | Период очистки записей о неуспешной оплате тарифа в БД портала. Указывается в формате cron. |
| jetty | |
| https | Настройки работы контейнера по https. Необходимо указать расположение сертификата, ключ и прослушиваемый порт. port - прослушиваемый порт keystorePass - ключ от хранилища сертификатов keystoreFile - файл хранилища, содержащий сертификат keystoreType - тип хранилища certAlias - алиас сертификата в хранилище ciphers - поддерживаемые методы шифрования |
| database | |
| host | Адрес сервера БД |
| port | Порт, на который сервер БД принимает входящее подключение |
| name | Название БД |
| user | Имя пользователя БД |
| password | Пароль пользователя БД |
| pool | Управление соединениями к БД connectionTimeout - Время жизни коннекта при бездействии validationTimeout - интервал проверки бездействующих коннектов min - минимальное количество коннектов max - максимальное количество коннектов |
| cache | Настройки кэширования maxEntries - максимальное количество элементов в кэше maxResourceBytes - размер кэша expireTime - время хранения данных в кэше |
| jdbc | Дополнительные настройки подключения к БД useSSL - включить/выключить SSL |
| validation | Подключение к сервису eltex-doors public_key - путь до ключа для валидации JWT |
Cодержит параметры, необходимые для инициализации сервиса.
# Eltex-Portal daemon parameters # Port for use by Eltex Portal PORT=9000 # Initial size of Java heap JAVA_INIT_HEAP=16m # Maximum size of Java heap JAVA_MAX_HEAP=256m # Additional arguments to pass to java JAVA_OPTS="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/eltex-portal" |
| Параметры | Описание |
|---|---|
PORT | Порт, на который сервис будет принимать соединения |
JAVA_INIT_HEAP | Количество памяти, выделяемое на работу сервиса при старте. Рекомендуется выставлять равное JAVA_MAX_HEAP. |
JAVA_MAX_HEAP | Максимальное количество памяти, которое может зарезервировать сервис |
JAVA_OPTS | Дополнительные опции для запуска jvm |
Содержит настройки логирования работы сервиса.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="10">
<Properties>
<Property name="rootLevel">${env:LOG_LEVEL:-ERROR}</Property>
<Property name="baseDir">/var/log/eltex-portal</Property>
<Property name="maxFileSize">20 MB</Property>
<Property name="accumulatedFileSize">10 GB</Property>
<Property name="lastModified">4d</Property>
<Property name="maxCount">20</Property>
<Property name="logPattern">%d{ISO8601} [%t] %-5p %logger{12} %C{1}.%M(line:%L). %m%n</Property>
<Property name="dateSuffix">%d{yyyyMMdd}</Property>
<Property name="gelfLevel">${env:GELF_LEVEL:-OFF}</Property>
<Property name="gelfHost">${env:GELF_HOST:-udp:lab3-test.eltex.loc}</Property>
<Property name="gelfPort">${env:GELF_PORT:-12201}</Property>
</Properties>
<Appenders>
<Console name="STDERR" target="System.err">
<PatternLayout pattern="${logPattern}"/>
</Console>
<RollingFile name="RollingFile"
fileName="${baseDir}/portal.log"
filePattern="${baseDir}/log/portal-%i.log.gz">
<PatternLayout pattern="${logPattern}"/>
<Policies>
<SizeBasedTriggeringPolicy size="${maxFileSize}"/>
<OnStartupTriggeringPolicy />
</Policies>
<DefaultRolloverStrategy max="${maxCount}">
<Delete basePath="${baseDir}" maxDepth="3">
<IfFileName glob="*/portal-*.log.gz">
<IfAny>
<IfAccumulatedFileSize exceeds="${accumulatedFileSize}"/>
<IfLastModified age="${lastModified}"/>
</IfAny>
</IfFileName>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<RollingFile name="AccessRollingFile"
fileName="${baseDir}/access.log"
filePattern="${baseDir}/access/access_${dateSuffix}.log">
<PatternLayout pattern="%m%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
<DefaultRolloverStrategy max="${maxCount}">
<Delete basePath="${baseDir}" maxDepth="3">
<IfFileName glob="*/access_*.log">
<IfAny>
<IfAccumulatedFileSize exceeds="${accumulatedFileSize}"/>
<IfLastModified age="${lastModified}"/>
</IfAny>
</IfFileName>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<RollingFile name="AuthRollingFile"
fileName="${baseDir}/auth.log"
filePattern="${baseDir}/auth/auth_${dateSuffix}.log">
<PatternLayout pattern="%d{ISO8601} %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
<DefaultRolloverStrategy max="${maxCount}">
<Delete basePath="${baseDir}" maxDepth="3">
<IfFileName glob="*/auth_*.log">
<IfAny>
<IfAccumulatedFileSize exceeds="${accumulatedFileSize}"/>
<IfLastModified age="${lastModified}"/>
</IfAny>
</IfFileName>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<Gelf name="Gelf" host="${gelfHost}" port="${gelfPort}" version="1.1" facility="eltex-portal"
extractStackTrace="true" originHost="%host{fqdn}" maximumMessageSize="8192" >
<Field name="thread" pattern="%t"/>
<Field name="level" pattern="%level"/>
<Field name="severity" pattern="%-5level"/>
<Field name="logger" pattern="%logger{12}"/>
<Field name="location" pattern="%C{1}.%M(line:%L)"/>
</Gelf>
</Appenders>
<Loggers>
<Root level="${rootLevel}">
<AppenderRef ref="RollingFile"/>
<AppenderRef ref="STDERR" level="OFF"/>
<AppenderRef ref="Gelf" level="${gelfLevel}"/>
</Root>
<Logger name="AccessLogger" additivity="false">
<AppenderRef ref="AccessRollingFile"/>
<!--"custom" for custom format with BRAS parameters and AP headers-->
<!--"default" for NCSA format-->
<Property name="format">default</Property>
<!--Customizable parts of the access log-->
<Property name="cookies">true</Property>
<Property name="headers">true</Property>
<Property name="bras">true</Property>
</Logger>
<Logger name="AuthLogger" additivity="false" level="INFO">
<AppenderRef ref="AuthRollingFile"/>
<AppenderRef ref="Gelf" level="${gelfLevel}"/>
</Logger>
<Logger name="org.springframework" level="ERROR"/>
<Logger name="org.eclipse.jetty" level="ERROR"/>
<Logger name="org.apache.tomcat" level="ERROR"/>
<logger name="io.grpc.netty" level="ERROR"/>
<Logger name="io.netty" level="ERROR"/>
<!--SQL logging-->
<Logger name="org.jooq.tools.LoggerListener" level="OFF"/>
<Logger name="jndi" level="OFF"/>
<Logger name="org.quartz" level="OFF"/>
<Logger name="com.zaxxer" level="OFF"/>
<Logger name="org.apache" level="OFF"/>
<Logger name="org.jooq.impl.DefaultConnectionProvider" level="OFF"/>
</Loggers>
</Configuration>
|
<Configuration monitorInterval="10"> |
<Property name="rootLevel">${env:LOG_LEVEL:-ERROR}</Property> |
<Property name="baseDir">/var/log/eltex-portal</Property> |
<Property name="maxFileSize">20 MB</Property> |
<Property name="accumulatedFileSize">10 GB</Property> |
<Property name="lastModified">4d</Property> |
<Property name="maxCount">20</Property> |
<Property name="gelfLevel">${env:GELF_LEVEL:-OFF}</Property>
<Property name="gelfHost">${env:GELF_HOST:-udp:lab3-test.eltex.loc}</Property>
<Property name="gelfPort">${env:GELF_PORT:-12201}</Property> |
Лог-файл: /var/log/eltex-portal/log_ep.txt
| Название | Значение | Пример |
|---|---|---|
| CHECK LOGIN AND PSW IN smsc_gate.conf | Проблема доступности NGW к сервису отправки SMS сообщений | 2018-08-22T09:38:56,420 [SimpleContainerScope.Executor@266376052-35] ERROR org.eltex.portal.sms.SendSmsWithPswResponseHandler SendSmsWithPswResponseHandler.onResult(line:53). Error while sending message on number: 79529056800. ErrorCode: 10, errMessage: 79529056800. Received error code = 1. CHECK LOGIN AND PSW IN smsc_gate.conf. Error in the parameters of function of dispatch sms via http protocol |
| NGW_NOT_AVAILABLE | Проблема доступности портала к сервису NGW | 2020-07-09T09:45:07,827 [qtp76432244-17] ERROR org.eltex.portal.sms.NotificationClient NotificationClient.getConfigurationInfo(line:527). Can`t connect to Ngw server with code: 1601 code 1601:NGW_NOT_AVAILABLE and reason: NgwException{FAILED: 'Protocol is not supported by the server: eltex-ngw-api#1.16.5'} |
Для мониторинга сервиса APB поддержаны совместимые с Prometheus метрики. Для просмотра списка метрик надо открыть в браузере:
http://<адрес сервера Eltex-portal>:9000/eltex_portal/api/metrics |
# HELP hikaricp_connections_active Active connections
# TYPE hikaricp_connections_active gauge
hikaricp_connections_active{application="Portal",pool="HikariPool-1",} 0.0
# HELP portal_authentication_started_total User authentication process started, by verification way
# TYPE portal_authentication_started_total counter
portal_authentication_started_total{application="Portal",verification_way="INBOUND_SMS",} 0.0
portal_authentication_started_total{application="Portal",verification_way="DEMO",} 5.0
portal_authentication_started_total{application="Portal",verification_way="PMS",} 3.0
portal_authentication_started_total{application="Portal",verification_way="ESIA",} 1.0
portal_authentication_started_total{application="Portal",verification_way="INBOUND_CALL",} 3.0
portal_authentication_started_total{application="Portal",verification_way="OUTBOUND_SMS",} 2.0
portal_authentication_started_total{application="Portal",verification_way="PASSWORD",} 1.0
portal_authentication_started_total{application="Portal",verification_way="FAN_ID",} 0.0
portal_authentication_started_total{application="Portal",verification_way="OUTBOUND_CALL",} 1.0
portal_authentication_started_total{application="Portal",verification_way="SATS",} 0.0
# HELP smart_service_response_total Counter of user that authorized in SMART application with http status 200 OK
# TYPE smart_service_response_total counter
smart_service_response_total{application="Portal",status="AUTHORIZED",} 0.0
smart_service_response_total{application="Portal",status="UNKNOWN",} 0.0
# HELP process_files_max_files The maximum file descriptor count
# TYPE process_files_max_files gauge
process_files_max_files{application="Portal",} 1048576.0
# HELP hikaricp_connections_usage_seconds Connection usage time
# TYPE hikaricp_connections_usage_seconds summary
hikaricp_connections_usage_seconds_count{application="Portal",pool="HikariPool-1",} 813.0
hikaricp_connections_usage_seconds_sum{application="Portal",pool="HikariPool-1",} 14.36
# HELP hikaricp_connections_usage_seconds_max Connection usage time
# TYPE hikaricp_connections_usage_seconds_max gauge
hikaricp_connections_usage_seconds_max{application="Portal",pool="HikariPool-1",} 0.0
# HELP spar_rest_template_seconds Timer of RestTemplate operation. Statistic expiry 5 m.
# TYPE spar_rest_template_seconds summary
spar_rest_template_seconds{application="Portal",method="POST",quantile="0.25",} 0.0
spar_rest_template_seconds{application="Portal",method="POST",quantile="0.5",} 0.0
spar_rest_template_seconds{application="Portal",method="POST",quantile="0.75",} 0.0
spar_rest_template_seconds{application="Portal",method="POST",quantile="0.95",} 0.0
spar_rest_template_seconds{application="Portal",method="POST",quantile="0.99",} 0.0
spar_rest_template_seconds_count{application="Portal",method="POST",} 1.0
spar_rest_template_seconds_sum{application="Portal",method="POST",} 0.583106492
# HELP spar_rest_template_seconds_max Timer of RestTemplate operation. Statistic expiry 5 m.
# TYPE spar_rest_template_seconds_max gauge
spar_rest_template_seconds_max{application="Portal",method="POST",} 0.583106492
# HELP spar_service_response_total Counter of user that authorized in SPAR application with http status 200 OK
# TYPE spar_service_response_total counter
spar_service_response_total{application="Portal",status="AUTHORIZED",} 0.0
spar_service_response_total{application="Portal",status="UNKNOWN",} 1.0
# HELP system_load_average_1m The sum of the number of runnable entities queued to available processors and the number of runnable entities running on the available processors averaged over a period of time
# TYPE system_load_average_1m gauge
system_load_average_1m{application="Portal",} 0.470703125
# HELP process_uptime_seconds The uptime of the Java virtual machine
# TYPE process_uptime_seconds gauge
process_uptime_seconds{application="Portal",} 182269.174
# HELP jvm_memory_used_bytes The amount of used memory
# TYPE jvm_memory_used_bytes gauge
jvm_memory_used_bytes{application="Portal",area="nonheap",id="Compressed Class Space",} 1.9394696E7
jvm_memory_used_bytes{application="Portal",area="nonheap",id="Code Cache",} 6.0316288E7
jvm_memory_used_bytes{application="Portal",area="nonheap",id="Metaspace",} 1.42699256E8
jvm_memory_used_bytes{application="Portal",area="heap",id="G1 Old Gen",} 1.31924072E8
jvm_memory_used_bytes{application="Portal",area="heap",id="G1 Eden Space",} 1.42606336E8
jvm_memory_used_bytes{application="Portal",area="heap",id="G1 Survivor Space",} 5242880.0
# HELP hikaricp_connections_creation_seconds_max Connection creation time
# TYPE hikaricp_connections_creation_seconds_max gauge
hikaricp_connections_creation_seconds_max{application="Portal",pool="HikariPool-1",} 0.0
# HELP hikaricp_connections_creation_seconds Connection creation time
# TYPE hikaricp_connections_creation_seconds summary
hikaricp_connections_creation_seconds_count{application="Portal",pool="HikariPool-1",} 211.0
hikaricp_connections_creation_seconds_sum{application="Portal",pool="HikariPool-1",} 221.242
# HELP portal_authentication_success_total User successfully authenticated, by verification way
# TYPE portal_authentication_success_total counter
portal_authentication_success_total{application="Portal",verification_way="INBOUND_SMS",} 0.0
portal_authentication_success_total{application="Portal",verification_way="DEMO",} 5.0
portal_authentication_success_total{application="Portal",verification_way="PMS",} 1.0
portal_authentication_success_total{application="Portal",verification_way="ESIA",} 0.0
portal_authentication_success_total{application="Portal",verification_way="INBOUND_CALL",} 2.0
portal_authentication_success_total{application="Portal",verification_way="OUTBOUND_SMS",} 2.0
portal_authentication_success_total{application="Portal",verification_way="PASSWORD",} 1.0
portal_authentication_success_total{application="Portal",verification_way="FAN_ID",} 0.0
portal_authentication_success_total{application="Portal",verification_way="OUTBOUND_CALL",} 1.0
portal_authentication_success_total{application="Portal",verification_way="SATS",} 0.0
# HELP portal_authorization_completed_total User authorized, by result status
# TYPE portal_authorization_completed_total counter
portal_authorization_completed_total{application="Portal",status="success",} 13.0
portal_authorization_completed_total{application="Portal",status="failed",} 0.0
# HELP hikaricp_connections_timeout_total Connection timeout total count
# TYPE hikaricp_connections_timeout_total counter
hikaricp_connections_timeout_total{application="Portal",pool="HikariPool-1",} 1.0
# HELP process_cpu_usage The "recent cpu usage" for the Java Virtual Machine process
# TYPE process_cpu_usage gauge
process_cpu_usage{application="Portal",} 0.0035629453681710215
# HELP portal_registration_process_total User registration process started
# TYPE portal_registration_process_total counter
portal_registration_process_total{application="Portal",} 11.0
# HELP process_start_time_seconds Start time of the process since unix epoch.
# TYPE process_start_time_seconds gauge
process_start_time_seconds{application="Portal",} 1.65588132082E9
# HELP hikaricp_connections_idle Idle connections
# TYPE hikaricp_connections_idle gauge
hikaricp_connections_idle{application="Portal",pool="HikariPool-1",} 1.0
# HELP jvm_buffer_total_capacity_bytes An estimate of the total capacity of the buffers in this pool
# TYPE jvm_buffer_total_capacity_bytes gauge
jvm_buffer_total_capacity_bytes{application="Portal",id="direct",} 791588.0
jvm_buffer_total_capacity_bytes{application="Portal",id="mapped",} 0.0
# HELP jvm_memory_committed_bytes The amount of memory in bytes that is committed for the Java virtual machine to use
# TYPE jvm_memory_committed_bytes gauge
jvm_memory_committed_bytes{application="Portal",area="nonheap",id="Compressed Class Space",} 2.0250624E7
jvm_memory_committed_bytes{application="Portal",area="nonheap",id="Code Cache",} 6.0751872E7
jvm_memory_committed_bytes{application="Portal",area="nonheap",id="Metaspace",} 1.47390464E8
jvm_memory_committed_bytes{application="Portal",area="heap",id="G1 Old Gen",} 1.98180864E8
jvm_memory_committed_bytes{application="Portal",area="heap",id="G1 Eden Space",} 3.33447168E8
jvm_memory_committed_bytes{application="Portal",area="heap",id="G1 Survivor Space",} 5242880.0
# HELP jvm_buffer_count_buffers An estimate of the number of buffers in the pool
# TYPE jvm_buffer_count_buffers gauge
jvm_buffer_count_buffers{application="Portal",id="direct",} 60.0
jvm_buffer_count_buffers{application="Portal",id="mapped",} 0.0
# HELP jvm_buffer_memory_used_bytes An estimate of the memory that the Java virtual machine is using for this buffer pool
# TYPE jvm_buffer_memory_used_bytes gauge
jvm_buffer_memory_used_bytes{application="Portal",id="direct",} 791589.0
jvm_buffer_memory_used_bytes{application="Portal",id="mapped",} 0.0
# HELP system_cpu_usage The "recent cpu usage" for the whole system
# TYPE system_cpu_usage gauge
system_cpu_usage{application="Portal",} 0.0855106888361045
# HELP jvm_threads_states_threads The current number of threads having NEW state
# TYPE jvm_threads_states_threads gauge
jvm_threads_states_threads{application="Portal",state="waiting",} 6.0
jvm_threads_states_threads{application="Portal",state="blocked",} 0.0
jvm_threads_states_threads{application="Portal",state="timed-waiting",} 21.0
jvm_threads_states_threads{application="Portal",state="runnable",} 9.0
jvm_threads_states_threads{application="Portal",state="terminated",} 0.0
jvm_threads_states_threads{application="Portal",state="new",} 0.0
# HELP process_files_open_files The open file descriptor count
# TYPE process_files_open_files gauge
process_files_open_files{application="Portal",} 63.0
# HELP spar_rest_template_total Counter of response status code
# TYPE spar_rest_template_total counter
spar_rest_template_total{application="Portal",status="200",} 1.0
# HELP hikaricp_connections_min Min connections
# TYPE hikaricp_connections_min gauge
hikaricp_connections_min{application="Portal",pool="HikariPool-1",} 1.0
# HELP jvm_threads_daemon_threads The current number of live daemon threads
# TYPE jvm_threads_daemon_threads gauge
jvm_threads_daemon_threads{application="Portal",} 18.0
# HELP hikaricp_connections_max Max connections
# TYPE hikaricp_connections_max gauge
hikaricp_connections_max{application="Portal",pool="HikariPool-1",} 10.0
# HELP jvm_threads_live_threads The current number of live threads including both daemon and non-daemon threads
# TYPE jvm_threads_live_threads gauge
jvm_threads_live_threads{application="Portal",} 36.0
# HELP cache_hitRate The cache hit rate
# TYPE cache_hitRate gauge
cache_hitRate{application="Portal",cache="cssCache",} 1.0
cache_hitRate{application="Portal",cache="satsMacCache",} 1.0
cache_hitRate{application="Portal",cache="accessListsCache",} 1.0
cache_hitRate{application="Portal",cache="incomingEventsCache",} 0.25
cache_hitRate{application="Portal",cache="internalRedirectCache",} 1.0
cache_hitRate{application="Portal",cache="chargeCache",} 1.0
cache_hitRate{application="Portal",cache="outgoingSmsCache",} 0.8666666666666667
cache_hitRate{application="Portal",cache="pcrfUserCache",} 0.4
cache_hitRate{application="Portal",cache="brasSessionStatusCache",} 0.75
cache_hitRate{application="Portal",cache="ssidCache",} 0.9384615384615385
cache_hitRate{application="Portal",cache="mercuryUserCache",} 0.48717948717948717
cache_hitRate{application="Portal",cache="authCache",} 0.7521865889212828
cache_hitRate{application="Portal",cache="brasSessionsCache",} 1.0
cache_hitRate{application="Portal",cache="preAuthCache",} 0.8333333333333334
cache_hitRate{application="Portal",cache="tariffsCache",} 0.7619047619047619
cache_hitRate{application="Portal",cache="attemptsCache",} 0.5
cache_hitRate{application="Portal",cache="domainTimezoneCache",} 0.9194630872483222
# HELP jvm_memory_max_bytes The maximum amount of memory in bytes that can be used for memory management
# TYPE jvm_memory_max_bytes gauge
jvm_memory_max_bytes{application="Portal",area="nonheap",id="Compressed Class Space",} 1.073741824E9
jvm_memory_max_bytes{application="Portal",area="nonheap",id="Code Cache",} 2.5165824E8
jvm_memory_max_bytes{application="Portal",area="nonheap",id="Metaspace",} -1.0
jvm_memory_max_bytes{application="Portal",area="heap",id="G1 Old Gen",} 5.36870912E8
jvm_memory_max_bytes{application="Portal",area="heap",id="G1 Eden Space",} -1.0
jvm_memory_max_bytes{application="Portal",area="heap",id="G1 Survivor Space",} -1.0
# HELP jvm_threads_peak_threads The peak live thread count since the Java virtual machine started or peak was reset
# TYPE jvm_threads_peak_threads gauge
jvm_threads_peak_threads{application="Portal",} 47.0
# HELP hikaricp_connections_pending Pending threads
# TYPE hikaricp_connections_pending gauge
hikaricp_connections_pending{application="Portal",pool="HikariPool-1",} 0.0
# HELP hikaricp_connections_acquire_seconds Connection acquire time
# TYPE hikaricp_connections_acquire_seconds summary
hikaricp_connections_acquire_seconds_count{application="Portal",pool="HikariPool-1",} 814.0
hikaricp_connections_acquire_seconds_sum{application="Portal",pool="HikariPool-1",} 11.156142703
# HELP hikaricp_connections_acquire_seconds_max Connection acquire time
# TYPE hikaricp_connections_acquire_seconds_max gauge
hikaricp_connections_acquire_seconds_max{application="Portal",pool="HikariPool-1",} 0.0
# HELP hikaricp_connections Total connections
# TYPE hikaricp_connections gauge
hikaricp_connections{application="Portal",pool="HikariPool-1",} 1.0
# HELP system_cpu_count The number of processors available to the Java virtual machine
# TYPE system_cpu_count gauge
system_cpu_count{application="Portal",} 2.0 |
Для запуска мониторинга со стороны Prometheus нужно добавить в его конфигурации:
- job_name: 'portal-server'
scrape_interval: 5s
metrics_path: /eltex_portal/api/metrics
static_configs:
# external address of the Portal server
- targets: [ '<адрес сервера Eltex-portal>:9000' ]
|
Grafana и Prometheus можно запустить в docker используя docker-compose.yml:
version: '3'
services:
portal-prometheus:
image: prom/prometheus:v2.25.0
volumes:
- ./prometheus/:/etc/prometheus/
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
- '--web.console.templates=/usr/share/prometheus/consoles'
ports:
- 9090:9090
networks:
- portal-monitoring
portal-grafana:
image: grafana/grafana:7.4.2
volumes:
- ./grafana/provisioning/:/etc/grafana/provisioning
ports:
- 3000:3000
depends_on:
- portal-prometheus
networks:
- portal-monitoring
networks:
portal-monitoring: |
docker-compose up |
Сервис может быть запущен в docker-контейнере. Для этого необходимо подготовить файл с переменными окружения .env и docker-compose.yml
version: "3"
services:
eltex-portal:
container_name: eltex-portal
image: hub.eltex-co.ru/softwlc/eltex-portal:1.23-<tag>
ports:
- 9000:${PORTAL_PORT}
- 9443:${PORTAL_HTTPS_PORT}
environment:
- PORT=${PORTAL_PORT}
- portal.defaultRedirectUrl=${PORTAL_DEFAULT_REDIRECT_URL}
- database.host=${PORTAL_DATABASE_HOST}
- database.port=${PORTAL_DATABASE_PORT}
- database.name=${PORTAL_DATABASE_NAME}
- database.user=${PORTAL_DATABASE_USER}
- database.password=${PORTAL_DATABASE_PASSWORD}
- jetty.https.port=${PORTAL_HTTPS_PORT}
- jetty.https.keystorePass=${PORTAL_HTTPS_KEYSTORE_PASS}
- jetty.https.keystoreFile=${PORTAL_HTTPS_KEYSTORE_FILE}
- validation.public_key=${PORTAL_PUBLIC_KEY}
- TZ=${TZ}
volumes:
- /etc/eltex-doors/keys/public.pem:${PORTAL_PUBLIC_KEY}:ro
|
| Вместо <tag> необходимо указать актуальную версию, которую можно посмотреть по ссылке. |
PORTAL_PORT=9000 PORTAL_HTTPS_PORT=9443 PORTAL_HTTPS_KEYSTORE_PASS=12345 PORTAL_HTTPS_KEYSTORE_FILE=/etc/eltex-portal/localhost.pfx PORTAL_DEFAULT_REDIRECT_URL=http://eltex-co.ru PORTAL_PUBLIC_KEY=/etc/eltex-doors/keys/public.pem PORTAL_DATABASE_HOST=<ip-addr> PORTAL_DATABASE_PORT=3306 PORTAL_DATABASE_NAME=ELTEX_PORTAL PORTAL_DATABASE_USER=javauser PORTAL_DATABASE_PASSWORD=javapassword #Настройка часового пояса TZ=Asia/Novosibirsk |
Запуск сервиса
-Xms-XmxЛогирование
Подключение к БД
Конфигурация eltex-portal
Доступ через HTTPS
Валидация JWT
Настройка часового пояса
Файлы .env и docler-compose.yml должны находиться в одной папке. Контейнер запускается командой:
docker-compose up |
По умолчанию в ОС Ubuntu 18.04 не содержится сертификатов Министерства цифрового развития. Требуется добавить данные сертификаты для корректной работы при использовании платных тарифов. В директории, где расположен файл docker-compose.yml создать папку "certs":
Загрузить в созданную папку сертификаты CA и sub-CA командой:
В файле docker-compose.yml в раздел "volumes" добавить строчку:
Перезапустить контейнер командой:
Проверить наличие сертификатов в контейнере можно командой:
Пример вывода команды:
|