The Flex License Manager holds licenses for proprietary systems like Matlab, Maple and Ansys. If the license manager is down or if all licenses are in use, then those systems are rendered useless, during the downtime. Using Xymon monitor, the uptime can be increased considerably, and the efficiency of the license usage, is registered
automatically.
Client side
A shell script is to be installed on the client side. Also a few lines are added
to the client configuration file. The text in the shell script describes the
installation on the client side. After those changes, the client process
should be restarted.
Server side
Only configuration files are changed on the server side.
Two lines are changed in the configuration file hobbitserver.cfg:
TEST2RRD="cpu=la,disk, ... ,lines,flexlm=ncv"
GRAPHS="la,disk, ... ,lines,flexlm"
One line is added to the configuration file hobbitserver.cfg:
NCV_flexlm="*:GAUGE"
All of the file hobbitgraph.cfg.inc is inserted into the configuration file hobbitgraph.cfg. This should preferably be inserted at the end.
# $Id: hobbitgraph.cfg.inc,v 1.3 2008-06-27 18:37:22 annaj Exp $
[flexlm]
TITLE Matlab License counts
YAXIS #
DEF:matlab=flexlm.rrd:MATLAB:AVERAGE
LINE2:matlab#FF0000:Matlab
COMMENT:\n
GPRINT:matlab:LAST:Matlab \: %5.1lf%s (cur)
GPRINT:matlab:MAX: \: %5.1lf%s (max)
GPRINT:matlab:MIN: \: %5.1lf%s (min)
GPRINT:matlab:AVERAGE: \: %5.1lf%s (avg)\n
[flexlm1]
TITLE Matlab Extended License counts
YAXIS #
DEF:simulink=flexlm.rrd:SIMULINK:AVERAGE
LINE2:simulink#660000:Simulink
COMMENT:\n
GPRINT:simulink:LAST:Simulink \: %5.1lf%s (cur)
GPRINT:simulink:MAX: \: %5.1lf%s (max)
GPRINT:simulink:MIN: \: %5.1lf%s (min)
GPRINT:simulink:AVERAGE: \: %5.1lf%s (avg)\n
DEF:commtlb=flexlm.rrd:CommunicationToolb:AVERAGE
LINE2:commtlb#66CC66:Communication Toolb
COMMENT:\n
GPRINT:commtlb:LAST:Communication Toolb \: %5.1lf%s (cur)
GPRINT:commtlb:MAX: \: %5.1lf%s (max)
GPRINT:commtlb:MIN: \: %5.1lf%s (min)
GPRINT:commtlb:AVERAGE: \: %5.1lf%s (avg)\n
DEF:ctrltlb=flexlm.rrd:ControlToolbox:AVERAGE
LINE2:ctrltlb#6666CC:Control Toolbox
COMMENT:\n
GPRINT:ctrltlb:LAST:Control Toolbox \: %5.1lf%s (cur)
GPRINT:ctrltlb:MAX: \: %5.1lf%s (max)
GPRINT:ctrltlb:MIN: \: %5.1lf%s (min)
GPRINT:ctrltlb:AVERAGE: \: %5.1lf%s (avg)\n
DEF:fintlb=flexlm.rrd:FinancialToolbox:AVERAGE
LINE2:fintlb#FFBB00:Financial Toolbox
COMMENT:\n
GPRINT:fintlb:LAST:Financial Toolbox \: %5.1lf%s (cur)
GPRINT:fintlb:MAX: \: %5.1lf%s (max)
GPRINT:fintlb:MIN: \: %5.1lf%s (min)
GPRINT:fintlb:AVERAGE: \: %5.1lf%s (avg)\n
DEF:fztlb=flexlm.rrd:FuzzyToolbox:AVERAGE
LINE2:fztlb#00FF00:Fuzzy Toolbox
COMMENT:\n
GPRINT:fztlb:LAST:Fuzzy Toolbox \: %5.1lf%s (cur)
GPRINT:fztlb:MAX: \: %5.1lf%s (max)
GPRINT:fztlb:MIN: \: %5.1lf%s (min)
GPRINT:fztlb:AVERAGE: \: %5.1lf%s (avg)\n
DEF:imgtlb=flexlm.rrd:ImageToolbox:AVERAGE
LINE2:imgtlb#0000FF:Image Toolbox
COMMENT:\n
GPRINT:imgtlb:LAST:Image Toolbox \: %5.1lf%s (cur)
GPRINT:imgtlb:MAX: \: %5.1lf%s (max)
GPRINT:imgtlb:MIN: \: %5.1lf%s (min)
GPRINT:imgtlb:AVERAGE: \: %5.1lf%s (avg)\n
DEF:compiler=flexlm.rrd:Compiler:AVERAGE
LINE2:compiler#000066:Compiler
COMMENT:\n
GPRINT:compiler:LAST:Compiler \: %5.1lf%s (cur)
GPRINT:compiler:MAX: \: %5.1lf%s (max)
GPRINT:compiler:MIN: \: %5.1lf%s (min)
GPRINT:compiler:AVERAGE: \: %5.1lf%s (avg)\n
DEF:neuralnettlb=flexlm.rrd:NeuralNetworkTool:AVERAGE
LINE2:neuralnettlb#FFFF00:Neural Network Tool
COMMENT:\n
GPRINT:neuralnettlb:LAST:Neural Network Tool \: %5.1lf%s (cur)
GPRINT:neuralnettlb:MAX: \: %5.1lf%s (max)
GPRINT:neuralnettlb:MIN: \: %5.1lf%s (min)
GPRINT:neuralnettlb:AVERAGE: \: %5.1lf%s (avg)\n
DEF:opttlb=flexlm.rrd:OptimizationToolbo:AVERAGE
LINE2:opttlb#00FFFF:Optimization Toolbo
COMMENT:\n
GPRINT:opttlb:LAST:Optimization Toolbo \: %5.1lf%s (cur)
GPRINT:opttlb:MAX: \: %5.1lf%s (max)
GPRINT:opttlb:MIN: \: %5.1lf%s (min)
GPRINT:opttlb:AVERAGE: \: %5.1lf%s (avg)\n
DEF:distributedtlb=flexlm.rrd:DistribComputingT:AVERAGE
LINE2:distributedtlb#CC66CC:Distrib Computing T
COMMENT:\n
GPRINT:distributedtlb:LAST:Distrib Computing T \: %5.1lf%s (cur)
GPRINT:distributedtlb:MAX: \: %5.1lf%s (max)
GPRINT:distributedtlb:MIN: \: %5.1lf%s (min)
GPRINT:distributedtlb:AVERAGE: \: %5.1lf%s (avg)\n
DEF:pdetlb=flexlm.rrd:PDEToolbox:AVERAGE
LINE2:pdetlb#CCCC66:PDE Toolbox
COMMENT:\n
GPRINT:pdetlb:LAST:PDE Toolbox \: %5.1lf%s (cur)
GPRINT:pdetlb:MAX: \: %5.1lf%s (max)
GPRINT:pdetlb:MIN: \: %5.1lf%s (min)
GPRINT:pdetlb:AVERAGE: \: %5.1lf%s (avg)\n
DEF:signaltlb=flexlm.rrd:SignalToolbox:AVERAGE
LINE2:signaltlb#66CCCC:Signal Toolbox
COMMENT:\n
GPRINT:signaltlb:LAST:Signal Toolbox \: %5.1lf%s (cur)
GPRINT:signaltlb:MAX: \: %5.1lf%s (max)
GPRINT:signaltlb:MIN: \: %5.1lf%s (min)
GPRINT:signaltlb:AVERAGE: \: %5.1lf%s (avg)\n
DEF:simulctrl=flexlm.rrd:SimulinkControlDe:AVERAGE
LINE2:simulctrl#CCCC00:Simulink Control
COMMENT:\n
GPRINT:simulctrl:LAST:Simulink Control \: %5.1lf%s (cur)
GPRINT:simulctrl:MAX: \: %5.1lf%s (max)
GPRINT:simulctrl:MIN: \: %5.1lf%s (min)
GPRINT:simulctrl:AVERAGE: \: %5.1lf%s (avg)\n
DEF:stattlb=flexlm.rrd:StatisticsToolbox:AVERAGE
LINE2:stattlb#999966:Statistics Toolbox
COMMENT:\n
GPRINT:stattlb:LAST:Statistics Toolbox \: %5.1lf%s (cur)
GPRINT:stattlb:MAX: \: %5.1lf%s (max)
GPRINT:stattlb:MIN: \: %5.1lf%s (min)
GPRINT:stattlb:AVERAGE: \: %5.1lf%s (avg)\n
DEF:symboltlb=flexlm.rrd:SymbolicToolbox:AVERAGE
LINE2:symboltlb#660066:Symbolic Toolbox
COMMENT:\n
GPRINT:symboltlb:LAST:Symbolic Toolbox \: %5.1lf%s (cur)
GPRINT:symboltlb:MAX: \: %5.1lf%s (max)
GPRINT:symboltlb:MIN: \: %5.1lf%s (min)
GPRINT:symboltlb:AVERAGE: \: %5.1lf%s (avg)\n
DEF:idtlb=flexlm.rrd:IdentificationTool:AVERAGE
LINE2:idtlb#FF00FF:Identification Tool
COMMENT:\n
GPRINT:idtlb:LAST:Identification Tool \: %5.1lf%s (cur)
GPRINT:idtlb:MAX: \: %5.1lf%s (max)
GPRINT:idtlb:MIN: \: %5.1lf%s (min)
GPRINT:idtlb:AVERAGE: \: %5.1lf%s (avg)\n
[flexlm2]
TITLE Maple License counts
YAXIS #
DEF:maple11=flexlm.rrd:Maple11:AVERAGE
LINE2:maple11#330033:Maple 11
COMMENT:\n
GPRINT:maple11:LAST:Maple 11 \: %5.1lf%s (cur)
GPRINT:maple11:MAX: \: %5.1lf%s (max)
GPRINT:maple11:MIN: \: %5.1lf%s (min)
GPRINT:maple11:AVERAGE: \: %5.1lf%s (avg)\n
DEF:maplexls=flexlm.rrd:Maple11Excel:AVERAGE
LINE2:maplexls#003333:Maple 11 Excel
COMMENT:\n
GPRINT:maplexls:LAST:Maple 11 Excel \: %5.1lf%s (cur)
GPRINT:maplexls:MAX: \: %5.1lf%s (max)
GPRINT:maplexls:MIN: \: %5.1lf%s (min)
GPRINT:maplexls:AVERAGE: \: %5.1lf%s (avg)\n
DEF:mapleread=flexlm.rrd:MapleReader11:AVERAGE
LINE2:mapleread#000033:Maple Reader 11
COMMENT:\n
GPRINT:mapleread:LAST:Maple Reader 11 \: %5.1lf%s (cur)
GPRINT:mapleread:MAX: \: %5.1lf%s (max)
GPRINT:mapleread:MIN: \: %5.1lf%s (min)
GPRINT:mapleread:AVERAGE: \: %5.1lf%s (avg)\n
[flexlm3]
TITLE Abacus License counts
YAXIS #
DEF:abaqus=flexlm.rrd:abaqus:AVERAGE
LINE2:abaqus#006600:abaqus
COMMENT:\n
GPRINT:abaqus:LAST:abaqus \: %5.1lf%s (cur)
GPRINT:abaqus:MAX: \: %5.1lf%s (max)
GPRINT:abaqus:MIN: \: %5.1lf%s (min)
GPRINT:abaqus:AVERAGE: \: %5.1lf%s (avg)\n
DEF:aqua=flexlm.rrd:aqua:AVERAGE
LINE2:aqua#660000:aqua
COMMENT:\n
GPRINT:aqua:LAST:aqua \: %5.1lf%s (cur)
GPRINT:aqua:MAX: \: %5.1lf%s (max)
GPRINT:aqua:MIN: \: %5.1lf%s (min)
GPRINT:aqua:AVERAGE: \: %5.1lf%s (avg)\n
DEF:design=flexlm.rrd:design:AVERAGE
LINE2:design#330000:design
COMMENT:\n
GPRINT:design:LAST:design \: %5.1lf%s (cur)
GPRINT:design:MAX: \: %5.1lf%s (max)
GPRINT:design:MIN: \: %5.1lf%s (min)
GPRINT:design:AVERAGE: \: %5.1lf%s (avg)\n
DEF:parallel=flexlm.rrd:parallel:AVERAGE
LINE2:parallel#003300:parallel
COMMENT:\n
GPRINT:parallel:LAST:parallel \: %5.1lf%s (cur)
GPRINT:parallel:MAX: \: %5.1lf%s (max)
GPRINT:parallel:MIN: \: %5.1lf%s (min)
GPRINT:parallel:AVERAGE: \: %5.1lf%s (avg)\n
DEF:cae=flexlm.rrd:cae:AVERAGE
LINE2:cae#000066:cae
COMMENT:\n
GPRINT:cae:LAST:cae \: %5.1lf%s (cur)
GPRINT:cae:MAX: \: %5.1lf%s (max)
GPRINT:cae:MIN: \: %5.1lf%s (min)
GPRINT:cae:AVERAGE: \: %5.1lf%s (avg)\n
DEF:cadparasol=flexlm.rrd:cadporterparasolid:AVERAGE
LINE2:cadparasol#660066:cadporter parasolid
COMMENT:\n
GPRINT:cadparasol:LAST:cadporter parasolid \: %5.1lf%s (cur)
GPRINT:cadparasol:MAX: \: %5.1lf%s (max)
GPRINT:cadparasol:MIN: \: %5.1lf%s (min)
GPRINT:cadparasol:AVERAGE: \: %5.1lf%s (avg)\n
DEF:standart=flexlm.rrd:standard:AVERAGE
LINE2:standart#666600:standard
COMMENT:\n
GPRINT:standart:LAST:standard \: %5.1lf%s (cur)
GPRINT:standart:MAX: \: %5.1lf%s (max)
GPRINT:standart:MIN: \: %5.1lf%s (min)
GPRINT:standart:AVERAGE: \: %5.1lf%s (avg)\n
DEF:explicit=flexlm.rrd:explicit:AVERAGE
LINE2:explicit#006666:explicit
COMMENT:\n
GPRINT:explicit:LAST:explicit \: %5.1lf%s (cur)
GPRINT:explicit:MAX: \: %5.1lf%s (max)
GPRINT:explicit:MIN: \: %5.1lf%s (min)
GPRINT:explicit:AVERAGE: \: %5.1lf%s (avg)\n
DEF:foundation=flexlm.rrd:foundation:AVERAGE
LINE2:foundation#333300:foundation
COMMENT:\n
GPRINT:foundation:LAST:foundation \: %5.1lf%s (cur)
GPRINT:foundation:MAX: \: %5.1lf%s (max)
GPRINT:foundation:MIN: \: %5.1lf%s (min)
GPRINT:foundation:AVERAGE: \: %5.1lf%s (avg)\n
After those changes have been made to the Xymon Monitor server configuration files,
the server process should be restarted.
To get all the graphs, in trends, the bb-hosts TRENDS tag needs to be added for each monitored Flex License Manager server eg:
10.0.0.10 host.example.net # TRENDS:*,flexlm:flexlm|flexlm1|flexlm2|flexlm3
#!/bin/sh
# $Id: flexlm,v 1.10 2008-06-20 12:54:42 annaj Exp $
##################################################################
# #
# flexlm client module for Xymon monitor V 1.0 #
# #
# Copyright (C) 2008 Anna Jonna Armannsdottir #
# #
# Actually this is after the recipie given in: #
# http://www.hswn.dk/hobbit/help/howtograph.html #
# #
# This program is free software; you can redistribute it and/or #
# modify it under the terms of the GNU General Public License #
# as published by the Free Software Foundation; either version 2 #
# of the License, or (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful,#
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public #
# License along with this program; if not, write to the #
# Free Software Foundation, Inc., 51 Franklin Street, #
# Fifth Floor, Boston, MA 02110-1301, USA. #
# #
# This file is to be installed on each client that is to be #
# monitored for Flex License Manager. #
# The link above says it all, but here is a quick install: #
# Find the directory where the program lmstat is. Change the #
# variable LMSTATDIR below to that directory. That is the only #
# thing a user needs to change in this script. Copy this #
# script to ~hobbit/client/ext/ #
# and make it executable for Xymon. #
# #
# For testing and verifying: Run the script in a shell and #
# check that the output is in /tmp/lic.txt #
# #
# In the file: #
# ~hobbit/client/etc/clientlaunch.cfg #
# Add the following section: #
# [flexlminfo] #
# ENVFILE $HOBBITCLIENTHOME/etc/hobbitclient.cfg #
# CMD $HOBBITCLIENTHOME/ext/flexlm #
# INTERVAL 5m #
# #
# This is all that needs to be done on the client side. #
# #
##################################################################
#
LMSTATDIR="/opt/matlab/etc"
LICENSEGREP="\: \(Total of"
# ": (Total of"
# "\: \(Total of"
# "Total of"
# for testing out of Xymon environment
if [ -z "$EGREP" ]; then
EGREP="/bin/egrep"
fi
if [ -z "$SED" ]; then
SED="/bin/sed"
fi
if [ -z "$AWK" ]; then
AWK="/usr/bin/awk"
fi
if [ -z "$LMSTATDIR" ]; then
LMSTATDIR="/opt/matlab/etc"
fi
if [ -z "$LICENSEGREP" ]; then
LICENSEGREP="Total of"
fi
# The license manager has a component that is
# used to deliver output to a file
(
${LMSTATDIR}/lmstat -a
) > /tmp/flexlm.txt
# The output from the license manager is
# searched for lines that count actual license
# usage. The result is delivered in /tmp/lic.txt file.
(
$EGREP "${LICENSEGREP}" | \
$SED 's/://' | \
$AWK '{printf "%.19s : %d \n", $3, $11 }'
)< /tmp/flexlm.txt > /tmp/lic.txt
# The actual state of the license manager is checked
# and prepared as part of report to Xymon monitor.
UPTEST=`cat /tmp/flexlm.txt | $EGREP ".*MLM: UP.*$"`
LICSERVTEST=`cat /tmp/flexlm.txt | $EGREP ".*license server UP.*$" | $SED 's/://' | $AWK '{printf "%s\n", $1 }'`
if [ -n "$BB" ]; then
if [ -n "$UPTEST" ]; then
SSTATUS="Licenses OK"
COLOUR="green"
FLEXLMSTATE=`cat /tmp/lic.txt`
if [ -n "$LICSERVTEST" ]; then
SSTATUS="Licenses on $LICSERVTEST OK"
fi
else
SSTATUS="DOWN"
COLOUR="red"
FLEXLMSTATE=`cat /tmp/flexlm.txt`
fi
# Finally, the gathered information is sent to the Xymon Monitor.
$BB $BBDISP "status $MACHINE.flexlm $COLOUR `date` $SSTATUS
${FLEXLMSTATE}
"
fi
Known Bugs and Issues
The monitor will send an alert if the monitored Flex LM is down, it will NOT send alerts if a partner Flex LM is down.