Занятые лицензии интранет версии Консультант+ в 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

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

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

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