Автоматизация сбора данных об использовании лицензий, поиск в сетке для модели машинного обучения, прогнозирование использования в будущем, оповещение перед достижением порогового значения

Предположим, вам нужно купить туалетную бумагу. Что бы вы сделали? Вы не покупаете его каждый день, может быть, раз в месяц или даже каждые три месяца. Вы не хотите, чтобы вы купили слишком мало, вам нужно будет купить его снова в ближайшее время. Вы не хотите, чтобы вы купили слишком много и нагромождали много туалетов. Так что бы вы сделали?

Сначала вы проверите количество доступной туалетной бумаги, затем спрогнозируете, сколько вы будете использовать в месяц, и купите соответствующее количество туалетной бумаги. Это звучит как знакомый процесс? Да, это. Многие компании повторяют этот процесс для закупок. Одним из распространенных предметов, которые телекоммуникационным компаниям необходимо периодически приобретать, является Лицензия.

Предыстория: покупка лицензии

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

Предыдущий рабочий процесс

В прошлом, в первую очередь, мы собирали запись об использовании лицензии вручную. Поставщики оборудования обычно предоставляют графический интерфейс, в котором мы можем вводить команды на основе их собственного синтаксиса человеко-машинного языка (MML) для отображения текущего использования лицензии на экране. Затем мы скопировали информацию и сохранили ее в виде Excel. Это была утомительная работа, и иногда ответственный персонал мог забыть отобразить или повредить файл Excel. Мы не можем делать это так часто, так как это требует слишком много рабочей силы.

К счастью, поставщики оборудования также позволяют нам подключаться через telnet к машине под названием Network Management System (NMS). Мы можем ввести специальные команды для взаимодействия с различными элементами сети под ним.

Новый автоматизированный рабочий процесс

Чтобы автоматизировать этот процесс, мы используем пакет библиотеки python telnetlib для сбора информации об использовании лицензии. Модуль telnetlib предоставляет класс Telnet, реализующий протокол Telnet. После того, как мы установили соединение с помощью tn = Telnet(NMS_IP, NMS_Port), мы можем отправлять наши команды с помощью функции tn.write(). Я определил функцию для отправки команд, см. ниже.

Процесс получения требуемых лицензионных данных заключается в том, что сначала вам нужно войти в NMS, а затем вам нужно зарегистрировать сетевой элемент, который вы хотите проверить, например:

Когда мы вводим необходимую команду для отображения использования лицензии, система возвращает текстовую таблицу, и мы разделяем каждую строку на два пробела. Затем мы добавляем каждую строку как кортеж в список, называемый данными.

А затем мы декодируем результат вывода в полезный DataFrame от pandas. Мы разработали нашу таблицу базы данных как обходную, потому что элементы лицензии могут быть добавлены или удалены, если элементы сети были обновлены. Изменение схемы таблицы каждый раз нецелесообразно: во-первых, каждую неделю происходит несколько обновлений на разных элементах сети, во-вторых, мы не можем знать о предыдущих обновлениях, какие элементы лицензии добавляются или удаляются. Мы доработали столбцы следующим образом:

result_time: время сбора;
object_name: имя элемента сети;
resource_name: название элемента лицензии;
total_resource: объем лицензии, т. е. максимально допустимый объем этой лицензии;
used_resource: занятый объем лицензии элемент в данный момент;
использование: просто используемый_ресурс, разделенный на общий_ресурс.

Эта структура допускает добавление или удаление произвольных элементов лицензии без изменения схемы базы данных.

(P.S. Это утомительная работа, так как каждый сетевой элемент имеет свой формат команды и отображения. Нам нужно настраивать один за другим.)

Наконец-то мы собрали все лицензионные предметы! Всего более 1742 различных элементов в 60 элементах сети.

Прогнозирование использования лицензии

Получив данные, мы можем использовать модель ARIMA для прогнозирования. ARIMA (авторегрессионное интегрированное скользящее среднее) — это модель машинного обучения для анализа и прогнозирования данных временных рядов. Это соответствует нашей цели прогнозирования использования лицензии в зависимости от времени. Более подробную информацию можно найти в этом отрывке: Как создать модель ARIMA для прогнозирования временных рядов в Python Джейсона Браунли.



Мы выполнили поиск по сетке с использованием StatsModels, чтобы найти наилучший набор параметров (p, d, q) из 63 комбинаций.

p = [0,1,2,4,6,8,10]
d = [0,1,2]
q = [0,1,2]

Мы сделали цикл по 60 сетевым элементам и 1742 лицензиям, и поиск по сетке длился почти неделю!

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

Если использование лицензии достигает 80% за 1 месяц, мы получаем красный сигнал тревоги. Действовать нужно немедленно. В противном случае, если использование лицензии достигает 80 % за 3 месяца, выдается оранжевое предупреждение, и, наконец, мы получаем желтое предупреждение, если использование достигает 80 % за 6 месяцев.

Вывод

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

Чтобы узнать больше об этом проекте, смотрите ссылку на мой Github, доступную здесь.