Lizenzüberwachung · 4 min read · Jan 13, 2026
Flexnet Lizenzüberwachung mit rrdtool
Flexnet Lizenzüberwachung mit rrdtool
Einleitung
Einige von Ihnen kennen möglicherweise die kommerzielle Flexnet-Lizenzanwendung (©Macrovision). Es handelt sich um eine client-serverbasierte Lösung zur Verwaltung der Nutzung sogenannter Flexnet-fähiger Anwendungen. Sie können Lizenzen für mehr als ein Produkt auf einem Lizenzserver halten. Da Sie in der Regel Lizenzen kaufen müssen und diese teuer sein können, wäre es schön, eine Überwachungslösung zu haben, um die Nutzung der wertvollen Lizenzen zu sehen, ob sie unterausgelastet sind (was Geld verschwendet) oder immer voll ausgelastet sind (so dass Sie vermuten können, dass manchmal Menschen ihre Arbeit nicht erledigen können oder nur verzögert), was ebenfalls eine Verschwendung von Ressourcen ist.
Soweit ich weiß, gibt es kommerzielle Anwendungen zur Erstellung solcher Berichte, aber auch hier müssen Sie Geld ausgeben. Warum nicht selbst ein einfaches System erstellen, das die aktuelle und vergangene Nutzung im “MRTG-Stil” anzeigt?
Vorbemerkung + Haftungsausschluss
In diesem Tutorial werde ich einige Skripte verwenden, nämlich Shell- und Python-Skripte. Ich denke, die gesamte Anwendung sollte auf jedem Linux laufen, ich habe es auf CentOS und Ubuntu gemacht. Wir benötigen eine Webserver-Software, die in der Lage ist, CGI-Skripte auszuführen. Ich habe den bekannten Apache und auch THTTPD verwendet, aber ich glaube, jede Webserver-Software sollte in der Lage sein, diese Anwendung auszuführen. Es ist auch eine perfekte Erweiterung für mein früheres Netzwerküberwachungsgerät.
Das folgende Tutorial beschreibt, wie ich meine Lösung realisiert habe, es ist im Stil eines Kochrezepts geschrieben. Ich kann keine Garantie geben, dass Sie eine ähnliche Lösung realisieren können.
1. Architektur
Die Architektur der Lösung ist recht einfach, siehe das Bild unten:

Wir lassen den Lizenzserver unberührt, holen uns aber die notwendigen Informationen über das Netzwerk. Dazu verwenden wir das Programm lmutil, das zur Flexnet-Software gehört und nicht nur in einer Windows-Version, sondern auch in einer Linux-Version existiert. Soweit ich weiß, waren ältere Versionen von lmutil auch für HP/UX, Solaris und AIX verfügbar, sodass es Chancen gibt, dass auch Systeme, die eines dieser Betriebssysteme ausführen, verwendet werden können, um das Überwachungssystem aufzubauen, aber ich habe es nicht ausprobiert.
Die Ausgabe von lmutil wird so gefiltert, dass alle relevanten Informationen in eine oder mehrere rrd-Datenbanken eingefügt werden können. Ich habe eine Datenbank für jede Lizenz verwendet. rrd wird auch verwendet, um die Grafiken zu erzeugen, direkt in einem Unterverzeichnis der Webserver-Software, von wo aus sie bequem in einem Webbrowser angezeigt werden können.
2. Abfragen des Lizenzservers
Ich habe eine aktuelle Version von lmutil in /usr/local/bin kopiert und überprüft, ob sie ausführbar ist:
# ls -l /usr/local/bin/lmutil-rwxr-xr-x 1 root root 309168 2008-01-08 00:45 /usr/local/bin/lmutilWir können überprüfen, ob alle gemeinsam genutzten Bibliotheken, gegen die lmutil verlinkt ist, auf unserem System vorhanden sind:
# 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)Da lmutil ein Befehlszeilenprogramm ist, ist es nicht gegen viele gemeinsam genutzte Bibliotheken verlinkt, sodass die Chancen hoch sind, dass sie bereits installiert sind.
Dann habe ich ein kleines Skript zum Abfragen aller Lizenzdämons mit Lizenzen für mehrere Produkte, die auf dem Lizenzserver laufen, erstellt. Es sieht so aus:
#!/bin/dash
# Produkt1
/usr/local/bin/lmutil lmstat -c 27000@licserv -a | /usr/local/sbin/lmrrd.py
# Produkt2
/usr/local/bin/lmutil lmstat -c 27001@licserv -a | /usr/local/sbin/lmrrd.pyIch habe /bin/dash als Interpreter für dieses Skript verwendet, da bekannt ist, dass dash weniger Ressourcen verbraucht als bash, aber Sie können gerne bash verwenden, wenn Sie möchten. Die Lizenzdämons für die verschiedenen Produkte laufen auf unterschiedlichen Ports. Die Ausgabe von lmstat wird direkt in ein Python-Skript geleitet, in dem alle benötigten Informationen herausgefiltert und in die entsprechende rrd-Datenbank eingefügt werden.
cron wird verwendet, um einen Abfragezyklus von 5 Minuten einzurichten. Daher wird ein Eintrag in /etc/cron.d/ mit dem Namen rrd erstellt, der so aussieht:
*/5 8-16 * * 1-5 root LANG=C LC_ALL=C /usr/local/sbin/licenses.shWir sind nur daran interessiert, wie die Lizenzen von Montag bis Freitag und von 8 bis 17 Uhr genutzt werden.
Aber bevor dies eingerichtet werden kann, müssen wir zuerst das Skript lmrrd.py erstellen.
3. Das lmrrd.py-Skript
rrdtool wird als Datenbank für diese Aufgabe verwendet. rrdtool hat verschiedene Skript-Schnittstellen, nämlich von Shell-, Perl-, Python- und Tcl/Tk-Skripten. Ich habe Python wegen seines klaren Sprachdesigns und seiner Vielseitigkeit verwendet.
Dieses Skript wird verwendet, um die Ausgabe von lmutil zu filtern und die relevanten Informationen direkt in die zugewiesene rrd-Datenbank einzufügen. Es sieht so aus:
#!/usr/bin/python
# Skript zum Filtern der Ausgabe von lmstat, um sie als Eingabe für rrd zu verwenden
import sys, string, rrdtool
# Suchbegriff, Position des aktuellen Wertes und Position des maximalen Wertes in jeder Zeile
# db ist der Name für die rrd dbdatei
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/'
# alle Zeilen von stdin lesen
for line in sys.stdin.readlines():
# in jeder Zeile nach dem Suchbegriff aus dem obigen Array suchen
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' ]
# die Werte in die zugewiesene rrd dbdatei einfügen
rrdtool.update( rrddir + x[ 'db' ] + '.rrd', \
'--template=value:total', \
'N:' + cols[ x [ 'val' ] ] + ':' + cols[ x[ 'max' ] ] )Die Suchbegriffe im Array können aus der Ausgabe von “lmutil” extrahiert werden, ebenso wie die Positionen der aktuellen und der maximal möglichen Werte der Anzahl der Lizenzen.
Sie benötigen die Python-Bindings von rrdtool, die entweder im Paket-Repository Ihres Betriebssystems oder auf der Website des Maintainers von rrdtool zu finden sind.
Wie implementiert, wird dieses Skript mit Root-Rechten ausgeführt. Die ursprünglichen rrd-Dateien sollten für alle lesbar sein, da die folgenden Skripte, die die Grafiken erzeugen, nur unter der Berechtigung des Eigentümers der http-Serverprozesse, normalerweise www-data oder ähnlich, ausgeführt werden.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.