Мониторинг кластера 1С: практикум по созданию собственного инструмента
Консоль администрирования кластера 1С даёт мгновенный срез, но не позволяет увидеть динамику нагрузки, тренды и аномалии. Готовые системы мониторинга (Zabbix, PRTG) требуют настройки агентов и часто не учитывают специфику 1С. За полдня можно собрать собственный инструмент мониторинга кластера на чистом 1С, который будет собирать историю сессий, блокировок и производительности, а главное — покажет ловушку, в которую попадают 90% разработчиков: неправильная интерпретация данных о времени ожидания.
Почему стандартных средств недостаточно
Консоль администрирования кластера (RAS) показывает текущее состояние: количество сессий, занятость рабочих процессов, блокировки. Но для анализа производительности этого мало. Вы не увидите, как менялась нагрузка за последний час, какие сессии «зависали» и сколько длились пики. Журнал регистрации фиксирует события, но не даёт агрегированных метрик по кластеру в целом.
Ключевой тезис: Без исторических данных невозможно отличить разовый всплеск от систематической деградации. Самописный монитор решает эту проблему, собирая метрики с заданным интервалом и сохраняя их в регистры сведений.
Готовые системы мониторинга (Zabbix, PRTG) умеют опрашивать RAS через COM или REST, но требуют установки агентов на сервер и настройки шаблонов. Для небольших и средних внедрений это избыточно. Кроме того, они не дают гибкости в анализе: вы не сможете быстро построить отчёт «Топ-10 сессий по времени ожидания» прямо из 1С.
Архитектура самописного монитора
Инструмент состоит из трёх частей:
- Сборщик — регламентное задание, которое через заданный интервал (например, 1 минута) опрашивает кластер и записывает данные в регистры сведений.
- Хранилище — набор регистров сведений (периодических) для хранения истории сессий, блокировок, производительности рабочих процессов.
- Отчёты — обработки для визуализации: графики, таблицы, дашборды.
Сбор данных выполняется через COM-объект V83.COMConnector (или через REST API сервера администрирования, если он доступен). Ниже приведён пример получения списка рабочих процессов кластера через COM. Обратите внимание: реальные методы могут отличаться в зависимости от версии платформы, поэтому используйте документацию ИТС.
// Псевдокод — через реальный API ИТС
Процедура СобратьДанныеКластера()
Попытка
Connector = Новый COMОбъект("V83.COMConnector");
// Получение объекта кластера (адрес и порт сервера администрирования)
Cluster = Connector.ConnectWorkingProcess("tcp://server:1540");
// Получение списка рабочих процессов
WorkingProcesses = Cluster.GetWorkingProcesses();
Для Каждого WP Из WorkingProcesses Цикл
// Чтение свойств: имя, порт, занятость, количество сессий
ЗаписьВРегистр(WP.Name, WP.SessionsCount, WP.Load);
КонецЦикла;
Исключение
ЗаписьЖурналаРегистрации("Мониторинг", УровеньЖурналаРегистрации.Ошибка,,,
"Ошибка сбора данных: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
Ловушка: время ожидания vs время выполнения
Самая частая ошибка — путать время ожидания (когда сессия ждёт освобождения ресурса) и время выполнения (когда код реально исполняется). В RAS есть метрика «Среднее время ожидания», но она усреднена по всем сессиям. Если вы собираете только её, то не увидите, что одна «тяжёлая» сессия блокирует остальные. Правильный подход — собирать индивидуальное время ожидания для каждой сессии (если API позволяет) или хотя бы гистограмму.
Предупреждение: Не используйте среднее время ожидания как единственный показатель производительности. Оно маскирует выбросы. Собирайте также максимальное и 95-й перцентиль.
Практическая реализация: от сбора данных до визуализации
Шаг 1. Создание регистров сведений
Создайте два периодических регистра сведений (режим записи «Подчинение регистратору» не нужен, так как данные будут записываться напрямую):
- МониторингСессий: измерения — Сессия (строка), РабочийПроцесс (строка); ресурсы — ВремяОжидания (число), ВремяВыполнения (число), Состояние (строка).
- МониторингРабочихПроцессов: измерения — РабочийПроцесс (строка); ресурсы — КоличествоСессий (число), ЗагрузкаПроцессора (число), ДоступнаяПамять (число).
Периодичность — «В пределах дня» (или «Секунда», если нужна высокая точность).
Шаг 2. Регламентное задание
Создайте регламентное задание с интервалом 60 секунд. В его процедуре вызывайте сбор данных через COM (как в примере выше) или через HTTP-запрос к REST API сервера администрирования. Если REST API недоступен, используйте COM. Добавьте обработку исключений и логирование ошибок.
// Пример записи в регистр сведений
Процедура ЗаписатьДанныеСессии(ИмяСессии, ИмяРП, ВремяОжидания, ВремяВыполнения, Состояние)
Набор = РегистрыСведений.МониторингСессий.СоздатьНаборЗаписей();
Запись = Набор.Добавить();
Запись.Период = ТекущаяДата();
Запись.Сессия = ИмяСессии;
Запись.РабочийПроцесс = ИмяРП;
Запись.ВремяОжидания = ВремяОжидания;
Запись.ВремяВыполнения = ВремяВыполнения;
Запись.Состояние = Состояние;
Набор.Записать();
КонецПроцедуры
Шаг 3. Отчёты и дашборды
Используйте СКД для построения графиков. Например, отчёт «Динамика времени ожидания» с группировкой по часам и отбором по рабочему процессу. Для оперативного мониторинга можно вывести таблицу текущих сессий с подсветкой «красных» (время ожидания > 10 секунд).
Типичные ошибки и как их избежать
- Слишком частый опрос — каждые 5 секун
Расширение «НОПик» для 1С — встраиваемый коннектор к внешнему AI с интеллектуальным поиском по базе. Задавайте вопросы обычными словами - AI сам найдёт нужное. 45 дней бесплатно.
Попробовать НОПик →Знаете ответ на такие вопросы не хуже автора статьи? Пройдите бесплатную анонимную проверку уровня на infolimp.ru - 3 практических задачи, 15 минут, публичный токен-профиль, который можно показать работодателю или заказчику. Без регистрации по почте.
Проверить свой уровень бесплатно →