Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Описание


Сервис предназначен для управления учетными записями Hotspot-пользователей (используется сервисами eltex-portal и eltex-apb). Межсервисный обмен реализован на базе gRPC API.

Конфигурация


/etc/eltex-mercury/application.conf

Основной конфигурационный файл.

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
  • Активация режима только на просмотр:
readOnly = false
  • Максимальное количество коннектов к БД:
maxPoolSize = 20
  • Количество одновременных коннектов к БД:
maxPoolSize = 20
  • Таймаут коннекта к БД (в секундах):
connectionTimeout = 5000
  • Активация отправки информации об изменениях в таблице radstat в logging-service:
sorm3Enabled = false
  • Подключение к eltex-logging-service:
logging	{ 
	host = localhost 
	port = 9099 
}


/etc/default/eltex-mercury

Cодержит параметры, необходимые для инициализации сервиса.

eltex-mercury
# 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

Файл настройки логирования сервиса.

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-compose up

Докеризация сервиса


Сервис может быть запущен в docker-контейнере. Для этого необходимо подготовить файл с переменными окружения .env и docker-compose.yml

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, а не маппинг файлов, содержащих логи.

.env
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.
  • Нет меток