Занятые лицензии интранет версии Консультант+ в Zabbix

консультант плюс в zabbix

В прошлом году мы перевели наше предприятие на использование Интранет версии правовой системы Консультант плюс. Сделано это было в большей степени ради отказа от тяжелого сервера терминалов для стандартной сетевой версии Консультант+ в пользу использования веб-версии.

Не буду описывать здесь саму процедуру установки, она хорошо документирована самим разработчиком. Поделюсь лишь решением, которое мне пришлось изобрести, чтобы отслеживать количество используемых лицензий Консультант+. Для эих целей был написан простенький скрипт на Python и добавлен счетчик в системе мониторинга Zabbix.

Анализ логов интранет версии Консультант+

Информация обо всех сессиях и используемых лицензиях пишется в файл C:\inetpub\wwwroot\cons\system\srvprot.txt. Структура у файла следующая:

ДД.ММ.ГГГГ ЧЧ:ММ:СС.МСК Действие                ИД сессии             Комплект   Кол-во сессий Логин                            Токен        Статус сессии Статус операции
04.10.2022 15:11:00.502 TokenUpdated 53E87AE9D81B4DC8B15F6BF30EE91BD6 2280404505 00000250                                                    Invalid       FAIL
04.10.2022 15:11:03.673 TokenUpdated DC432C147B6C4E37805C31E0B98C20FD 2280404505 00000250                                                    Invalid       FAIL
04.10.2022 15:11:07.048 TokenUpdated 53E87AE9D81B4DC8B15F6BF30EE91BD6 2280404505 00000250                                                    Invalid       FAIL
04.10.2022 15:11:12.139 TokenUpdated D671E828CE524B7882B878817CEC9870 2280404505 00000250                                                    Invalid       FAIL
04.10.2022 15:11:12.233 TokenUpdated D671E828CE524B7882B878817CEC9870 2280404505 00000250                                                    Invalid       FAIL
04.10.2022 15:11:12.288 TokenUpdated 53E87AE9D81B4DC8B15F6BF30EE91BD6 2280404505 00000250                                                    Invalid       FAIL
04.10.2022 15:11:12.383 TokenUpdated D671E828CE524B7882B878817CEC9870 2280404505 00000250                                                    Invalid       FAIL
04.10.2022 15:11:13.325 TokenUpdated 53E87AE9D81B4DC8B15F6BF30EE91BD6 2280404505 00000250                                                    Invalid       FAIL
04.10.2022 15:11:13.955 Delete       5249C8085F114FEBA8C95C81626DAF1B 2280404505 00000250      DOMAIN2\User2                                 LoggedIn      OK
04.10.2022 15:11:15.341 TokenUpdated D671E828CE524B7882B878817CEC9870 2280404505 00000249                                                    Invalid       FAIL
04.10.2022 15:11:15.428 Create       86F1FC3F8B904A6C886095D656AA4A3F 2280404505 00000250      DOMAIN\User1                                  LoggedIn      OK
04.10.2022 15:11:19.821 TokenUpdated 610EC81239BC44288E5FCF05AF503175 2280404505 00000250                                                    Invalid       FAIL

Как можно увидеть в предпоследнем столбце записывается количество открытых сессий, а следовательно их количество можно получить просто проверив последнюю строку и указанный столбец данного файла.

Скрипт количество открытых сессий Консультант+

Уведомления о количестве свободных лицензий Консультант плюс в Zabbix
Сообщения о том, что лицензии заканчиваются в дашборде Zabbix

Скрипт написан на Python, соответственно на сервере с Консультант+ должен быть установлен данный интерпретатор.

import sys
import os
import re

bufsize = 8192
cfile = 'C:\inetpub\wwwroot\cons\system\srvprot.txt'
lines = 1
fsize = os.stat(cfile).st_size

iter = 0
with open(cfile) as f:
    if bufsize > fsize:
        bufsize = fsize-1
    data = []
    while True:
        iter +=1
        f.seek(fsize-bufsize*iter)
        data.extend(f.readlines())
        if len(data) >= lines or f.tell() == 0:
            line=''.join(data[-lines:])
            res=line.split()
            print(int(res[5]))
            break

Данный скрипт размещаем в папке Zabbix агента на сервере Консультант+ и создаем пользовательскую команду в конфигурационном файле Zabbix агента:

UserParameter=cons_lic[*],C:\Python\Python38\python.exe "C:\Zabbix\plugins\check_cons_lic.py"

Ну а в настройках хоста на сервере Zabbix создаем соответствующий элемент и триггеры.

Добавление счетчика в Zabbix для учета количества лицензий Консультант+
Настройка элемента количество занятых лицензий Консультант+ в Zabbix
Триггеры Zabbix для оповещения о закончившихся лицензиях консультант плюс
Триггеры, которые срабатывают при достижении определенного уровня занятых лицензий.

Подсчет количества лицензий Консультант+ по доменам

Если у вас многодоменная сеть, то вероятно имеет смысл считать по количеству занятых пользовательских лицензий по каждому домену. В решении этой задачи я не придумал ничего лучше как считать количество открытых сессий по каждому пользователю учитывая строки в которых создается (create) сессия и вычитая строки, в которых сессия закрывается (delete). Ночью все сессии закрываются, поэтому я решил обрабатывать строки только за текущую дату, хотя сам файл конечно проходит весь и на производительность это не влияет. Лог файл размером 180 мб обрабатывается пару секунд.

import sys, os, re, io
import datetime
now = datetime.datetime.now()
cfile = 'C:\inetpub\wwwroot\cons\system\srvprot.txt'

#проверка аргументов коммандной строки. принимает единственный параметр - имя домена по которому вывести количество сессий
if len(sys.argv)>1:
    checkdom = sys.argv[1].upper()
