Как автоматически получать информацию об остатке программных лицензий 1С:Предприятия?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Автоматическое получение информации о количестве свободных программных лицензий 1С:Предприятия является критически важной задачей для системных администраторов и программистов, стремящихся к эффективному мониторингу и управлению ресурсами. Такая информация позволяет своевременно реагировать на нехватку лицензий, планировать закупки и оптимизировать использование существующих. Рассмотрим подробнее доступные методы и инструменты для решения этой задачи, анализируя как текущие возможности, так и перспективные изменения.

Основные подходы и распространенные заблуждения

В начале пути многие специалисты сталкиваются с вопросом, как получить точные данные о лицензиях 1С. Разберем несколько часто упоминаемых методов и инструментов, чтобы выяснить их применимость к программным лицензиям 1С:Предприятия.

  1. Утилита ring: Эта утилита часто ассоциируется с управлением программными лицензиями 1С, но ее функциональность ограничена. Мы выяснили, что ring предназначена для следующих операций:

    • Активация новых программных лицензий 1С.
    • Восстановление ранее активированных лицензий.
    • Обновление лицензий (например, при продлении или увеличении количества пользователей).
    • Удаление лицензий с компьютера.
    • Проверка валидности файла лицензии.
    • Извлечение общей информации о лицензии (регистрационный номер, пин-код, данные владельца), указанные при активации.

    Важно понимать: Утилита ring не умеет в реальном времени отслеживать количество занятых лицензий. Она не предоставляет функционала для мониторинга активных сеансов и их лицензий. Для своей работы ring требует установленной Java 8 или более новой версии и запускается из командной строки.

  2. Aladdin Monitor: Этот инструмент предназначен исключительно для мониторинга аппаратных USB-ключей HASP. К программным лицензиям 1С:Предприятия Aladdin Monitor не имеет никакого отношения и не предоставляет о них никакой информации. Использование его для программных лицензий будет бесполезным.

  3. Консоль активных сеансов операционной системы: Некоторые пользователи пытаются смотреть количество сеансов через консоль операционной системы, например, в диспетчере задач Windows. Однако этот метод не дает точной информации об использовании лицензий 1С. Фоновые задания, регламентные операции и системные службы могут отображаться как активные сеансы операционной системы, но при этом они, как правило, не занимают клиентские лицензии 1С:Предприятия. Это приводит к завышенным показателям занятости и не позволяет получить корректный остаток свободных лицензий.

Эффективные методы получения информации о занятых лицензиях

Для того чтобы получить точный остаток свободных лицензий 1С, нам необходимо знать общее количество имеющихся лицензий (как правило, это фиксированное число из договора или файла лицензии) и вычесть из него количество занятых лицензий. Основная сложность заключается именно в получении актуальной информации о занятых лицензиях. Рассмотрим наиболее эффективные методы.

Программный и административный доступ к данным о сеансах кластера 1С

