В прошлом году мы перевели наше предприятие на использование Интранет версии правовой системы Консультант плюс. Сделано это было в большей степени ради отказа от тяжелого сервера терминалов для стандартной сетевой версии Консультант+ в пользу использования веб-версии.
Не буду описывать здесь саму процедуру установки, она хорошо документирована самим разработчиком. Поделюсь лишь решением, которое мне пришлось изобрести, чтобы отслеживать количество используемых лицензий Консультант+. Для эих целей был написан простенький скрипт на 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
from datetime import datetime
current_date = datetime.now().strftime("%Y-%m")
cfile=f"C:\inetpub\wwwroot\cons\system\SVRPROTSVRPROT._{ current_date }.TXT"
bufsize = 8192
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
from datetime import datetime
now = datetime.now()
current_date = datetime.now().strftime("%Y-%m")
cfile=f"C:\inetpub\wwwroot\cons\system\SVRPROTSVRPROT._{ current_date }.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 разобрана тут.
Замечания, предложения, конструктивная критика приветствуются в комментарии!