else:
    checkdom = ''

#список доменов
domains={'DOMAIN1':0, 'DOMAIN2':0, 'DOMAIN3':0}

date=now.strftime("%d.%m.%Y,")
iter = 0
users=set()
with io.open(cfile, encoding='windows-1251', errors='ignore') as lic:
    for line in lic:
        rec=line.split()
        if rec[2]!="SetAuth":
            if rec[0]==date:
                dom=rec[6].split('\\')
                if rec[2]=='Create':
                    users.add(rec[6])
                if rec[2]=='Delete':
                    users.discard(rec[6])
for user in users:
   dom=user.split('\\')
   domains[dom[0].upper()]+=1

#если не указан конкретный домен выводит список доменов с количеством открытых сессий по каждому домену    
if checkdom != '':
    print(domains[checkdom])
else:
    for domain,cnt in domains.items():
        print(domain,cnt)

Необходимо в начале скрипта перечислить список доменов по которым вести подсчет. Чтобы использовать скрипт в Zabbix необходимо запускать его с параметром передав имя домена. Вот как это настраивается в конфигурации Zabbix агента:

UserParameter=cons_lic_ltd[*],C:\Python\Python38\python.exe "C:\Zabbix\plugins\opensessions.py" $1

В настройках элемента на сервере Zabbix указываем в домен.

Учет количества лицензий Консультант+ по доменам в Zabbix
Указываем в квадратных скобках элемента имя домена в нужном регистре.

Далее по собранным данным можно строить графики и понимать кто использует больше лицензий чем положено. Так же можно доработать скрипт для определения кто конкретно, какие пользователи, занимают лицензии.

Ротация логов Консультант+ интранет версии

Спустя некоторое время заметил, что скрипт долго отрабатывает подсчет по доменам, если файл логов интранет-версии Консультант+ (C:\inetpub\wwwroot\cons\system\srvprot.txt) разрастается до больших размеров. Например при разросшемся размере до 1 гигабайта подсчет лицензий по доменам выходил за установленные таймауты элемента. Решить можно увеличив таймауты в Zabbix или подрезав логи Консультант+. Я пошёл по второму пути и раз в неделю обрезаю логи простым скриптом rotate_cons_log.bat:

mkdir C:\inetpub\wwwroot\cons\system\logs\
move C:\inetpub\wwwroot\cons\system\SRVPROT.TXT C:\inetpub\wwwroot\cons\system\logs\SRVPROT_%date%.txt
forfiles.exe -p C:\inetpub\wwwroot\cons\system\logs\ -d -90 -m *.txt -c "cmd /c del /q @path"

Данный скрипт создает папку для хранения старых логов, перемещает текущий лог в эту папку с указанием даты в имени файла, в конце ону удаляет в этой папке файлы логов старше 90 дней.

Рекомендую запускать раз в неделю в выходной день, либо раз в месяц, чтобы не сбрасывать в ноль данные подсчета по доменам.

Для удобства загрузил скрипты на GitHub.

https://github.com/dkplayer/consplus_zabbix_lic

Зеркало на GitFlick

https://gitflic.ru/project/dkplayer/consplus_zabbix_lic

Установка и настройка системы мониторинга Zabbix разобрана тут.

Замечания, предложения, конструктивная критика приветствуются в комментарии!

Оцените статью
Добавить комментарий

Внимание! Нажимая кнопку "Отправить комментарий" вы соглашаетесь с политикой конфиденциальности сайта.

  1. Никита

    Добрый день!

    Не могли бы вы отправить техническую документацию по установке интранет версии КонсультантПлюс? Местный представитель утверждает, что данной версии не существует, хотелось бы посмотреть, как устроена данная версия.

    Ответить
    1. dkplayer автор

      Добрый день. Мы довольно долгот добивались предоставления именно интранет версии работающей через браузер, но наш представитель не утверждал, что ее не существует. Попробуйте обратиться напрямую через Москву, вероятно представителю не выгодно вам продавать интранет версию. Документацию предоставить не могу, боюсь у меня нет на это прав. Могу рассказать, что там пирог из офлайн комплекта, специальной службы онлайн версии и модуля для iis.

      Ответить
      1. Никита

        Спасибо за информацию. А вы можете подсказать минимальные технические характеристики для установки интранет версии?

        Ответить
        1. dkplayer автор

          Из документации:

          • Операционная система Windows Server 2008 R2 64-bit..
          • Internet Information Services (IIS) 7.5.
          • Веб-обозреватель Internet Explorer 11.0.
          • Многоядерный процессор серверного класса Xeon (X5690 и выше) или аналогичный AMD.
          • ОЗУ – 8 Гб и выше.
          • Разрешение экрана 1024 на 768 точек и выше.
          • Подключение к локальной сети Интранет на скорости 100 Мбит и выше.
          • Свободное место на диске – не менее 2,5 объёмов установленного комплекта КонсультантПлюс.
          • USB порт для подключения электронного ключа защиты.

          У нас все крутится в виртуалке на Win2019 с соответствующей версией IIS 8 ядер 16 гб ОЗУ. Вполне себе летает, ресурсов для 250 пользователей с избытком. Браузер хоть и написан IE работает во всем кроме него!

          Ответить
  2. Семен

    Добрый день! Как я понимаю wwwroot\cons\system\srvprot.txt существует только в интранет версии и в обычной сетевой его нет? Может есть еще варианты где посмотреть количество сессий/лицензий?

    Ответить
    1. dkplayer автор

      На сколько я помню количество лицензий можно было посмотреть непосредственно в клиенте консультант+. Либо в окне о программе либо через запуск с административными правами с ключом /adm. Там же можно было закрывать открытые сессии. Мы уже несколько лет используем только интранет версию.

      Ответить