База знаний BILLmanager

Услуга самопроизвольно останавливается

Услуга клиента может быть остановлена преждевременно, если превышены лимиты дополнительных ресурсов:

  • значение Включено в тариф и на балансе не оказалось средств для оплаты превышения;
  • максимальное значение, указанное в настройках дополнения.

Лимиты ресурсов указаны в разделе ПродуктыТарифные планы → выберите тарифный план → кнопка Конфиг → выберите параметр → кнопка Изменить → блок Ограничения тарифа.

Подробнее см. в разделе Работа с тарифами документации BILLmanager.

Логика работы ограничений

Ограничения начнут действовать при превышении:

  • значения Включено в тариф — количества ресурса, включённого в стоимость тарифа. При превышении этого значения с клиента будут списываться средства за каждую единицу ресурса, использованного сверх установленного лимита. Если средств недостаточно, происходит остановка услуги. 
    Установить цену за превышение можно в разделе ПродуктыТарифные планы → выберите тарифный план → кнопка Конфиг → выберите параметр → кнопка Изменить → блок Цена за превышение. Если оставить поле пустым или указать 0, средства за превышение не будут списываться, пока перерасход не достигнет максимального значения.
  • максимального значения — максимального количества ресурса, доступного для заказа. При превышении этого значения услуга будет остановлена в любом случае, вне зависимости от наличия у клиента средств для оплаты.

Особенности остановки услуг

Превышено значение "Включено в тариф" и недостаточно средств для оплаты превышения

Диагностика

  1. Проверьте баланс, время последнего пополнения, уведомления.
  2. Проверьте лог billmaintain.log на наличие ошибки Error: Type: 'not_enough_money'.

    Пример запроса с ошибкой
    May  5 00:19:17 [8821:1] rpc EXTINFO Query('func=service.billdaily&item=310598&from=daily')
    May  5 00:19:17 [8821:1] rpc DEBUG mgrclient.cpp:215 Result xml: <?xml version="1.0" encoding="UTF-8"?>
    <doc><error type="not_enough_money" lang="en" code="1"><param name="amount">0.1048</param><param name="have">0.00</param><param name="currency">EUR</param><param name="deficit">0.1048</param><param name="limit">0.00</param><param name="reserved">0.00</param><param name="available">0.00</param><stack><action level="30" user="root">service.billdaily</action></stack><group>insufficient funds to complete the operation. Required amount  __amount__ __currency__. Your current balance: __have__ __currency__, credit limit __limit__ </group><msg>insufficient funds to complete the operation. Required amount  0.1048 EUR. Your current balance: 0.00 EUR, credit limit 0.00 </msg></error></doc>
    
    May  5 00:19:17 [8821:1] backtrace EXTINFO mgr_client::Result::Result(mgr_xml::Xml const&, bool, bool) (lib/libmgr.so.5.246.2 + 0x370) [*0x7f451f67d8e6]
    May  5 00:19:17 [8821:1] backtrace EXTINFO mgr_client::Local::DoQuery(std::string const&) (lib/libmgr.so.5.246.2 + 0x5d6) [*0x7f451f678c9b]
    May  5 00:19:17 [8821:1] backtrace EXTINFO mgr_client::Client::Query(std::string const&) (lib/libmgr.so.5.246.2 + 0x42b) [*0x7f451f9fa36a]
    May  5 00:19:17 [8821:1] backtrace EXTINFO sbin::ClientQuery(std::string const&) (libexec/billmaintain.so + 0x4a) [*0x7f451f9fa75f]
    May  5 00:19:17 [8821:1] backtrace EXTINFO sbin::ClientQuerySafe(std::string const&) (libexec/billmaintain.so + 0x5f) [*0x7f451f9b04bf]
    May  5 00:19:17 [8821:1] backtrace EXTINFO BillItem(int, bool, std::string const&) (libexec/billmaintain.so + 0x10f) [*0x7f451f9d280b]
    May  5 00:19:17 [8821:1] backtrace EXTINFO BillDaily() (libexec/billmaintain.so + 0xadb) [*0x7f451f9d5b90]
    May  5 00:19:17 [8821:1] backtrace EXTINFO ??? (libexec/billmaintain.so + 0x2090) [*0x401359]
    May  5 00:19:17 [8821:1] backtrace EXTINFO ??? (/usr/local/mgr5/sbin/billmaintain + 0x0) [*0x7f451fc56555]
    May  5 00:19:17 [8821:1] backtrace EXTINFO ??? (/lib64/libc.so.6 + 0xf5) [*0x4015f7]
    May  5 00:19:17 [8821:1] backtrace EXTINFO ??? (/usr/local/mgr5/sbin/billmaintain + 0x0) [*(nil)]
    May  5 00:19:17 [8821:1] libmgr ERROR Error: Type: 'not_enough_money' Object: '' Value: ''

