Просмотр Исходного

h1. Ошибки обработчика абонентов. Почему она возникла?
[Обработчик абонентов|Worker (ядро биллинга)] является ключевым процессом продукта Carbon Billing 5 - именно он начисляется абонентскую плату, создаёт задания для демона отправки событий на оборудование, выполняет запланированные задачи и прочее.
Ошибки обработчика могут быть трех типов:
* *WARNING* - не критичная ошибка
* *ERROR* - ошибка средней критичности, к ним как правило относятся некорректные расчеты в ряде случаев, вызванные в основном некорректными настройками, которые можно исправить без подключения техподдержки
* *CRITICAL* - критичные ошибки, требующие анализа службой техподдержки и/или отделом разработки
Вне зависимости от критичности ошибки, они требуют действий администратора или техподдержки для устранения.

h2. ERROR - Ошибка обработки трафика
В логе воркера следующее сообщение:
{code}2018-10-02 13:52:10,514 - worker - common - ERROR - Ошибка обработки трафика{code}
После этой строки описание ошибки с ID абонента:
{code}Exception: У абонента 1377 нет счетчиков трафика для <result set row with STATUS = None, SUBNET = 0, USER_ID = 1423, V_OUT = 2006340, IDS = 327016,322338,316804,311495,305887,299861,292915,285478,277832,269941,262094,255473,249130,242811,236701,231088,225416,219812,213849,331537,336011,340291,344499,348675,352756,356910,361087,366122,371004,376138,381088,385861,390677,395578,401386,406108,410751,415729,421581, T_START = 1538396521, USER_IP = -1408237505, TTYPE = None, V_IN = 5964428, T_END = 1538476510>
{code}
h3. Возможные причины и решения
* В услуге с типом "трафик" (типы услуг описаны в статье "[Услуги. Трафик (интернет)]") на вкладке "*Для разработчиков*" не задана "*Подсеть*". Выберите подсеть из списка и сохраните услугу.
* В подсети для тарификации не настроены диапазоны сетей, настройте их по статье "[CarbonBilling:Правила и сети]"
* В услуге настроена подсеть, в подсетях настроены диапазоны, но ошибка все равно возникает.
Причиной тому может быть то, что в коллектор приходит информация по трафику абонента, относящемуся к определенной подсети, при этом услуги для тарификации подсети у абонента нет. Вариантов решения несколько:
** Настройте отправку netflow на nas только по определенным диапазонам сетей, которые Вы тарифицируете - если это возможно
** Настройте услуги трафика по каждой подсети и подключите абоненту
** Удалите все правила тарификации сетей кроме 0.0.0.0/0, чтобы весь трафик учитывался по единственной услуге (не рекомендуется в случае тарификации помегабайтно)

h2. ERROR - Не выполнилось ни одной операции!

В логе воркера следующее сообщение:
{code}2020-10-28 01:41:08,289 - worker - balance_change - ERROR - Не выполнилось ни одной операции!{code}

1. Необходимо убедиться, что никаких дополнительных ошибок по платежам система мониторинга не фиксирует, проверить можно командой *server_check*
2. Включить уровень DEBUG в настройках службы worker по [инструкции|https://docs.carbonsoft.ru/pages/viewpage.action?pageId=117145604#Worker(ядробиллинга)-Отладка]
3. Повторно проверить лог и обнаружить события, предшествующие возникновению ошибки, пример представлен ниже:
{code}2021-02-25 10:44:19,607 - worker - balance_change - INFO - Выставление счетов на предоплату
2021-02-25 10:44:19,639 - worker - balance_change - INFO - Выставление обычного счета абоненту Test1
2021-02-25 10:44:19,692 - worker - balance_change - ERROR - Не выполнилось ни одной операции!
2021-02-25 10:44:19,696 - worker - balance_change - INFO - Обработка баланса завершена
2021-02-25 10:44:19,696 - worker - base_worker - INFO - Обработано строк: 2, 0.168s (daemons.balance_change.0)
2021-02-25 10:44:19,697 - worker - worker - INFO - Processed 2 in 0.168s.
{code}
Проблема возникла при выставлении счета, требуется найти абонента в биллинге и проверить его состояние. В приведенном примере была заведена карточка абонента, был указан тариф без услуг, в результате биллингу не было возможности выставить счет по услугам, из-за их отсутствия.

Решение:
Добавить абоненту услугу с нулевой стоимостью и включить опцию в [настройках|https://docs.carbonsoft.ru/pages/viewpage.action?pageId=63242421#Глобальныенастройкибиллингаиоператора-Общие] *Формировать нулевые счета*.
В таком случае, биллинг будет выставлять абоненту нулевые счета по услуге без обозначения ошибки.


h2. CRITICAL - Ошибка работы обработчика
После сообщения "CRITICAL - Ошибка работы обработчика" идет расширенное описание возникшей проблемы. Такие ошибки как правило являются исключительными ситуациями, требующими подключения отдела разработки. Так же к ним относятся ошибки невозможности работы с базой данных по тем или иным причинам, некоторые примеры описаны ниже.
* БД биллинга недоступна. Вероятная причина: она перезапускается из-за обнаруженных повисших транзакций.
{code}('Error while connecting to database:\n- SQLCODE: -902\n- I/O error for file "/var/db/billing.gdb"\n- Error while trying to open file\n- No such file or directory', -902, 335544344){code}
* БД аккаунтинга трафика недоступна. Вероятная причина: она перезапускается из-за обнаруженных повисших транзакций.
{code}('Error while connecting to database:\n- SQLCODE: -902\n- I/O error for file "/var/db/buff_traf.gdb"\n- Error while trying to open file\n- No such file or directory', -902, 335544344){code}
* Недоступна СУБД. Вероятней всего БД отправлена в перезапуск во время выполнения запроса обработчиком; так же возможно на сервере проводятся какие-либо работы при которых она остановлена вручную, при этом почему-то обработчик абонентов оставили работать
{code}('Error while connecting to database:\n- SQLCODE: -902\n- Unable to complete network request to host "169.254.30.52".\n- Failed to establish a connection.\n- Connection refused', -902, 335544721){code}
* Проблема так же может возникнуть при перезапуске БД.
{code}('Error while connecting to database:\n- SQLCODE: -902\n- cannot start transaction for password database', -902, 335544654){code}
* Ошибка при выполнении SQL-запроса обработчика абонентов. Если ошибка возникает постоянно, требуется подключить отдел разработки.
{code}('Error while preparing SQL statement:\n- SQLCODE: -902\n- database file appears corrupt (/mnt/db/billing.gdb)\n- wrong page type\n- page 269 is of wrong type (expected 6, found -1)', -902, 335544335, {'params': (True,), 'sql': u'SELECT "CURRENCY"."ID", "CURRENCY"."UPDATE_SERVER", "CURRENCY"."SHORT_NAME", "CURRENCY"."NAME", "CURRENCY"."PRIMARY_CUR" FROM "CURRENCY" WHERE "CURRENCY"."PRIMARY_CUR" = True'}){code}