Настройка подсистем биллинга

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

Очень большое количество редко меняющихся настроек поведения системы вынесено в конфигурации. Конфигурация - это текстовый блок, состоящих из записей вида: <ключ>=<значение>. На одной строке может быть только одна такая запись, символ # в начале строки означает комментарий. Порядок записей в тексте значения не имеет. При необходимости указания порядка в ключе вводятся дополнительные числовые индексы.

Конфигурации вводятся либо в текстовых properties-файлах (опции подключения к БД, базовые настройки), либо в редакторах конфигурации в клиенте биллинга, сохраняясь в базе данных. Ядро биллинга, каждый экземпляр модуля биллинга, плагины обладают различными конфигурациями, конфигурация ядра доступна в меню Сервис⇒Настройка⇒Конфигурация.

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

На приведённом снимке экрана изображён типовой редактор конфигурации. В таблице указан перечень конфигураций, из которых в текущий момент активен только один, установка активной конфигурации производится кнопкой Установить. Установка конфигурации позволяет осуществлять быстрый переход на заранее подготовленную конфигурацию. Создание новой конфигурации производится кнопкой Создать. Открытие - двойным кликом мыши, либо кнопкой Открыть.

В значениях параметров конфигурации возможна подстановка ранее указанных значений с помощью подстановок {@имя параметра}. Рассмотрим пример подстановки.

# определение значения
howYou=how you
# использование подстановки
some.kind.of.config.record=Thats {@howYou} should use macro!

Т.е. при такой конфигурации при взятии значения some.kind.of.config.record получаем в результате строку "Thats how you should use macro!". Подставляемое значение должно быть обязательно определено ранее подстановки.

В большинстве случаев при смене конфигурации необходим перезапуск сервера, использующего данную конфигурацию. Например, при установке опций для работы RADIUS-сервера в конфигурации привязанного модуля DialUP необходим перезапуск RADIUS-сервера.

Для быстрого комментирования отдельных строк и блоков: ctrl+shift+C.

Логирование

Вы можете пропустить, либо бегло изучить этот раздел и вернуться к нему, если вам понадобится изменение стандартных параметров логирования.

По умолчанию логи серверов сохраняются в папке log приложения. В качестве подсистемы логирования используется библиотека log4j. Конфигурирование логирования заключается в правке файла data/log4j.xml (log4j-radius.xml - для RADIUS-сервера, log4j-collector.xml - для коллектора). Это xml-файл определенной структуры.

Example 1. Код

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

<appender name="APPLICATION" class="org.apache.log4j.RollingFileAppender">
 <param name="File" value="${log.dir.path}${log.prefix}.log" />
 <param name="MaxFileSize" value="100MB" />
 <param name="MaxBackupIndex" value="2" />
 <param name="Append" value="false" />
<layout class="org.apache.log4j.PatternLayout">
 <param name="ConversionPattern" value="%d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n" />
</layout>
 <filter class="ru.avantis.common.logging.Log4JMDCFilter">
  <param name="key" value="nestedContext" />
  <param name="value" value="${log.prefix}" />
 </filter>
</appender>
<appender name="MQ" class="org.apache.log4j.RollingFileAppender">
 <param name="File" value="${log.dir.path}${log.prefix}.mq.log" />
 <param name="MaxFileSize" value="100MB" />
 <param name="MaxBackupIndex" value="2" />
 <param name="Append" value="false" />
<layout class="org.apache.log4j.PatternLayout">
 <param name="ConversionPattern" value="%d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n" />
</layout>
 <filter class="ru.avantis.common.logging.Log4JMDCFilter">
  <param name="key" value="nestedContext" />
  <param name="value" value="mq" />
 </filter>
</appender>
<appender name="ASYNC" class="ru.avantis.common.logging.Log4jAsyncAppender">
 <appender-ref ref="APPLICATION"/>
</appender>
<root>
 <priority value="INFO" />
 <appender-ref ref="ASYNC" />
</root>

</log4j:configuration>

Логирование в системе основано на категориях и контекстах. Разные контексты (server/script или collector/processor/loader) разнесены по разным аппендерам. Аппендер - это куда и как добавляется запись лога - т.е., например в файл server.log такого вида:

server 04-06/12:04:49  INFO [main] DefaultServerSetup - Init DB connection pools
server 04-06/12:04:49  INFO [main] DefaultServerSetup - Init trash pools..
server 04-06/12:04:49  INFO [main] DefaultServerSetup - Init trash pool trash_1
server 04-06/12:04:49  INFO [main] Server - Starting BillingServer..
server 04-06/12:04:49  INFO [main] Server - HTTP port: 6565
server 04-06/12:04:49  INFO [main] Server - Starting HTTP connector..
server 04-06/12:04:49  INFO [main] Server - HTTPS port: -1

root - это главная категория, по умолчанию priority/@value='INFO', т.е. все логирование в режиме info. Чтобы переключить логирование в режим debug, необходимо указать здесь 'DEBUG'.

<root>
 <priority value="DEBUG" />
 <appender-ref ref="ASYNC" />
</root>

Также в каждом аппендере можно указать фильтр по приоритету. Например, в root указать DEBUG, а в аппендере APPLICATION добавить указанную ниже ветку, чтобы логирование для всех контекстов, кроме APPLICATION было в режиме DEBUG.

