Настройка периода хранения исторических данных в базе

Skip to end of metadata
Go to start of metadata

Как работает архивирование (партиционирование БД)

Часть исторических данных с определенной периодичностью выносится в отдельные БД, к которым можно будет обратиться в последствии если эти данные потребуются.
Обособленные данные хранятся в папке /app/asr_billing/var/db/billing/, разбитые по месяцам. Например, листинг директории с данными за Ноябрь 2017 года:

[root@localhost ~]# ll /app/asr_billing/var/db/billing/201711/
итого 736
-rw-rw---- 1 495 496 749568 Дек 28 09:12 audit_operations.fdb
-rw-r----- 1 495 496      6 Дек 21 00:00 audit_operations.modified

Данные, отделяемые в отдельные базы, относятся к четырём категориям:

Объём данных, сохраняемых в основной базе, можно настроить указав количество месяцев "month_cnt" в конфигурационном файле демона, отвечающего за разбиение базы:
Расположение файла: /app/asr_billing/etc/pumper/confs.json

[
  {
    "model_name": "AuditOperations",
    "date_key": "op_time",
    "abon_key": "abonent",
    "month_cnt": 1
  },
  {
    "model_name": "ArchAccountStack",
    "date_key": "bill_date",
    "abon_key": "abonent",
    "month_cnt": 6
  },
  {
    "model_name": "VoipLog",
    "date_key": "e_time",
    "abon_key": "abonent",
    "month_cnt": 3
  },
  {
    "model_name": "RadiusSessions",
    "date_key": "end_time",
    "abon_key": "abonent",
    "month_cnt": 3
  }
]

Выше приведены стандартные настройки: аудит хранится один месяц, данные по списаниям шесть месяцев, остальные данные - три месяца. Вы можете изменить период, указав нужное значение в параметре "month_cnt" и переопределив конфигурационный файл.

Как получить информацию из архива?

Аудит можно посмотреть просто выбрав нужные периоды в интерфейсе.

Остальные данные Вы можете получить запросив их в коммандной строке.

Примеры

Чтобы запросить данные, потребуется написать небольшие запросы на языке SQL и передать их утилите sqlexec

Получить данные по звонкам абонента

Получить данные по звонкам абонента ID 2673, совершенным в январе 2020 года:

sqlexec /var/db/billing/202001/voip_log.fdb -l "select * from voip_log where abonent_id=2673 s_time between '2020-01-01' and '2020-02-01'"

Запустить поиск по всем архивным базам

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

Допустим, мы хотим найти администратора который назначил абоненту ID 2673 переход на новый тариф с 1 июля 2019 года.

Для этого найдем записи аудита по абоненту (where abonent_id=2673) о действих администраторов системы (admin_id is not null), совершенные до 1 июля 2019 года включительно (op_time<='2019-07-01'), в описании которых есть "Дата следующего перехода=2019-07-01" (and descr containing 'Дата следующего перехода=2019-07-01'),

find /app/asr_billing/var/db/billing/ -iname audit_operations.fdb | sort | while read file; 
do 
    echo 'file='${file/\/app\/asr_billing/} 
    sqlexec ${file/\/app\/asr_billing/} "select op_time, descr from audit_operations where abonent_id=2673 and admin_id is not null and op_time<='2019-07-01' and descr containing 'Дата следующего перехода=2019-07-01'" | sed 's/   */  /g'
done
Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.