使用rrdtool进行Flexnet许可证监视

使用rrdtool进行Flexnet许可监控

介绍

你们中有些人可能会知道商业Flexnet许可应用程序(©Macrovision)。 这是一个基于客户端 - 服务器的解决方案,用于管理所谓的支持Flexnet的应用程序的使用。 您可以在一个许可证服务器上持有多个产品的许可证。 由于您通常必须购买许可证和许可证可能很昂贵,因此,要获得监控解决方案,查看宝贵许可证的使用情况,以及未被充分利用的资金(因此浪费资金)或始终被充分利用(因此您可以怀疑有时人们不能做他们的工作,或者只是延迟),这也是浪费资源。

据我所知,有执行这些报告的商业申请,但再次你必须花钱。 为什么不自己构建一个简单的系统,它显示了“ MRTG风格”中的实际和过去使用情况?

初步注释+免责声明

在本教程中,我将使用一些脚本,即Shell和Python脚本。 我认为整个应用程序应该运行在每个Linux上,我在CentOSUbuntu上执行 。 我们需要一个可以运行CGI脚本的Web 服务器软件 ,我使用了众所周知的ApacheTHTTPD ,但我相信每个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数据或类似的。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