Monitoraggio Licenze · 5 min read · Jan 13, 2026
Monitoraggio delle licenze Flexnet con rrdtool
Monitoraggio delle licenze Flexnet con rrdtool
Introduzione
Alcuni di voi potrebbero conoscere l’applicazione commerciale Flexnet Licensing (©Macrovision). È una soluzione basata su client-server per gestire l’uso delle cosiddette applicazioni abilitate a Flexnet. È possibile detenere licenze di più di un prodotto su un server di licenze. Poiché tipicamente è necessario acquistare licenze e queste possono essere costose, sarebbe utile avere una soluzione di monitoraggio per vedere l’utilizzo delle preziose licenze, se sono sottoutilizzate (quindi si sprecano soldi) o sono sempre completamente utilizzate (così da poter sospettare che a volte le persone non possano svolgere il proprio lavoro, o solo in ritardo), il che è anche uno spreco di risorse.
Per quanto ne so, ci sono applicazioni commerciali per eseguire tali report, ma di nuovo è necessario spendere soldi. Perché non costruire un semplice sistema da soli, che mostri l’uso attuale e passato in uno “stile MRTG”?
Nota preliminare + Dichiarazione di non responsabilità
In questo tutorial utilizzerò alcuni script, ovvero script Shell e Python. Penso che l’intera applicazione dovrebbe funzionare su ogni Linux, l’ho fatto su CentOS e Ubuntu. Abbiamo bisogno di un software per server web in grado di eseguire script CGI, ho utilizzato il noto Apache e anche THTTPD, ma credo che ogni software per server web dovrebbe essere in grado di eseguire questa applicazione. È anche un’estensione perfetta per il mio precedente Appliance di Monitoraggio della Rete.
Il seguente tutorial descrive il modo in cui ho realizzato la mia soluzione, è scritto in una sorta di stile ricetta. Non posso garantire che tu possa realizzare una soluzione simile.
1. Architettura
L’architettura della soluzione è piuttosto semplice, vedere l’immagine qui sotto:

Lasciamo il server di licenze intatto, ma otteniamo le informazioni necessarie attraverso la rete. Pertanto utilizziamo il programma lmutil che appartiene al software Flexnet e non esiste solo in una versione Windoze, ma anche in una versione Linux. Per quanto ne so, versioni più vecchie di lmutil sono state disponibili anche per HP/UX, Solaris e AIX, quindi ci sono possibilità che anche i sistemi che eseguono uno di quei sistemi operativi possano essere utilizzati per costruire il sistema di monitoraggio, ma non ho provato.
L’output di lmutil è filtrato in modo tale che tutte le informazioni rilevanti possano essere inserite in uno o più database rrd, ho utilizzato un database per ogni licenza. rrd è anche utilizzato per produrre i grafici, direttamente in una sottodirectory del software del server web, da dove può essere mostrato comodamente in un browser web.
2. Polling del server di licenze
Ho copiato una versione recente di lmutil in /usr/local/bin e ho controllato se è eseguibile:
# ls -l /usr/local/bin/lmutil-rwxr-xr-x 1 root root 309168 2008-01-08 00:45 /usr/local/bin/lmutilPossiamo controllare se tutte le librerie condivise a cui lmutil è collegato esistono sul nostro sistema:
# 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)Essendo un’utilità da riga di comando, lmutil non è collegato a molte librerie condivise, quindi le possibilità sono alte che siano già installate.
Poi ho costruito un piccolo script per interrogare tutti i demoni di licenza con licenze per diversi prodotti in esecuzione sul server di licenze, che appare così:
#!/bin/dash
# Prodotto1
/usr/local/bin/lmutil lmstat -c 27000@licserv -a | /usr/local/sbin/lmrrd.py
# Prodotto2
/usr/local/bin/lmutil lmstat -c 27001@licserv -a | /usr/local/sbin/lmrrd.pyHo utilizzato /bin/dash come interprete per questo script, perché dash è noto per consumare meno risorse rispetto a bash, ma sentiti libero di usare bash se lo desideri. I demoni di licenza per i vari prodotti sono in esecuzione su porte diverse. L’output di lmstat è direttamente inviato a uno script Python, dove tutte le informazioni necessarie vengono filtrate e inserite nel database rrd appropriato.
cron è utilizzato per stabilire un ciclo di polling di 5 minuti. Pertanto, viene creato un’entrata in /etc/cron.d/ chiamata rrd che appare così:
*/5 8-16 * * 1-5 root LANG=C LC_ALL=C /usr/local/sbin/licenses.shSiamo interessati solo a come le licenze sono utilizzate dal lunedì al venerdì e dalle 8:00 alle 17:00.
Ma prima che questo possa essere stabilito, dobbiamo prima creare lo script lmrrd.py.
3. Lo script lmrrd.py
rrdtool è utilizzato come database per questo compito. rrdtool ha diverse interfacce di scripting, ovvero da script shell, perl, python e tcl/tk. Ho utilizzato python per il suo design pulito del linguaggio e versatilità.
Questo script viene utilizzato per filtrare l’output di lmutil e inserire le informazioni rilevanti direttamente nel database rrd assegnato. Appare così:
#!/usr/bin/python
# Script per filtrare l'output di lmstat da utilizzare come input per rrd
import sys, string, rrdtool
# termine di ricerca, posizione del valore attuale e posizione del valore massimo in ogni riga
# db è il nome del file 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/'
# leggi tutte le righe dallo stdin
for line in sys.stdin.readlines():
# cerca in ogni riga il termine di ricerca dell'array sopra
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' ]
# inserisci i valori nel file db rrd assegnato
rrdtool.update( rrddir + x[ 'db' ] + '.rrd', \
'--template=value:total', \
'N:' + cols[ x [ 'val' ] ] + ':' + cols[ x[ 'max' ] ] )I termini di ricerca nell’array possono essere estratti dall’output di “lmutil”, così come le posizioni dei valori attuali e massimi del numero di licenze.
Hai bisogno dei binding python di rrdtool, che possono essere trovati nel repository dei pacchetti del tuo sistema operativo, o sul sito web del manutentore di rrdtool.
Come implementato, questo script viene eseguito con permessi di root. I file rrd originari dovrebbero essere leggibili da tutti, perché gli script successivi che generano i grafici vengono eseguiti solo con il permesso del proprietario dei processi del server http, di solito www-data o simili.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.