라이센스 모니터링 · 3 min read · Jan 13, 2026

Flexnet 라이센스 모니터링과 rrdtool

Flexnet 라이센스 모니터링과 rrdtool

소개

일부는 상업용 Flexnet 라이센스 애플리케이션(©Macrovision)을 알고 있을 것입니다. 이는 소위 Flexnet 지원 애플리케이션의 사용을 관리하기 위한 클라이언트-서버 기반 솔루션입니다. 하나의 라이센스 서버에서 여러 제품의 라이센스를 보유할 수 있습니다. 일반적으로 라이센스를 구매해야 하고 라이센스가 비쌀 수 있기 때문에 소중한 라이센스의 활용도를 확인할 수 있는 모니터링 솔루션이 있으면 좋습니다. 라이센스가 과소 활용되고 있다면(돈이 낭비됨) 또는 항상 완전히 활용되고 있다면(때때로 사람들이 작업을 수행할 수 없거나 지연될 수 있으므로) 자원 낭비가 발생할 수 있습니다.

제가 아는 한, 이러한 보고서를 수행하기 위한 상업용 애플리케이션이 있지만, 다시 말해 돈을 써야 합니다. 왜 간단한 시스템을 직접 구축하여 “MRTG 스타일”로 실제 및 과거 사용량을 표시하지 않겠습니까?

사전 참고 사항 + 면책 조항

이 튜토리얼에서는 Shell 및 Python 스크립트를 사용할 것입니다. 전체 애플리케이션은 모든 Linux에서 실행될 수 있어야 하며, 저는 CentOS와 Ubuntu에서 실행했습니다. CGI 스크립트를 실행할 수 있는 웹 서버 소프트웨어가 필요하며, 저는 잘 알려진 Apache와 THTTPD를 사용했지만, 모든 웹 서버 소프트웨어가 이 애플리케이션을 실행할 수 있어야 한다고 믿습니다. 이는 또한 제가 이전에 사용한 네트워크 모니터링 장치에 대한 완벽한 확장입니다.

다음 튜토리얼은 제가 솔루션을 구현한 방법을 설명하며, 요리 레시피 스타일로 작성되었습니다. 유사한 솔루션을 구현할 수 있다는 보장은 할 수 없습니다.

1. 아키텍처

솔루션의 아키텍처는 매우 간단합니다. 아래 그림을 참조하십시오:

CGI-Script

라이센스 서버는 그대로 두고, 네트워크를 통해 필요한 정보를 가져옵니다. 따라서 Flexnet 소프트웨어에 속하는 lmutil 프로그램을 사용하며, 이는 Windoze 버전뿐만 아니라 Linux 버전도 존재합니다. 제가 아는 한, lmutil의 이전 버전은 HP/UX, Solaris 및 AIX에서도 사용할 수 있었으므로, 이러한 OS 중 하나에서 실행되는 시스템을 사용하여 모니터링 시스템을 구축할 가능성이 있지만, 저는 시도해 보지 않았습니다.

lmutil의 출력은 모든 관련 정보를 하나 이상의 rrd 데이터베이스에 넣을 수 있도록 필터링됩니다. 저는 각 라이센스에 대해 하나의 데이터베이스를 사용했습니다. rrd는 그래프를 생성하는 데에도 사용되며, 웹 서버 소프트웨어의 하위 디렉토리에서 직접 생성되어 웹 브라우저에서 편리하게 표시될 수 있습니다.

2. 라이센스 서버 폴링

저는 /usr/local/bin에 lmutil의 최신 버전을 복사하고 실행 가능한지 확인했습니다:

# 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를 사용했습니다. dash는 bash보다 자원을 덜 소모하는 것으로 알려져 있지만, 원하신다면 bash를 사용하셔도 됩니다. 다양한 제품에 대한 라이센스 데몬은 서로 다른 포트에서 실행됩니다. lmstat의 출력은 Python 스크립트로 직접 파이프되어 필요한 모든 정보가 필터링되어 적절한 rrd 데이터베이스에 저장됩니다.

cron은 5분 폴링 주기를 설정하는 데 사용됩니다. 따라서 /etc/cron.d/에 rrd라는 이름의 항목이 생성되며, 다음과 같습니다:

*/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 바인딩이 필요하며, 이는 OS의 패키지 저장소나 rrdtool 유지 관리자의 웹사이트에서 찾을 수 있습니다.

이 스크립트는 루트 권한으로 실행되도록 구현되었습니다. 생성된 rrd 파일은 모두가 읽을 수 있어야 하며, 그래프를 생성하는 다음 스크립트는 일반적으로 www-data 또는 유사한 http 서버 프로세스의 소유자 권한으로만 실행됩니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.