<param name="Threshold" value="ERROR" />
<appender name="MQ" class="org.apache.log4j.RollingFileAppender">
 <param name="Threshold" value="ERROR" />
 <param name="File" value="${log.dir.path}${log.prefix}.mq.log" />
 <param name="MaxFileSize" value="100MB" />
 <param name="MaxBackupIndex" value="2" />
 <param name="Append" value="false" />

 <layout class="org.apache.log4j.PatternLayout">
  <param name="ConversionPattern" value="%d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n" />
 </layout>

 <filter class="ru.avantis.common.logging.Log4JMDCFilter">
  <param name="key" value="nestedContext" />
  <param name="value" value="mq" />
 </filter>
</appender>

RADIUS-протокол

Вы можете пропустить этот раздел при первичной установке системы и вернуться к нему, если вам понадобится работа с протоколом RADIUS.

RADIUS - протокол авторизации и аккаунтинга (передачи информации о соединении). В качестве транспорта используется UDP. Протокол бинарный, определяет формат передачи пакетов нескольких типов, в каждом из которых могут быть определены пары "атрибут-значение". NAS (Network Access Server) - сервер, через который происходит выход клиента с RADIUS-авторизацией.

Типы пакетов могут быть следующими:

AUTHENTICATION_REQUEST

Запрос авторизации, отправляется NASом RADIUS-серверу и содержит помимо идентификационной информации соединения, указанной выше, информацию о логине и пароле пользователя. Логин передаётся в открытом виде, пароль шифруется.

AUTHENTICATION_REJECT

Отказ в авторизации, может содержать атрибут с кодом ошибки.

AUTHENTICATION_ACCEPT

Пользователь авторизован. В данном пакете могут содержатся атрибуты, устанавливающие характеристики соединения пользователя (IP-адрес, скорость, максимальную длину сессии, частоту Update-пактов и т.п.).

ACCOUNTING_REQUEST

Запросы аккаунтинга могут быть трёх типов: Start, Stop, Update. Различаются они атрибутом Acct-Status-Type который равен 1, 2 или 3 соответственно. Данный тип запросов передаёт на RADIUS-сервер информацию о ходе соединения (соединение началось, завершилось или текущее состояние соединения).

ACCOUNTING_RESPONSE

Ответ RADIUS-сервера о том, что он получил запрос аккаунтинга. Ответ не содержит никаких атрибутов. Исключение составляет ответ MPD-серверу, который может содержать атрибут, информирующий NAS о необходимости разрыва соединения.

Посредством RADIUS-атрибутов передаётся вся информация пакета. Все используемые атрибуты должны быть описаны в файле dictionary.xml. Фактически файл определяет соотнесение кодов атрибутов их строковым обозначениям и типам. Он необходим при разборе RADIUS-пакета и при его создании, для выяснения кода атрибута по его имени.

Обратите внимание, что строковые обозначения атрибутов в нашем словаре могут отличаться от обозначений в словарях производителей оборудования. Для взаимодействия это совершенно не важно, т.к. в пакете атрибут обозначает числовой код.

Такой файл есть в любом приложении, которому может понадобится работа с RADIUS-протоколом. Во всех конфигурациях атрибуты должны указываться с именем таким же как и в данном конфигурационном файле. Атрибуты идентифицируются по имени, недопустимы атрибуты с одинаковыми названиями в пределах dictionary.xml. Перезагрузка словаря приложением происходит при изменении конфигурации связанного с приложением экземпляра модуля.

Рассмотрим формат описания атрибута в словаре.

<attribute name="cisco-Fax-Connect-Speed" type="string" add="yes" code="8"/>

Где:

  • code - числовой код атрибута;

  • name - строковое обозначение, отображается в логах, указыается в конфигурации;

  • type - тип атрибута, возможные типы далее;

  • add - при установке в yes в пакете имя строкового атрибута дублируется в поле со значением, это особенность CISCO устройств.

Возможные типы атрибутов:

  • octets - последовательность байт;

  • string - текстовая строка;

  • integer - беззнаковое целое число, 4 байта;

  • ipaddr - IP-адрес, 4 байта;

  • abinary - текстовая строка с бинарными кодами.

Значения атрибутов в текстовых конфигурациях указываются в виде: <NAME>=<VALUE>, например: Framed-IP-Address=192.168.168.2. Для текстовой строки с бинарными кодами бинарный код указывается как \0x<code>, где <code> - код в 16-ичной системе счисления. Например: cisco-SSG-Command-Code=\0xC SERVICE А.

Тегированные атрибуты указываются в виде: <NAME>:<TAG>=<VALUE>, например: ERX-Activate-Service:2=testtest. Тегированный атрибут в словаре должен быть помечен атрибутом tag, который определяет логику для разных типов атрибутов.

Таблица. Логика тегирования

Тип тегирования / Тип атрибута Integer String

1

Тег - первый байт значения, значение от 0х01 до 0х1F, если тегирования нет - его значение 0. Оставшиеся три байта - само число.

Тег - первый байт значения, значение от 0х01, если тегирования нет - его значение 0. Оставшиеся байты - значение строки.

2

Не поддерживается.

Если значение первого байта от 0х01 до 0х1F, то это тег, иначе - первый байт - это начало значения, тэгирования нет.

При необходимости указания нескольких атрибутов они разделяются точкой с запятой, например: Framed-IP-Address=192.168.168.2;Service-Type=1;ERX-Activate-Service:2=testtest. Для указания точки с запятой в теле атрибута нужно писать её парно. Например: Framed-IP-Address=192.168.168.2;cisco-SSG-Service-Info=QU;;1024000;;512000;;D;;1024000;;512000.

Строковые представления для некоторых перечислимых числовых RADIUSатрибутов в данный момент не поддерживаются. Например, значению 1 атрибута Service-Type соответствует Login.