使用rrdtool进行Flexnet许可监控
介绍
你们中有些人可能会知道商业Flexnet许可应用程序(©Macrovision)。 这是一个基于客户端 - 服务器的解决方案,用于管理所谓的支持Flexnet的应用程序的使用。 您可以在一个许可证服务器上持有多个产品的许可证。 由于您通常必须购买许可证和许可证可能很昂贵,因此,要获得监控解决方案,查看宝贵许可证的使用情况,以及未被充分利用的资金(因此浪费资金)或始终被充分利用(因此您可以怀疑有时人们不能做他们的工作,或者只是延迟),这也是浪费资源。
据我所知,有执行这些报告的商业申请,但再次你必须花钱。 为什么不自己构建一个简单的系统,它显示了“ MRTG风格”中的实际和过去使用情况?
初步注释+免责声明
在本教程中,我将使用一些脚本,即Shell和Python脚本。 我认为整个应用程序应该运行在每个Linux上,我在CentOS和Ubuntu上执行 。 我们需要一个可以运行CGI脚本的Web 服务器软件 ,我使用了众所周知的Apache和THTTPD ,但我相信每个webserver软件都应该能够运行这个应用程序。 它也是我以前的网络监控设备的完美扩展 。
以下教程描述了我实现我的解决方案的方式,它是用一种烹饪Recipe风格写的。 我无法保证您可以实现类似的解决方案。
建筑
解决方案的架构很简单,见下图:
我们将授权服务器保持原样,但通过网络获取必要的信息。 因此,我们使用属于Flexnet软件的lmutil程序,不仅存在于Windoze版本中,还存在于Linux版本中。 据我所知,lmutil的旧版本也可用于HP / UX,Solaris和AIX,所以有机会运行其中一个操作系统可以用于构建监控系统,但是我还没有尝试过。
lmutil的输出被过滤,所有相关信息都可以放入一个或多个rrd数据库,我已经为每个许可证使用了一个数据库。 rrd也用于直接在Web服务器软件的子目录中生成图形,从而可以在web浏览器中轻松显示。
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 # Product1 /usr/local/bin/lmutil lmstat -c 27000@licserv -a | /usr/local/sbin/lmrrd.py # Product2 /usr/local/bin/lmutil lmstat -c 27001@licserv -a | /usr/local/sbin/lmrrd.py
我已经使用/ bin / dash
作为这个脚本的解释器,因为破折号消耗的资源比bash少,但是如果你喜欢,可以随便使用bash。 各种产品的许可证在不同的端口上运行。 lmstat的输出直接输入到Python脚本中,其中需要的所有信息被过滤掉并放入适当的rrd数据库中。
cron用于建立一个5分钟的轮询。 因此,名为rrd的
/etc/cron.d/中的条目被创建,如下所示:
*/5 8-16 * * 1-5 root LANG=C LC_ALL=C /usr/local/sbin/licenses.sh
我们只对星期一到星期五以及上午8点至下午5点使用许可证感兴趣。
但在此之前,我们首先必须创建lmrrd.py脚本。
3. lmrrd.py脚本
rrdtool用作此任务的数据库。 rrdtool具有不同的脚本接口,即从shell,perl,python和tcl / tk脚本。 我使用python因为它是干净的语言设计和多功能性。
此脚本用于过滤lmutil的输出,并将相关信息直接放入指定的rrd数据库。 看起来像:
#!/usr/bin/python # Script to filter the output of lmstat to use it as input for rrd import sys, string, rrdtool # searchterm, position of actual value and position of max value in every line # db is the name for the rrd dbfile 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/' # read all lines from stdin for line in sys.stdin.readlines(): # search in every line for the searchterm out of the above array 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' ] # put the values in the assigned rrd dbfile rrdtool.update( rrddir + x[ 'db' ] + '.rrd', \ '--template=value:total', \ 'N:' + cols[ x [ 'val' ] ] + ':' + cols[ x[ 'max' ] ] )
阵列中的搜索项可以提取“lmutil”的输出,也可以提取许可证数量的实际值和最大可能值的位置。
您需要rrdtool的python绑定,可以在操作系统的软件包存储库中找到,也可以在rrdtool的维护者的网站上找到。
实现后,此脚本以root权限运行。 原始rrd文件应该是世界可读的,因为生成图的以下脚本仅在http-server进程的所有者的许可下运行,通常是www数据
或类似的。