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

консультант плюс в zabbix Программирование

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

Не буду описывать здесь саму процедуру установки, она хорошо документирована самим разработчиком. Поделюсь лишь решением, которое мне пришлось изобрести, чтобы отслеживать количество используемых лицензий Консультант+. Для эих целей был написан простенький скрипт на 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

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

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

Уведомления о количестве свободных лицензий Консультант плюс в 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:
            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 создаем соответствующий элемент и триггеры.

Добавление счетчика в 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
Указываем в квадратных скобках элемента имя домена в нужном регистре.

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

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

https://github.com/dkplayer/consplus_zabbix_lic

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

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

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

  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 работает во всем кроме него!

          Ответить