Мониторинг лицензий · 4 min read · Jan 13, 2026
Мониторинг лицензий Flexnet с помощью rrdtool
Мониторинг лицензий Flexnet с помощью rrdtool
Введение
Некоторые из вас могут знать коммерческое приложение Flexnet Licensing (©Macrovision). Это решение на основе клиент-серверной архитектуры для управления использованием так называемых приложений, поддерживающих Flexnet. Вы можете хранить лицензии более чем на один продукт на одном лицензионном сервере. Поскольку вам обычно нужно покупать лицензии, а лицензии могут быть дорогими, было бы неплохо иметь решение для мониторинга, чтобы видеть использование ценных лицензий, будь то недоиспользованные (так что деньги тратятся впустую) или всегда полностью использованные (так что вы можете подозревать, что иногда люди не могут выполнять свою работу или только с задержкой), что также является расточительством ресурсов.
Насколько я знаю, существуют коммерческие приложения для выполнения таких отчетов, но опять же вам нужно потратить деньги. Почему бы не построить простую систему самостоятельно, которая показывает текущее и прошлое использование в стиле “MRTG”?
Предварительная заметка + Отказ от ответственности
В этом руководстве я собираюсь использовать некоторые скрипты, а именно Shell- и Python-скрипты. Я думаю, что все приложение должно работать на любом Linux, я делал это на CentOS и Ubuntu. Нам нужно программное обеспечение веб-сервера, которое может запускать CGI-скрипты, я использовал известный Apache и также THTTPD, но я верю, что любое программное обеспечение веб-сервера должно быть в состоянии запустить это приложение. Это также отличное расширение для моего предыдущего устройства мониторинга сети.
Следующее руководство описывает способ, которым я реализовал свое решение, оно написано в стиле кулинарного рецепта. Я не могу гарантировать, что вы сможете реализовать аналогичное решение.
1. Архитектура
Архитектура решения довольно проста, смотрите изображение ниже:

Мы оставляем лицензионный сервер нетронутым, но получаем необходимую информацию через сеть. Для этого мы используем программу lmutil, которая принадлежит программному обеспечению Flexnet и существует не только в версии для Windows, но и в версии для Linux. Насколько я знаю, старые версии lmutil также были доступны для HP/UX, Solaris и AIX, так что есть шансы, что также системы, работающие на одной из этих ОС, могут быть использованы для построения системы мониторинга, но я не пробовал.
Вывод lmutil фильтруется таким образом, что вся релевантная информация может быть помещена в одну или несколько баз данных rrd, я использовал одну базу данных для каждой лицензии. rrd также используется для создания графиков, непосредственно в подкаталоге программного обеспечения веб-сервера, откуда их можно удобно показать в веб-браузере.
2. Опрашивание лицензионного сервера
Я скопировал последнюю версию lmutil в /usr/local/bin и проверил, является ли она исполняемой:
# ls -l /usr/local/bin/lmutil-rwxr-xr-x 1 root root 309168 2008-01-08 00:45 /usr/local/bin/lmutilМы можем проверить, существуют ли все общие библиотеки, с которыми связана lmutil, на нашей системе:
# ldd /usr/local/bin/lmutil linux-gate.so.1 => (0xf7796000)
libpthread.so.0 => /lib32/libpthread.so.0 (0xf7760000)
libdl.so.2 => /lib32/libdl.so.2 (0xf775c000)
libc.so.6 => /lib32/libc.so.6 (0xf7601000)
/lib/ld-linux.so.2 (0xf7797000)Будучи утилитой командной строки, lmutil не связана с большим количеством общих библиотек, так что шансы высоки, что они уже установлены.
Затем я создал небольшой скрипт для опроса всех лицензионных демонов с лицензиями для нескольких продуктов, работающих на лицензионном сервере, он выглядит так:
#!/bin/dash
# Продукт1
/usr/local/bin/lmutil lmstat -c 27000@licserv -a | /usr/local/sbin/lmrrd.py
# Продукт2
/usr/local/bin/lmutil lmstat -c 27001@licserv -a | /usr/local/sbin/lmrrd.pyЯ использовал /bin/dash в качестве интерпретатора для этого скрипта, потому что dash известен тем, что потребляет меньше ресурсов, чем bash, но не стесняйтесь использовать bash, если хотите. Лицензионные демоны для различных продуктов работают на разных портах. Вывод lmstat напрямую передается в Python-скрипт, где вся необходимая информация фильтруется и помещается в соответствующую базу данных rrd.
cron используется для установления цикла опроса в 5 минут. Поэтому создается запись в /etc/cron.d/ с именем rrd, которая выглядит так:
*/5 8-16 * * 1-5 root LANG=C LC_ALL=C /usr/local/sbin/licenses.shНас интересует только то, как используются лицензии с понедельника по пятницу и с 8 до 17 часов.
Но прежде чем это можно будет установить, нам сначала нужно создать скрипт lmrrd.py.
3. Скрипт lmrrd.py
rrdtool используется в качестве базы данных для этой задачи. rrdtool имеет различные интерфейсы сценариев, а именно от shell-, perl-, python- и tcl/tk-скриптов. Я использовал python из-за его чистого дизайна языка и универсальности.
Этот скрипт используется для фильтрации вывода lmutil и помещает релевантную информацию непосредственно в назначенную базу данных rrd. Он выглядит так:
#!/usr/bin/python
# Скрипт для фильтрации вывода lmstat, чтобы использовать его в качестве ввода для rrd
import sys, string, rrdtool
# поисковый термин, позиция актуального значения и позиция максимального значения в каждой строке
# db - это имя для файла базы данных rrd
search = [ { 'term':"Users of CL:", 'val':10, 'max':5, 'db':'CL' },
{ 'term':"Users of xyzabc:", 'val':10, 'max':5, 'db':'xyzabc' },
{ 'term':"Users of qwerty:", 'val':10, 'max':5, 'db':'qwerty' } ]
rrddir='/var/rrd/'
# читаем все строки из stdin
for line in sys.stdin.readlines():
# ищем в каждой строке поисковый термин из вышеуказанного массива
for x in search:
if x[ 'term' ] in line:
cols = line.split()
if not cols[ x[ 'max' ] ].isdigit() or not cols[ x[ 'val' ] ].isdigit():
print "0\n0\n0\n", x[ 'term' ]
# помещаем значения в назначенный файл базы данных rrd
rrdtool.update( rrddir + x[ 'db' ] + '.rrd', \
'--template=value:total', \
'N:' + cols[ x [ 'val' ] ] + ':' + cols[ x[ 'max' ] ] )Поисковые термины в массиве могут быть извлечены из вывода “lmutil”, также позиции актуальных и максимальных возможных значений количества лицензий.
Вам нужны привязки python для rrdtool, которые можно найти либо в репозитории пакетов вашей ОС, либо на сайте разработчика rrdtool.
Как реализовано, этот скрипт выполняется с правами root. Исходные файлы rrd должны быть доступны для чтения всем, потому что следующие скрипты, которые генерируют графики, работают только с разрешением владельца процессов http-сервера, обычно www-data или аналогичного.
Get new posts in your inbox
No spam. Unsubscribe anytime.