Monitoramento · 5 min read · Jan 13, 2026
Monitoramento de Licenças Flexnet Com rrdtool
Monitoramento de Licenças Flexnet Com rrdtool
Introdução
Alguns de vocês podem conhecer o aplicativo comercial Flexnet Licensing (©Macrovision). É uma solução baseada em cliente-servidor para gerenciar o uso de aplicativos chamados Flexnet-enabled. Você pode ter licenças de mais de um produto em um servidor de licenças. Como você normalmente precisa comprar licenças e elas podem ser caras, seria bom ter uma solução de monitoramento para ver a utilização das preciosas licenças, se estão subutilizadas (então o dinheiro é desperdiçado) ou estão sempre totalmente utilizadas (para que você possa suspeitar que às vezes as pessoas não conseguem fazer seu trabalho, ou apenas com atraso), o que também é um desperdício de recursos.
Até onde sei, existem aplicativos comerciais para realizar tais relatórios, mas novamente você tem que gastar dinheiro. Por que não construir um sistema simples você mesmo, que mostre o uso atual e passado em um “estilo MRTG”?
Nota Preliminar + Isenção de Responsabilidade
Neste tutorial, vou usar alguns scripts, nomeadamente scripts Shell e Python. Eu acho que toda a aplicação deve funcionar em qualquer Linux, eu fiz isso no CentOS e Ubuntu. Precisamos de um software de servidor web que seja capaz de executar scripts CGI, eu usei o bem conhecido Apache e também o THTTPD, mas acredito que qualquer software de servidor web deve ser capaz de executar esta aplicação. É também uma extensão perfeita para meu antigo Appliance de Monitoramento de Rede.
O seguinte tutorial descreve a maneira como realizei minha solução, está escrito em um estilo de receita de cozinha. Não posso garantir que você consiga realizar uma solução semelhante.
1. Arquitetura
A arquitetura da solução é bastante simples, veja a imagem abaixo:

Deixamos o servidor de licenças intocado, mas obtemos as informações necessárias pela rede. Para isso, usamos o programa lmutil que pertence ao software Flexnet e não existe apenas em uma versão Windows, mas também em uma versão Linux. Até onde sei, versões mais antigas do lmutil também estiveram disponíveis para HP/UX, Solaris e AIX, então há chances de que sistemas executando um desses SOs possam ser usados para construir o sistema de monitoramento, mas eu não tentei.
A saída do lmutil é filtrada de forma que todas as informações relevantes possam ser colocadas em um ou mais bancos de dados rrd, eu usei um banco de dados para cada licença. rrd também é usado para produzir os gráficos, diretamente em um subdiretório do software do servidor web, de onde pode ser mostrado confortavelmente em um navegador web.
2. Coletando dados do servidor de licenças
Copiei uma versão recente do lmutil para /usr/local/bin e verifiquei se é executável:
# ls -l /usr/local/bin/lmutil-rwxr-xr-x 1 root root 309168 2008-01-08 00:45 /usr/local/bin/lmutilPodemos verificar se todas as bibliotecas compartilhadas das quais o lmutil está vinculado existem em nosso 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)Sendo uma utilidade de linha de comando, o lmutil não está vinculado a muitas bibliotecas compartilhadas, então as chances são altas de que elas já estejam instaladas.
Então, construí um pequeno script para coletar dados de todos os daemons de licenciamento com licenças para vários produtos executando no servidor de licenças, que se parece com:
#!/bin/dash
# Produto1
/usr/local/bin/lmutil lmstat -c 27000@licserv -a | /usr/local/sbin/lmrrd.py
# Produto2
/usr/local/bin/lmutil lmstat -c 27001@licserv -a | /usr/local/sbin/lmrrd.pyUsei /bin/dash como interpretador para este script, porque o dash é conhecido por consumir menos recursos do que o bash, mas sinta-se à vontade para usar bash se preferir. Os daemons de licenciamento para os vários produtos estão executando em diferentes portas. A saída do lmstat é diretamente canalizada para um script Python, onde todas as informações necessárias são filtradas e colocadas no banco de dados rrd apropriado.
O cron é usado para estabelecer um ciclo de coleta de 5 minutos. Portanto, uma entrada em /etc/cron.d/ chamada rrd é criada, que se parece com:
*/5 8-16 * * 1-5 root LANG=C LC_ALL=C /usr/local/sbin/licenses.shEstamos apenas interessados em como as licenças são utilizadas de segunda a sexta-feira e das 8h às 17h.
Mas antes que isso possa ser estabelecido, primeiro temos que criar o script lmrrd.py.
3. O script lmrrd.py
rrdtool é usado como banco de dados para esta tarefa. O rrdtool tem diferentes interfaces de script, nomeadamente de shell, perl, python e tcl/tk scripts. Eu usei python por causa de seu design de linguagem limpo e versatilidade.
Este script é usado para filtrar a saída do lmutil e coloca as informações relevantes diretamente no banco de dados rrd atribuído. Ele se parece com:
#!/usr/bin/python
# Script para filtrar a saída do lmstat para usá-la como entrada para rrd
import sys, string, rrdtool
# termo de busca, posição do valor atual e posição do valor máximo em cada linha
# db é o nome do arquivo de banco de dados 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/'
# lê todas as linhas da entrada padrão
for line in sys.stdin.readlines():
# procura em cada linha pelo termo de busca do array acima
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' ]
# coloca os valores no arquivo de banco de dados rrd atribuído
rrdtool.update( rrddir + x[ 'db' ] + '.rrd', \
'--template=value:total', \
'N:' + cols[ x [ 'val' ] ] + ':' + cols[ x[ 'max' ] ] )Os termos de busca no array podem ser extraídos da saída do “lmutil”, assim como as posições dos valores atuais e máximos possíveis do número de licenças.
Você precisa das ligações python do rrdtool, que podem ser encontradas no repositório de pacotes do seu SO ou no site do mantenedor do rrdtool.
Como implementado, este script é executado com permissão de root. Os arquivos rrd de origem devem ser legíveis por todos, porque os seguintes scripts que geram os gráficos são executados apenas sob a permissão do proprietário dos processos do servidor http, geralmente www-data ou similar.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.