Одним из наиболее надежных и автоматизируемых способов является программный доступ к информации о сеансах кластера серверов 1С:Предприятия.

  1. Консоль администрирования кластера серверов 1С:Предприятия: Этот инструмент является "золотым стандартом" для ручного мониторинга и первичного анализа. Мы можем открыть консоль администрирования кластера и просмотреть список активных сеансов. Для каждого сеанса обычно отображается информация об используемой лицензии, а также тип сеанса (клиентское приложение, фоновое задание, внешнее соединение и т.д.). Важный момент: фоновые задания, системные задачи и соединения с веб-сервисом, как правило, не потребляют клиентские лицензии. Если клиент получил лицензию не от сервера (например, используется локальная программная лицензия, активированная на клиентском компьютере), это также будет видно в свойствах сеанса. Этот метод дает достаточно точную картину, но требует ручного запуска и анализа, что не подходит для автоматического мониторинга.

  2. Программный доступ через свойство License объекта ISessionInfo: Платформа 1С:Предприятие, начиная с версии 8.2.15, предоставляет программный интерфейс для получения информации о лицензиях, используемых конкретными сеансами. Мы можем использовать свойство License объекта ISessionInfo, которое доступно через COM-соединение с сервером администрирования 1С или через другие программные средства администрирования кластера. Этот подход позволяет полностью автоматизировать сбор данных. Разберем по шагам, как это можно реализовать:

    1. Подключение к серверу администрирования 1С: Сначала нам необходимо установить соединение с сервером администрирования 1С:Предприятия. Это можно сделать, например, из внешней обработки 1С, запущенной в толстом клиенте, или с помощью внешних скриптов (VBScript, PowerShell), использующих COM-объекты 1С. Для этого мы создаем COM-объект V8x.COMConnector (где x — номер версии платформы, например, V83.COMConnector для версии 8.3) и подключаемся к серверу администрирования кластера (ras).

      
      // Пример на встроенном языке 1С для подключения к кластеру
      // (требует прав администратора кластера и наличия на клиенте соответствующей версии 1С)
      Перем Коннектор;
      Перем Кластеры;
      Перем РабочиеСерверы;
      Перем РабочиеПроцессы;
      Перем ИнформационныеБазы;
                      
      Попытка
          // Создаем COM-коннектор
          Коннектор = Новый COMОбъект("V83.COMConnector"); 
          // Можно использовать V82.COMConnector для платформы 8.2
      Исключение
          Сообщить("Ошибка создания COM-объекта: " + ОписаниеОшибки());
          Возврат;
      КонецПопытки;
                      
      Попытка
          // Подключаемся к серверу администрирования 1С (обычно на локальном хосте)
          // Укажите адрес сервера администрирования и порт (по умолчанию 1541)
          Коннектор.Connect("Srvr=""" + "localhost" + """;Port=1541"); 
                          
          // Получаем список кластеров
          Кластеры = Коннектор.GetClusters();
          Если Кластеры.Count() = 0 Тогда
              Сообщить("На сервере 1С не найдены кластеры.");
              Возврат;
          КонецЕсли;
                          
          // Предположим, нас интересует первый кластер
          Перем Кластер;
          Для Каждого ТекущийКластер Из Кластеры Цикл
              Кластер = ТекущийКластер; // Берем первый попавшийся или выбираем по имени
              Прервать;
          КонецЦикла;
                          
          Если Кластер = Неопределено Тогда
              Сообщить("Не удалось получить информацию о кластере.");
              Возврат;
          КонецЕсли;
                          
          // Получаем список рабочих серверов в кластере
          РабочиеСерверы = Кластер.GetWorkingServers();
          Если РабочиеСерверы.Count() = 0 Тогда
              Сообщить("В кластере не найдены рабочие серверы.");
              Возврат;
          КонецЕсли;
                          
          КоличествоЗанятыхКлиентскихЛицензий = 0;
                          
          Для Каждого РабочийСервер Из РабочиеСерверы Цикл
              // Получаем список рабочих процессов на каждом рабочем сервере
              РабочиеПроцессы = РабочийСервер.GetWorkingProcesses();
              Для Каждого РабочийПроцесс Из РабочиеПроцессы Цикл
                  // Получаем список сеансов для каждого рабочего процесса
                  Перем СеансыРабочегоПроцесса;
                  Попытка
                      СеансыРабочегоПроцесса = РабочийПроцесс.GetSessions();
                  Исключение
                      Сообщить("Ошибка получения сеансов рабочего процесса: " + ОписаниеОшибки());
                      Продолжить;
                  КонецПопытки;
                                  
                  Для Каждого Сеанс Из СеансыРабочегоПроцесса Цикл
                      // Анализируем свойство License объекта ISessionInfo
                      // и свойство ClientConnections, если хотим считать только интерактивных пользователей
                      Если Сеанс.ClientConnections > 0 И Сеанс.License.Type = "Client" Тогда // Предполагаем, что "Client" - тип клиентской лицензии
                          // Можно также проверить Сеанс.License.IsLocal, чтобы исключить локальные лицензии,
                          // если мы хотим считать только те, что раздаются сервером.
                          КоличествоЗанятыхКлиентскихЛицензий = КоличествоЗанятыхКлиентскихЛицензий + Сеанс.ClientConnections;
                      КонецЕсли;
                      // Сеанс.License - объект, содержащий детальную информацию о лицензии
                      // (Type, Version, ExpirationDate, RegisteredNumber, PinCode, IsLocal и т.д.)
                  КонецЦикла;
              КонецЦикла;
          КонецЦикла;
                          
          Сообщить("Общее количество занятых клиентских лицензий: " + КоличествоЗанятыхКлиентскихЛицензий);
                          
      Исключение
          Сообщить("Общая ошибка при работе с кластером: " + ОписаниеОшибки());
      КонецПопытки;
      
    2. Итерация по сеансам и анализ свойства License: После подключения к кластеру и получения списка рабочих процессов, мы можем получить список активных сеансов (объекты ISessionInfo). Для каждого объекта ISessionInfo в этом списке мы обращаемся к его свойству License. Это свойство возвращает объект, содержащий детальную информацию о лицензии, используемой данным сеансом: ее тип (клиентская, серверная), регистрационный номер, пин-код, срок действия, является ли она локальной и т.д. Анализируя эти данные, мы можем точно определить, какие лицензии заняты и в каком количестве, отфильтровав при необходимости фоновые задания или служебные соединения.

  3. Утилита ras (Remote Administration Service): Для серверных версий 1С:Предприятия, особенно в средах Linux, утилита ras является мощным инструментом командной строки для получения информации о кластере серверов 1С. Она позволяет управлять кластерами, получать информацию о рабочих серверах, рабочих процессах и, что наиболее важно для нас, о сеансах. Эта утилита применима и в Windows-средах, если она установлена. Рассмотрим пример команды для получения общего списка сеансов:

    ras session list --cluster "ИмяКластера" --server "localhost:1541"

    Эта команда выведет подробную информацию обо всех активных сеансах в указанном кластере, включая данные о лицензиях. Для автоматического сбора данных мы можем парсить вывод этих команд с помощью скриптов (например, на Python, PowerShell или Bash), извлекая интересующую нас информацию о количестве занятых лицензий. Такой подход хорошо интегрируется в существующие системы мониторинга.

  4. Логи сервера лицензий (`1cv8.lso`): В некоторых случаях, когда другие методы оказываются недоступны или требуются дополнительные сведения, информацию об использованных лицензиях можно найти в логах сервера лицензий. Этот файл (обычно 1cv8.lso) находится в директории установки сервера 1С:Предприятия. В нем фиксируются события, связанные с выдачей и освобождением лицензий. Анализ логов может быть более сложным и трудоемким, поскольку требует парсинга текстового файла, но он может предоставить исторические данные об активации и использовании лицензий, что полезно для ретроспективного анализа.

  5. "Универсальный монитор лицензий 1С" (InfoStart): На платформе InfoStart существует ряд сторонних решений, разработанных сообществом 1С, которые призваны упростить мониторинг лицензий. Примером может служить "Универсальный монитор лицензий 1С" или аналогичные разработки. Эти решения часто агрегируют информацию из различных источников (в том числе из COM-объектов кластера или через вызовы ras) и предоставляют удобный графический интерфейс для просмотра статистики. Они могут работать как на обычных, так и на управляемых формах, а также часто используют более современные API, избегая устаревших COM-технологий. Мы рекомендуем изучить такие готовые решения на InfoStart, так как они могут значительно сократить время на разработку собственного мониторинга и предложить удобный функционал "из коробки".

Будущие возможности платформы 1С:Предприятие 8.5.2 и выше

Разработчики 1С постоянно работают над улучшением функциональности платформы. В версии 8.5.2 и выше ожидаются существенные изменения и новые инструменты для работы с лицензиями, которые значительно упростят мониторинг.

  1. "1С:Предприятие – менеджер лицензий": В планируемой версии 8.5.2 платформа 1С:Предприятие будет использовать новое приложение — "1С:Предприятие – менеджер лицензий", которое будет централизованно раздавать как программные, так и аппаратные лицензии. Этот менеджер лицензий является консольным приложением, но может быть запущен как полноценный сервис в операционных системах Windows и Linux. Мы сможем использовать его параллельно с существующим HASP License Manager, что обеспечит гибкость в управлении лицензиями.

  2. Свойство глобального контекста МониторингЛицензий (LicenseMonitoring): В той же версии 8.5.2 появится новое свойство глобального контекста МониторингЛицензий (LicenseMonitoring). Это свойство будет доступно в различных режимах работы (толстый клиент, тонкий клиент, сервер), что значительно расширит возможности для разработки собственного мониторинга. Совместно со стандартной обработкой "Управление лицензиями", оно позволит нам видеть:

    • Сколько и каких лицензий 1С имеется в наличии.
    • Сколько из этих лицензий занято в текущий момент.
    • Какие именно приложения или пользователи занимают каждую конкретную лицензию, с детализацией по сеансам.

    Это новое API позволит быстро выявлять причины нехватки лицензий и точно идентифицировать их потребителей, что является значительным шагом вперед в автоматизации и детализации мониторинга использования лицензий.

Разработка собственных решений и интеграция со сторонними системами

Для компаний с уникальными требованиями или для комплексного управления всеми ИТ-активами, мы можем рассмотреть следующие подходы:

  1. Разработка собственных конфигураций для мониторинга: Если стандартные или сторонние решения не полностью удовлетворяют нашим требованиям, мы всегда можем создать собственную конфигурацию 1С для мониторинга лицензий. Такая конфигурация может:

    • Периодически собирать данные о занятых лицензиях с различных серверов 1С (например, через вышеупомянутые программные методы с использованием COM-объектов или вызовов ras).
    • Хранить статистику использования лицензий в регистрах накопления или других объектах базы данных 1С.
    • Формировать аналитические отчеты и графики для визуализации данных и выявления тенденций использования.
    • Отправлять автоматические уведомления (по электронной почте, SMS или через мессенджеры) при приближении к лимиту лицензий или их исчерпании.

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

  2. Сторонние SAM-системы (Software Asset Management): Для комплексного управления всеми программными активами, включая лицензии 1С, существуют специализированные системы SAM (например, FlexNet Manager, USU, Alloy Software, Lansweeper). Эти системы помогают отслеживать использование ПО, управлять жизненным циклом лицензий и оптимизировать затраты. Однако прямая интеграция данных из 1С в такие системы может потребовать дополнительной разработки, поскольку метрики могут собираться на основе метаданных СУБД, а не напрямую из API 1С.

    Интеграция с общими системами мониторинга ИТ-инфраструктуры, такими как Zabbix или Prometheus, также возможна. Для этого может потребоваться написание кастомных скриптов, которые будут вызывать методы 1С для сбора данных (например, через COM-объекты или ras) и экспортировать их в формат, понятный выбранной системе мониторинга (например, в виде JSON, XML или текстовых метрик). Это позволяет централизовать мониторинг всех ИТ-ресурсов в одной системе.

Заключение

Автоматическое получение остатка программных лицензий 1С:Предприятия является достижимой задачей, требующей понимания функционала платформы и доступных инструментов. Мы рассмотрели, что утилита ring и Aladdin Monitor не подходят для мониторинга занятых лицензий. Наиболее точные и перспективные методы включают:

  1. Использование Консоли администрирования кластера серверов 1С:Предприятия для ручного анализа.
  2. Программный доступ через свойство License объекта ISessionInfo для автоматизированного сбора данных с высокой степенью детализации.
  3. Использование утилиты ras для серверных версий, особенно в Linux, для сбора информации из командной строки.
  4. Применение сторонних решений с InfoStart, которые могут предложить готовые инструменты и удобный интерфейс.
  5. Ожидаемые новые возможности платформы 1С:Предприятие версии 8.5.2 и выше, такие как "Менеджер лицензий" и свойство МониторингЛицензий, которые значительно упростят эту задачу в будущем и сделают процесс еще более прозрачным.

Выбор конкретного метода будет зависеть от наших текущих потребностей, версии платформы 1С, имеющихся ресурсов для разработки или внедрения, а также от общей стратегии мониторинга ИТ-инфраструктуры в организации.

← На главную