В прошлом году мы перевели наше предприятие на использование Интранет версии правовой системы Консультант плюс. Сделано это было в большей степени ради отказа от тяжелого сервера терминалов для стандартной сетевой версии Консультант+ в пользу использования веб-версии.
Не буду описывать здесь саму процедуру установки, она хорошо документирована самим разработчиком. Поделюсь лишь решением, которое мне пришлось изобрести, чтобы отслеживать количество используемых лицензий Консультант+. Для эих целей был написан простенький скрипт на 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
Как можно увидеть в предпоследнем столбце записывается количество открытых сессий, а следовательно их количество можно получить просто проверив последнюю строку и указанный столбец данного файла.
Скрипт количество открытых сессий Консультант+
Скрипт написан на 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 создаем соответствующий элемент и триггеры.
Подсчет количества лицензий Консультант+ по доменам
Если у вас многодоменная сеть, то вероятно имеет смысл считать по количеству занятых пользовательских лицензий по каждому домену. В решении этой задачи я не придумал ничего лучше как считать количество открытых сессий по каждому пользователю учитывая строки в которых создается (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 указываем в домен.
Далее по собранным данным можно строить графики и понимать кто использует больше лицензий чем положено. Так же можно доработать скрипт для определения кто конкретно, какие пользователи, занимают лицензии.
Ротация логов Консультант+ интранет версии
Спустя некоторое время заметил, что скрипт долго отрабатывает подсчет по доменам, если файл логов интранет-версии Консультант+ (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 разобрана тут.
Замечания, предложения, конструктивная критика приветствуются в комментарии!
Добрый день!
Не могли бы вы отправить техническую документацию по установке интранет версии КонсультантПлюс? Местный представитель утверждает, что данной версии не существует, хотелось бы посмотреть, как устроена данная версия.
Добрый день. Мы довольно долгот добивались предоставления именно интранет версии работающей через браузер, но наш представитель не утверждал, что ее не существует. Попробуйте обратиться напрямую через Москву, вероятно представителю не выгодно вам продавать интранет версию. Документацию предоставить не могу, боюсь у меня нет на это прав. Могу рассказать, что там пирог из офлайн комплекта, специальной службы онлайн версии и модуля для iis.
Спасибо за информацию. А вы можете подсказать минимальные технические характеристики для установки интранет версии?
Из документации:
У нас все крутится в виртуалке на Win2019 с соответствующей версией IIS 8 ядер 16 гб ОЗУ. Вполне себе летает, ресурсов для 250 пользователей с избытком. Браузер хоть и написан IE работает во всем кроме него!
Добрый день! Как я понимаю wwwroot\cons\system\srvprot.txt существует только в интранет версии и в обычной сетевой его нет? Может есть еще варианты где посмотреть количество сессий/лицензий?
На сколько я помню количество лицензий можно было посмотреть непосредственно в клиенте консультант+. Либо в окне о программе либо через запуск с административными правами с ключом /adm. Там же можно было закрывать открытые сессии. Мы уже несколько лет используем только интранет версию.