Monitoreo de Licencias · 5 min read · Jan 13, 2026
Monitoreo de Licencias Flexnet Con rrdtool
Monitoreo de Licencias Flexnet Con rrdtool
Intro
Algunos de ustedes pueden conocer la aplicación comercial de Licencias Flexnet (©Macrovision). Es una solución basada en cliente-servidor para gestionar el uso de las llamadas aplicaciones habilitadas para Flexnet. Puedes tener licencias de más de un producto en un servidor de licencias. Dado que típicamente tienes que comprar licencias y estas pueden ser costosas, sería bueno tener una solución de monitoreo, para ver la utilización de las preciadas licencias, ya sea que estén subutilizadas (por lo que se desperdicia dinero) o siempre estén completamente utilizadas (lo que puede hacer que a veces las personas no puedan hacer su trabajo, o solo con retraso), lo que también es un desperdicio de recursos.
Hasta donde sé, hay aplicaciones comerciales para realizar tales informes, pero nuevamente tienes que gastar dinero. ¿Por qué no construir un sistema simple tú mismo, que muestre el uso actual y pasado en un “estilo MRTG”?
Nota Preliminar + Descargo de Responsabilidad
En este tutorial voy a usar algunos scripts, a saber, scripts de Shell y Python. Creo que toda la aplicación debería funcionar en cualquier Linux, lo hice en CentOS y Ubuntu. Necesitamos un software de servidor web que sea capaz de ejecutar scripts CGI, he utilizado el conocido Apache y también THTTPD, pero creo que cualquier software de servidor web debería ser capaz de ejecutar esta aplicación. También es una extensión perfecta para mi antiguo Appliance de Monitoreo de Red.
El siguiente tutorial describe la forma en que realicé mi solución, está escrito en una especie de estilo de receta de cocina. No puedo garantizar que puedas realizar una solución similar.
1. Arquitectura
La arquitectura de la solución es bastante simple, ve la imagen a continuación:

Dejamos el servidor de licencias intacto, pero obtenemos la información necesaria a través de la red. Para ello utilizamos el programa lmutil que pertenece al software Flexnet y no solo existe en una versión de Windows, sino también en una versión de Linux. Hasta donde sé, versiones más antiguas de lmutil también han estado disponibles para HP/UX, Solaris y AIX, por lo que hay posibilidades de que también se puedan utilizar sistemas que ejecuten uno de esos sistemas operativos para construir el sistema de monitoreo, pero no lo he probado.
La salida de lmutil se filtra de tal manera que toda la información relevante se puede poner en una o más bases de datos rrd, he utilizado una base de datos para cada licencia. rrd también se utiliza para producir los gráficos, directamente en un subdirectorio del software del servidor web, desde donde se puede mostrar cómodamente en un navegador web.
2. Consultando el servidor de licencias
He copiado una versión reciente de lmutil en /usr/local/bin, y verificado si es ejecutable:
# ls -l /usr/local/bin/lmutil-rwxr-xr-x 1 root root 309168 2008-01-08 00:45 /usr/local/bin/lmutilPodemos verificar si todas las bibliotecas compartidas a las que está vinculado lmutil existen en nuestro 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)Siendo una utilidad de línea de comandos, lmutil no está vinculado a muchas bibliotecas compartidas, por lo que las posibilidades son altas de que ya estén instaladas.
Luego he construido un pequeño script para consultar todos los demonios de licencias con licencias para varios productos que se ejecutan en el servidor de licencias, se ve así:
#!/bin/dash
# Producto1
/usr/local/bin/lmutil lmstat -c 27000@licserv -a | /usr/local/sbin/lmrrd.py
# Producto2
/usr/local/bin/lmutil lmstat -c 27001@licserv -a | /usr/local/sbin/lmrrd.pyHe utilizado /bin/dash como intérprete para este script, porque se sabe que dash consume menos recursos que bash, pero siéntete libre de usar bash si lo prefieres. Los demonios de licencias para los varios productos se ejecutan en diferentes puertos. La salida de lmstat se canaliza directamente a un script de Python, donde se filtra toda la información necesaria y se coloca en la base de datos rrd apropiada.
cron se utiliza para establecer un ciclo de consulta de 5 minutos. Por lo tanto, se crea una entrada en /etc/cron.d/ llamada rrd que se ve así:
*/5 8-16 * * 1-5 root LANG=C LC_ALL=C /usr/local/sbin/licenses.shSolo nos interesa cómo se utilizan las licencias de lunes a viernes y de 8 a.m. a 5 p.m.
Pero antes de que esto pueda establecerse, primero tenemos que crear el script lmrrd.py.
3. El script lmrrd.py
rrdtool se utiliza como base de datos para esta tarea. rrdtool tiene diferentes interfaces de scripting, a saber, desde scripts de shell, perl, python y tcl/tk. He utilizado python debido a su diseño de lenguaje limpio y versatilidad.
Este script se utiliza para filtrar la salida de lmutil y coloca la información relevante directamente en la base de datos rrd asignada. Se ve así:
#!/usr/bin/python
# Script para filtrar la salida de lmstat para usarla como entrada para rrd
import sys, string, rrdtool
# término de búsqueda, posición del valor actual y posición del valor máximo en cada línea
# db es el nombre del archivo de base de datos 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/'
# leer todas las líneas de stdin
for line in sys.stdin.readlines():
# buscar en cada línea el término de búsqueda del array anterior
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' ]
# poner los valores en el archivo de base de datos rrd asignado
rrdtool.update( rrddir + x[ 'db' ] + '.rrd', \
'--template=value:total', \
'N:' + cols[ x [ 'val' ] ] + ':' + cols[ x[ 'max' ] ] )Los términos de búsqueda en el array podrían extraerse de la salida de “lmutil”, así como las posiciones de los valores actuales y máximos posibles del número de licencias.
Necesitas los enlaces de python de rrdtool, que se pueden encontrar en el repositorio de paquetes de tu sistema operativo, o en el sitio web del mantenedor de rrdtool.
Como se implementó, este script se ejecuta con permisos de root. Los archivos rrd originales deben ser legibles por todos, porque los siguientes scripts que generan los gráficos solo se ejecutan bajo el permiso del propietario de los procesos del servidor http, generalmente www-data o similar.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.