Ошибка говорит о том, что по этой услуге в момент сбора статистики на балансе не оказалось средств для оплаты превышения использования ресурсов, включённых в тарифный план. Чтобы проверить текущее значение Включено в тариф, перейдите в раздел ПродуктыТарифные планы → выберите тарифный план → кнопка Конфиг → выберите параметр → кнопка Изменить → блок Ограничения тарифа.

Решение

Если превышено значение Включено в тариф, доступно три варианта решения:

  1. Увеличьте количество ресурса, Включённого в тариф.
  2. Разрешите клиенту оплачивать превышение по факту, чтобы услуга не останавливалась из-за нехватки средств на балансе. Для этого:
    1. Перейдите в раздел ПродуктыТарифные планы → выберите тарифный план → кнопка Конфиг → выберите параметр → кнопка Изменить блок Настройка учёта статистики.
    2. Активируйте опцию Оплата по факту использования.
      Тогда биллинг будет создавать отрицательные расходы при превышении лимита.
  3. Установите для клиента кредитный лимит в разделе КлиентыКлиенты → выберите клиента → кнопка Счета → выберите счёт → кнопка Изменить.

Превышено максимальное значение лимита

Диагностика

Проверьте лог billmaintain.log на наличие ошибки stat_addon_over_limit:

  1. Перейдите в раздел Товары/услуги → выберите услугу, которая остановилась раньше срока → кнопка История в верхнем меню.
  2. Проверьте время остановки услуги.
  3. Подключитесь к серверу с платформой по SSH.
  4. Проверьте лог в момент остановки услуги:

    /usr/local/mgr5/var/billmaintain.log | grep <id_услуги>
    Пояснения

    Момент остановки услуги из-за превышения лимита по дополнению в логе /usr/local/mgr5/var/billmaintain.log будет иметь вид:

    Остановка услуги в логе
    Mar 3 00:24:36 [9686:1] rpc EXTINFO Query('func=service.statdaily&item=323911&statdate=2020%2D03%2D02')
    Mar 3 00:24:36 [9686:1] libmgr ERROR Error: Type: 'stat_addon_over_limit' Object: '' Value: ''
    Mar 3 00:24:37 [9686:1] sbin_utils INFO QUERY: func=service.autosuspend&item=323911&stat=on
    При превышении лимита клиенту приходит уведомление.

Чтобы проверить, из-за какого параметра произошла остановка услуги:

  1. Перейдите в раздел Товары/услуги → выберите услугу, которая остановилась раньше срока → кнопка Изменить. По одному из ресурсов отобразится сообщение вида: Нагрузка на канал, исходящая: Осталось 0.00 из 100.00 Мбит/с. Сверх пакета использовано: 987.83 Мбит/с(0.00 RUB за 1 Мбит/с).
  2. Сравните превышение с установленным максимальным значением в блоке Ограничения тарифа. Для этого перейдите в раздел ПродуктыТарифные планы → выберите тарифный план → кнопка Конфиг → выберите параметр → кнопка Изменить → блок Ограничения тарифа → поле Максимальное значение.

Если способ выше был не информативен:

  1. Проверьте статистику по ID услуги. Для этого перейдите в раздел Товары/услуги → выберите услугу → кнопка Статистика в верхнем меню:

    Это отобразит фактическое использование ресурсов услуги.
  2. Сравните значения статистики с максимально допустимыми для тарифа. Для этого перейдите в раздел ПродуктыТарифные планы → выберите тарифный план → кнопка Конфиг → выберите параметр → кнопка Изменить → блок Ограничения тарифа → поле Максимальное значение. Максимальное значение должно быть больше значения статистики по дополнению.

Решение

Если превышено максимальное значение, остановка услуги произойдет вне зависимости от наличия средств на балансе. Для предотвращения остановки услуги увеличьте максимальное значение для дополнения в разделе ПродуктыТарифные планы → выберите тарифный план → кнопка Конфиг → выберите параметр → кнопка Изменить → блок Ограничения тарифа.