Описание
Сервис предназначен для управления учетными записями Hotspot-пользователей (используется сервисами eltex-portal и eltex-apb). Межсервисный обмен реализован на базе gRPC API.
Конфигурация
/etc/eltex-mercury/application.conf
Основной конфигурационный файл.
database {
host = localhost
port = 3306
name = radius
user = javauser
password = javapassword
readOnly = false
pool {
maxPoolSize = 20
minimumIdle = 1
connectionTimeout = 5000
}
}
jdbc {
properties {
useSSL = false
}
}
sorm3Enabled = false
logging {
host = localhost
port = 9099
} |
database {
host = localhost
port = 3306
name = radius
user = javauser
password = javapassword |
- Активация режима только на просмотр:
- Максимальное количество коннектов к БД:
- Количество одновременных коннектов к БД:
- Таймаут коннекта к БД (в секундах):
- Активация отправки информации об изменениях в таблице radstat в logging-service:
- Подключение к eltex-logging-service:
logging {
host = localhost
port = 9099
} |
/etc/default/eltex-mercury
Cодержит параметры, необходимые для инициализации сервиса.
# Eltex-Mercury daemon parameters
# 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-mercury"
|
Параметры | Описание |
---|
JAVA_INIT_HEAP | Количество памяти, выделяемое на работу сервиса при старте. Рекомендуется выставлять равное JAVA_MAX_HEAP. |
JAVA_MAX_HEAP | Максимальное количество памяти, которое может зарезервировать сервис |
JAVA_OPTS | Дополнительные опции для запуска jvm |
/etc/eltex-mercury/log4j2.xml
Файл настройки логирования сервиса.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="600">
<Properties>
<Property name="rootLevel">${env:LOG_LEVEL:-ERROR}</Property>
<Property name="baseDir">/var/log/eltex-mercury</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="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>
<RollingFile name="RollingFile"
fileName="${baseDir}/mercury.log"
filePattern="${baseDir}/log/mercury-%i.log.gz">
<PatternLayout pattern="${logPattern}"/>
<Policies>
<SizeBasedTriggeringPolicy size="${maxFileSize}"/>
</Policies>
<DefaultRolloverStrategy max="${maxCount}">
<Delete basePath="${baseDir}" maxDepth="3">
<IfFileName glob="*/mercury-*.log.gz">
<IfLastModified age="${lastModified}"/>
<IfAny>
<IfAccumulatedFileSize exceeds="${accumulatedFileSize}"/>
<IfAccumulatedFileCount exceeds="${maxCount}"/>
</IfAny>
</IfFileName>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<Gelf name="Gelf" host="${gelfHost}" port="${gelfPort}" version="1.1" facility="eltex-mercury"
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="Gelf" level="${gelfLevel}"/>
</Root>
<Logger name="org.hibernate" level="ERROR"/>
<Logger name="org.springframework" level="ERROR"/>
<Logger name="com.zaxxer.hikari" level="WARN"/>
<Logger name="io.grpc" level="WARN"/>
<Logger name="io.netty" level="INFO"/>
</Loggers>
</Configuration>
|
- Интервал автоматического перечитывания конфигурации логгера:
<Configuration monitorInterval="600"> |
<Property name="rootLevel">${env:LOG_LEVEL:-ERROR}</Property> |
- Базовая директория хранения логов:
<Property name="baseDir">/var/log/eltex-mercury</Property> |
- Максимально допустимый размер файла (при его превышении создается новый файл. а старый архивируется):
<Property name="maxFileSize">20 MB</Property> |
- Суммарный размер логов (текущий файл + архивные). При его превышении наиболее старые файлы будут удаляться:
<Property name="accumulatedFileSize">10 GB</Property> |
- Срок хранения логов, файлы модифицированные раннее этого срока будут удаляться:
<Property name="lastModified">4d</Property> |
- Максимальное количество архивных файлов, при его превышении наиболее старые файлы будут перезаписываться:
<Property name="maxCount">20</Property> |
- Блок настройки перенаправления логов в Graylog (уровень логирования, адрес, порт):
<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> |
Настройка
Настройка взаимодействия с eltex-portal
Настройка производится в конструкторе порталов - "Системные настройки - "Доступ к Mercury":
Настройка взаимодействия eltex-apb
Настройка производится в конфигурационном файле apb - /etc/eltex-apb/apb.properties:
...
mercury.host=localhost
mercury.port=6565
mercury.pool.size=100
...
|
Настройка таймзоны
При получении в логах ошибки:
java.sql.SQLException: The server time zone value 'MSK' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support. |
Нужно прописать корректную таймзону для подключения к БД в файле /etc/eltex-mercury/application.conf
:
database {
...
jdbc {
properties {
serverTimezone = Europe/Moscow
}
}
}
|
Мониторинг
Для мониторинга сервиса APB поддержаны совместимые с Prometheus метрики. Для просмотра списка метрик надо открыть:
http://<адрес сервера Eltex-Mercury>:6564/mercury/prometheus |
Для запуска мониторинга со стороны Prometheus нужно добавить в его конфигурации:
- job_name: 'mercury'
scrape_interval: 5s
metrics_path: /mercury/prometheus
static_configs:
# Change this to the actual mercury address
- targets: ['адрес сервера Eltex-Mercury:6564'] |
Grafana и Prometheus можно запустить в docker используя docker-compose.yml и .env:
docker-compose.yml
version: '3'
services:
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:
- ${PROMETHEUS_PORT}:9090
grafana:
image: grafana/grafana:7.4.2
volumes:
- ./grafana/:/etc/grafana/
ports:
- 3000:3000
depends_on:
- prometheus
environment:
- PROMETHEUS_HOST=${PROMETHEUS_HOST}
- PROMETHEUS_PORT=${PROMETHEUS_PORT} |
.env
# Change this to the actual address
PROMETHEUS_HOST=127.0.0.1
PROMETHEUS_PORT=9090 |
Шаблоны для Grafana, Prometheus и docker-compose.yml можно взять из архива: monitoring_mercury.zip. Для запуска нужно извлечь данные из архива, перейти в директорию и запустить:
Докеризация сервиса
Сервис может быть запущен в docker-контейнере. Для этого необходимо подготовить файл с переменными окружения .env и docker-compose.yml
version: "3"
services:
eltex-mercury:
container_name: eltex-mercury
image: hub.eltex-co.ru/softwlc/eltex-mercury:1.20-<tag>
ports:
- 6565:${MERCURY_PORT}
environment:
- grpc.port=${MERCURY_PORT}
- database.host=${MERCURY_DB_HOST}
- database.port=${MERCURY_DB_PORT}
- database.name=${MERCURY_DB_NAME}
- database.user=${MERCURY_DB_USER}
- database.password=${MERCURY_DB_PASSWORD}
- database.readOnly=${MERCURY_DB_READ_ONLY}
- database.pool.maxPoolSize=${MERCURY_DB_POOL_SIZE}
- database.pool.minimumIdle=${MERCURY_DB_POOL_MIN_IDLE}
- database.pool.connectionTimeout=${MERCURY_DB_POOL_TIMEOUT}
- sorm3Enabled=${MERCURY_SORM}
- logging.host=${MERCURY_LOGGING_HOST}
- logging.port=${MERCURY_LOGGING_PORT}
- LOG_LEVEL=DEBUG
volumes:
- /var/log/eltex-mercury:/var/log/eltex-mercury |
Вместо <tag> необходимо указать актуальную версию, которую можно посмотреть по ссылке. |
Для сбора логов рекомендуется использовать коллектор, например Graylog, а не маппинг файлов, содержащих логи.
MERCURY_PORT=6565
MERCURY_DB_HOST=<IP-address>
MERCURY_DB_PORT=3306
MERCURY_DB_NAME=radius
MERCURY_DB_USER=javauser
MERCURY_DB_PASSWORD=javapassword
MERCURY_DB_READ_ONLY=false
MERCURY_DB_POOL_SIZE=20
MERCURY_DB_POOL_MIN_IDLE=1
MERCURY_DB_POOL_TIMEOUT=5000
MERCURY_SORM=false
MERCURY_LOGGING_HOST=<IP-address>
MERCURY_LOGGING_PORT=9099
LOG_LEVEL=DEBUG |
Описание переменных окружения
Запуск сервиса
- MERCURY_PORT - Grpc-порт, который будет слушать сервис.
- JAVA_INIT_HEAP - Xms JVM опция.
- JAVA_MAX_HEAP - Xmx JVM опция.
- JAVA_OPTS - JVM опции (может переопределить все остальные параметры по умолчанию).
Настройки взаимодействия с БД
MERCURY_DB_HOST - хост подключения к БД.
MERCURY_DB_PORT - порт подключения к БД.
MERCURY_DB_NAME - имя БД.
MERCURY_DB_USER - имя пользователя БД.
MERCURY_DB_PASSWORD - пароль пользователя БД.
MERCURY_DB_READ_ONLY - включить режим "только чтение".
MERCURY_DB_POOL_SIZE - размер пула соединений с БД.
MERCURY_DB_POOL_MIN_IDLE - минимальное число idle соединений.
MERCURY_DB_POOL_TIMEOUT - таймаут получения соединения из пула.
Настройка SORM3
- MERCURY_SORM - включить поддержку sorm3.
Взаимодействие с Logging Service
- MERCURY_LOGGING_HOST - хост подключения к сервису logging-service.
- MERCURY_LOGGING_PORT - порт подключения к сервису logging-service.