В прошлом году мы перевели наше предприятие на использование Интранет версии правовой системы Консультант плюс. Сделано это было в большей степени ради отказа от тяжелого сервера терминалов для стандартной сетевой версии Консультант+ в пользу использования веб-версии.
Не буду описывать здесь саму процедуру установки, она хорошо документирована самим разработчиком. Поделюсь лишь решением, которое мне пришлось изобрести, чтобы отслеживать количество используемых лицензий Консультант+. Для эих целей был написан простенький скрипт на Python и добавлен счетчик в системе мониторинга Zabbix.
Анализ логов интранет версии Консультант+
Информация обо всех сессиях и используемых лицензиях пишется в файл C:\inetpub\wwwroot\cons\system\srvprot.txt. Структура у файла следующая:
ДД.ММ.ГГГГ, ЧЧ:ММ:СС Действие ИД сессии Комплект Кол-во сессий Логин
06.04.2020, 16:26:55 Create 9D4059130AEC0BF4F103DC6920424105 2280404505 1
06.04.2020, 16:29:06 Create 67E9AC39A529EEA001AC516B13477D3C 2280404505 2
06.04.2020, 16:29:30 Create 8CE9F7B1F072DCA3A0F3E8844D828F4D 2280404505 3
06.04.2020, 16:30:19 Create DB4B392EFC951A8FC5028C83BBEDB229 2280404505 4
06.04.2020, 16:36:20 Create 766E1351462D6EF6C3E2B0D963DFBA4A 2280404505 5
06.04.2020, 16:49:14 Delete 67E9AC39A529EEA001AC516B13477D3C 2280404505 5
06.04.2020, 16:49:45 Delete 8CE9F7B1F072DCA3A0F3E8844D828F4D 2280404505 4
06.04.2020, 16:50:45 Delete DB4B392EFC951A8FC5028C83BBEDB229 2280404505 3
06.04.2020, 16:55:45 Delete 9D4059130AEC0BF4F103DC6920424105 2280404505 2
06.04.2020, 16:56:45 Delete 766E1351462D6EF6C3E2B0D963DFBA4A 2280404505 1
06.04.2020, 18:18:11 Delete 5B315DDCE1726D29E235CD0ED1C90627 2280404505 1
06.04.2020, 18:20:32 Create EA82396AB0FDD74E5F42483BF0556ACC 2280404505 1 DOMAIN\user
06.04.2020, 18:21:41 Delete EA82396AB0FDD74E5F42483BF0556ACC 2280404505 1 DOMAIN\user
Как можно увидеть в предпоследнем столбце записывается количество открытых сессий, а следовательно их количество можно получить просто проверив последнюю строку и указанный столбец данного файла.
Скрипт количество открытых сессий Консультант+

Скрипт написан на 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:
result = re.search('\s[0-9]{2,3}\s',''.join(data[-lines:]))
res = re.search('[0-9]{2,3}',result[0])
print(res[0])
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 указываем в домен.

Далее по собранным данным можно строить графики и понимать кто использует больше лицензий чем положено. Так же можно доработать скрипт для определения кто конкретно, какие пользователи, занимают лицензии.
Для удобства загрузил скрипты на GitHub.
https://github.com/dkplayer/consplus_zabbix_lic
Замечания, предложения, здравая критика в комментарии!
Внимание! Нажимая кнопку "Отправить комментарий" вы соглашаетесь с политикой конфиденциальности сайта.