AdminClusterMonitor - учебный проект для администраторов 1С

30.08.26

База данных - Администрирование СУБД

Мы подготовили для сообщества Infostart.ru практическое занятие, в котором каждый желающий сможет: научиться собирать реальные данные о процессах кластера 1С; выявлять «перестарков» — процессы старше периода и без соединений; выполнять безопасный перезапуск (с dry-run и подтверждением); настраивать автоматическую проверку через systemd на Linux; отправлять уведомления (Telegram, почта) при обнаружении проблем; работать с логами, ротацией, профилями кластеров и конфигурацией; развернуть полноценный учебный проект AdminClusterMonitor у себя в тестовой среде.

AdminClusterMonitor — учебный проект для администраторов 1С

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

Исходная статья: «Кластер 1С на заводских настройках»
Авторы учебного проекта: Нинель и Николай Щербаковы 

Обращение к автору исходной статьи Кластер 1С на заводских настройках: норма или мина на боевой базе

Уважаемый Коллега, вы написали превосходную статью. Она очень точно описывает проблемы, которые возникают, когда кластер 1С живёт на «заводских настройках» и администратор доверяет консоли больше, чем реальному поведению процессов.

Однако в текущем виде это - чистая умозрительная лекция. Поэтому мы с моими соавторами решили сделать следующий шаг: показать Вам и Вашим читателям практический, инженерный подход к инструментам администрирования описанных Вами проблем.

Мы подготовили учебный проект AdminClusterMonitor (https://github.com/NickScherbakov/infostart-gift) - набор из внешней обработки, скриптов и инструкций, который демонстрирует:

  • как собирать информацию о процессах кластера 1С;
  • как находить «перестарков» без соединений;
  • как безопасно выполнять перезапуск (с dry-run и подтверждением);
  • как логировать действия и ошибки;
  • как настроить автоматическую проверку через systemd на Linux;
  • как отправлять уведомления (почта, Telegram) при обнаружении проблем.

Всё это оформлено как пошаговый учебный проект, который можно изучать, повторять, дорабатывать и развивать вместе с сообществом Infostart.ru.

Обзор учебного проекта AdminClusterMonitor

Цель проекта: показать практическую реализацию мониторинга и безопасного управления процессами кластера 1С, с акцентом на Linux-окружение и воспроизводимые инженерные практики.

Основные задачи:

  • Сбор списка процессов кластера 1С и их метрик (возраст, количество соединений, база, пользователь, хост).
  • Выявление процессов, которые старше заданного периода и не имеют активных соединений («перестарки»).
  • Реализация безопасного перезапуска: dry-run, фильтрация по соединениям, подтверждение перед действием.
  • Экспорт отчётов (CSV/XLSX) для анализа и аудита.
  • Интеграция с Linux: запуск по расписанию через systemd, логирование в journald, ротация логов.
  • Отправка уведомлений (почта, Telegram) при обнаружении проблем.
  • Документация и тестовые сценарии для обучения администраторов.

Формат: учебный проект, который можно:

  • развернуть в тестовой среде;
  • пошагово пройти по инструкции;
  • адаптировать под свои кластеры и инфраструктуру;
  • использовать как основу для собственных инструментов администрирования.

Состав пакета для Infostart

Мы передаём сообществу архив ready_for_infostart.zip, содержащий следующие файлы:

  • AdminClusterMonitor.epf — внешняя обработка 1С (BSL), основная логика мониторинга.
  • admincluster_run.sh — скрипт запуска проверки (wrapper для headless-запуска обработки).
  • admincluster_notify.sh — скрипт отправки уведомлений (почта, Telegram).
  • install_admincluster.sh — скрипт установки файлов, прав и systemd unit/timer.
  • admincluster-monitor@.service — шаблон systemd-unit для профиля кластера.
  • admincluster-monitor@.timer — шаблон systemd-таймера для периодического запуска.
  • config.conf.example — пример конфигурационного файла для уведомлений и путей.
  • profiles.json.example — пример описания профилей кластеров (RasHost, RasPort, имя и т.д.).
  • logrotate_admincluster — пример конфигурации logrotate для ротации логов.
  • README.md — краткая документация по установке и запуску.
  • tests.md — тестовые сценарии и учебные задания.
  • example_report.csv — пример отчёта по процессам.
  • LICENSE.txt — лицензия (MIT-подобная, свободное использование и доработка).

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

Установка и настройка на Linux (Ubuntu/CentOS)

Шаг 1. Подготовка тестовой среды

Рекомендуется сначала развернуть проект в тестовой среде (отдельный сервер или тестовая копия базы), чтобы отработать сценарии без риска для продуктивного кластера.

  • Убедитесь, что у вас есть доступ к кластеру 1С (RAS/ragent) и тестовая база.
  • Создайте системного пользователя (например, 1c) для запуска задач мониторинга.
  • Подготовьте каталог для проекта: /opt/admincluster и конфигурации: /etc/admincluster.

Шаг 2. Установка файлов проекта

Скопируйте файлы из архива в соответствующие каталоги и выполните скрипт установки:

Bash — install_admincluster.shUTF-8
1 #!/bin/bash
2 # install_admincluster.sh — пример
3  
4 set -e
5 mkdir -p /opt/admincluster
6 cp AdminClusterMonitor.epf /opt/admincluster/
7 cp admincluster_run.sh /opt/admincluster/
8 cp admincluster_notify.sh /opt/admincluster/
9 chmod +x /opt/admincluster/*.sh
10  
11 mkdir -p /etc/admincluster
12 cp config.conf.example /etc/admincluster/config.conf
13 cp profiles.json.example /etc/admincluster/profiles.json
14  
15 chown -R root:root /opt/admincluster /etc/admincluster
16 chmod 750 /opt/admincluster
17  
18 cp admincluster-monitor@.service /etc/systemd/system/
19 cp admincluster-monitor@.timer /etc/systemd/system/
20  
21 systemctl daemon-reload
22  
23 echo "Установка завершена. Настройте /etc/admincluster/config.conf и profiles.json, затем активируйте таймер."

Шаг 3. Настройка конфигурации

Отредактируйте файл /etc/admincluster/config.conf и задайте параметры уведомлений и путей:

Config — /etc/admincluster/config.confUTF-8
1 # /etc/admincluster/config.conf (пример)
2  
3 TELEGRAM_BOT_TOKEN="000000:XXXXXXXXXXXXXXXXXXXXXXXX"
4 TELEGRAM_CHAT_ID="-1001234567890"
5 ALERT_EMAIL="ops@example.com"
6  
7 EPF_PATH="/opt/admincluster/AdminClusterMonitor.epf"
8 HELPER_PATH="/opt/admincluster"

В файле /etc/admincluster/profiles.json опишите профили кластеров (пример структуры):

JSON — /etc/admincluster/profiles.jsonUTF-8
1 {
2   "prod": {
3     "Name": "prod",
4     "RasHost": "127.0.0.1",
5     "RasPort": 1545,
6     "Description": "Продуктивный кластер"
7   },
8   "test": {
9     "Name": "test",
10     "RasHost": "127.0.0.1",
11     "RasPort": 1546,
12     "Description": "Тестовый кластер"
13   }
14 }

Шаг 4. Настройка systemd-unit и таймера

Пример systemd-unit для профиля кластера:

Systemd Service — /etc/systemd/system/admincluster-monitor@.serviceUTF-8
1 [Unit]
2 Description=AdminClusterMonitor service for profile %i
3 After=network.target
4  
5 [Service]
6 Type=simple
7 User=1c
8 EnvironmentFile=/etc/admincluster/config.conf
9 ExecStart=/opt/admincluster/admincluster_run.sh --profile %i
10 StandardOutput=syslog
11 StandardError=syslog
12 SyslogIdentifier=admincluster-monitor-%i
13 Restart=on-failure

Пример таймера:

Systemd Timer — /etc/systemd/system/admincluster-monitor@.timerUTF-8
1 [Unit]
2 Description=Timer for AdminClusterMonitor service for profile %i
3  
4 [Timer]
5 OnBootSec=2min
6 OnUnitActiveSec=1h
7 Persistent=true
8  
9 [Install]
10 WantedBy=timers.target

Активация таймера для профиля prod:

Bash — Активация таймераUTF-8
1 sudo systemctl enable --now admincluster-monitor@prod.timer

Шаг 5. Проверка логов и работы

Для проверки работы используйте:

Bash — Просмотр журналаUTF-8
1 journalctl -u admincluster-monitor@prod -f

В тестовом режиме можно запустить скрипт напрямую:

Bash — Тестовый запуск dry-runUTF-8
1 sudo /opt/admincluster/admincluster_run.sh --profile test --dry-run

Примеры кода и скриптов

Фрагмент BSL-логики внешней обработки

BSL 1C:Enterprise — AdminClusterMonitor.epfUTF-8
1 // AdminClusterMonitor.epf — фрагмент логики
2  
3 &НаСервере
4 Функция ПолучитьСписокПроцессовКластера(Профиль) Экспорт
5     Результат = Новый ТаблицаЗначений;
6     Результат.Колонки.Добавить("IdПроцесса");
7     Результат.Колонки.Добавить("ВремяЗапуска", Новый ОписаниеТипов("Дата"));
8     Результат.Колонки.Добавить("ВозрастМинут", Новый ОписаниеТипов("Число"));
9     Результат.Колонки.Добавить("КолСоединений", Новый ОписаниеТипов("Число"));
10     Результат.Колонки.Добавить("Пользователь");
11     Результат.Колонки.Добавить("База");
12     Результат.Колонки.Добавить("Хост");
13  
14     Попытка
15         // В реальной среде заменить на вызов API ras/ragent или helper-скрипта
16         Процессы = УправлениеКластером.ПолучитьСписокПроцессов(Профиль.RasHost, Профиль.RasPort);
17         Для Каждого П Из Процессы Цикл
18             Стр = Результат.Добавить();
19             Стр.IdПроцесса = П.Идентификатор;
20             Стр.ВремяЗапуска = П.ВремяЗапуска;
21             Стр.ВозрастМинут = Окр(РазностьДат(ТекущаяДата(), П.ВремяЗапуска) * 24 * 60, 0);
22             Стр.КолСоединений = П.КоличествоСоединений;
23             Стр.Пользователь = П.Пользователь;
24             Стр.База = П.ИмяБазы;
25             Стр.Хост = П.Хост;
26         КонецЦикла;
27     Исключение
28         Сообщить("Ошибка при получении списка процессов: " + ОписаниеОшибки());
29     КонецПопытки;
30  
31     Возврат Результат;
32 КонецФункции
33  
34 &НаКлиенте
35 Процедура ВыполнитьПроверкуИУведомить(Профиль)
36     Таб = ПолучитьСписокПроцессовКластера(Профиль);
37     Период = Настройки.ПериодПерезапускаМинут;
38  
39     Результат = Новый ТаблицаЗначений;
40     Результат.Колонки.Добавить("IdПроцесса");
41     Результат.Колонки.Добавить("ВозрастМинут");
42     Результат.Колонки.Добавить("КолСоединений");
43     Результат.Колонки.Добавить("ФлагПерестарок");
44  
45     Для Каждого Стр Из Таб Цикл
46         НовСтр = Результат.Добавить();
47         НовСтр.IdПроцесса = Стр.IdПроцесса;
48         НовСтр.ВозрастМинут = Стр.ВозрастМинут;
49         НовСтр.КолСоединений = Стр.КолСоединений;
50         НовСтр.ФлагПерестарок = (Стр.ВозрастМинут > Период) И (Стр.КолСоединений = 0);
51     КонецЦикла;
52  
53     // Экспорт отчёта и вызов внешнего скрипта уведомлений
54     ПутьЭкспорта = Настройки.ПутьКHelper + "/export_report.csv";
55     // Здесь предполагается вспомогательная процедура формирования CSV
56  
57     Если Результат.Строки.Найти(Новый УсловиеПоКолонке("ФлагПерестарок", Истина)) <> Неопределено Тогда
58         Команда = "/bin/sh " + Настройки.ПутьКHelper + "/admincluster_notify.sh --profile " + Профиль.Имя + " --file " + ПутьЭкспорта;
59         Если Настройки.DryRun Тогда
60             ВыполнитьКоманду(Команда + " --dry-run", Истина);
61         Иначе
62             ВыполнитьКоманду(Команда, Истина);
63         КонецЕсли;
64     КонецЕсли;
65  
66     Сообщить("Проверка завершена для профиля: " + Профиль.Имя);
67 КонецПроцедуры

Скрипт запуска проверки — admincluster_run.sh

Bash — admincluster_run.shUTF-8
1 #!/bin/bash
2 # /opt/admincluster/admincluster_run.sh
3  
4 CONFIG="/etc/admincluster/config.conf"
5 . "$CONFIG"
6  
7 PROFILE=""
8 DRYRUN=0
9  
10 while [[ $# -gt 0 ]]; do
11   case $1 in
12     --profile) PROFILE="$2"; shift 2;;
13     --dry-run) DRYRUN=1; shift;;
14     *) shift;;
15   esac
16 done
17  
18 LOG_TAG="admincluster-monitor"
19  
20 if [[ -z "$PROFILE" ]]; then
21   echo "Не указан профиль (--profile NAME)" >&2
22   exit 1
23 fi
24  
25 CMD="/usr/bin/1cv8 -run $EPF_PATH --profile $PROFILE"
26 if [[ $DRYRUN -eq 1 ]]; then
27   CMD="$CMD --dry-run"
28 fi
29  
30 logger -t $LOG_TAG "Запуск проверки профиля $PROFILE (dryrun=${DRYRUN})"
31 $CMD 2>&1 | logger -t $LOG_TAG

Скрипт уведомлений — admincluster_notify.sh

Bash — admincluster_notify.shUTF-8
1 #!/bin/bash
2 # /opt/admincluster/admincluster_notify.sh
3  
4 CONFIG="/etc/admincluster/config.conf"
5 . "$CONFIG"
6  
7 DRYRUN=0
8 FILE=""
9 PROFILE=""
10  
11 while [[ $# -gt 0 ]]; do
12   case $1 in
13     --file) FILE="$2"; shift 2;;
14     --profile) PROFILE="$2"; shift 2;;
15     --dry-run) DRYRUN=1; shift;;
16     *) shift;;
17   esac
18 done
19  
20 SUBJECT="AdminClusterMonitor: обнаружены 'перестарки' в $PROFILE"
21 BODY="В профиле $PROFILE обнаружены процессы-перестарки. Отчёт: $FILE"
22  
23 if [[ $DRYRUN -eq 1 ]]; then
24   logger -t admincluster-monitor "DRYRUN: $SUBJECT - $BODY"
25   echo "DRYRUN: уведомление не отправлено"
26   exit 0
27 fi
28  
29 # Telegram
30 if [[ -n "$TELEGRAM_BOT_TOKEN" && -n "$TELEGRAM_CHAT_ID" ]]; then
31   curl -s -X POST "https://api.telegram.org/bot${{TELEGRAM_BOT_TOKEN}}/sendMessage" \
32     -d chat_id="${{TELEGRAM_CHAT_ID}}" \
33     -d text="${{SUBJECT}}\n${{BODY}}" >/dev/null 2>&1
34 fi
35  
36 # Почта
37 if [[ -n "$ALERT_EMAIL" ]]; then
38   echo -e "$BODY" | mail -s "$SUBJECT" "$ALERT_EMAIL"
39 fi
40  
41 logger -t admincluster-monitor "Уведомление отправлено для профиля $PROFILE"

Тестовые сценарии и учебные задания

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

Сценарий 1. Базовая проверка «перестарков»

  • Установите период перезапуска, например, 30 минут.
  • Создайте в тестовой среде процессы с возрастом 10 и 90 минут (или смоделируйте их).
  • Запустите проверку для тестового профиля.
  • Убедитесь, что процесс старше периода и без соединений помечен как «перестарок».

Сценарий 2. Процесс с соединениями

  • Создайте процесс с возрастом > периода и количеством соединений > 0.
  • Запустите проверку и dry-run перезапуска.
  • Убедитесь, что такой процесс не перезапускается и в логах есть запись о наличии соединений.

Сценарий 3. Уведомления

  • Настройте TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID и ALERT_EMAIL.
  • Запустите проверку с искусственно созданными «перестарками».
  • Убедитесь, что уведомления приходят в Telegram и на почту.

Сценарий 4. Автоматизация через systemd

  • Активируйте таймер для профиля test.
  • Проверьте логи через journalctl.
  • Убедитесь, что проверки выполняются по расписанию.

Чек-лист администратора

  • Проверена работа в тестовой среде, продуктивный кластер не затронут.
  • Параметр периода перезапуска выбран осознанно (с учётом нагрузки и SLA).
  • Dry-run режим протестирован, реальные перезапуски выполняются только после проверки.
  • Процессы с активными соединениями не перезапускаются автоматически.
  • Логи пишутся в journald и/или в отдельные файлы с ротацией.
  • Уведомления настроены и протестированы (Telegram, почта).
  • Файлы конфигурации и секреты имеют корректные права доступа.
  • Документация прочитана, тестовые сценарии пройдены.

Безопасность и работа с секретами

В проекте используются учётные данные для доступа к кластеру и для отправки уведомлений. Рекомендуется:

  • Не хранить пароли в открытом виде; использовать системные механизмы (keyring, gpg, Vault).
  • Ограничить права доступа к файлам конфигурации (chmod 600, владелец — системный пользователь).
  • Проверить настройки SELinux/AppArmor, при необходимости добавить разрешающие правила.
  • Разделять тестовую и продуктивную среду; сначала отрабатывать сценарии на тесте.

Лицензия и приглашение к доработке

Проект предлагается сообществу Infostart под свободной лицензией (MIT-подобной), допускающей:

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

Мы будем рады, если вы и читатели статьи:

  • добавите свои сценарии и улучшения;
  • расширите поддержку других платформ и окружений;
  • поделитесь опытом эксплуатации в продуктивных кластерах.

Вступайте в нашу телеграмм-группу Инфостарт

DevOps Linux Cluster 1C BSL Administrative Console bash

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

HighLoad оптимизация Администрирование СУБД Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 Бесплатно (free)

В рамках 18 релиза СУБД Tantor Postgres мы рассказывали об оптимизациях, которые помогают планировщику сделать более точный выбор между Nested Loop и Hash Join. В следующем релизе у нас планируются оптимизации, которые позволят ускорить выполнение как Nested Loop, так и Hash Join. Сегодня мы расскажем об одном из таких методов - фильтре Блума.

31.08.2026    5365    Tantor    3    

16

Администрирование СУБД Системный администратор Программист Бесплатно (free)

5,5 тысячи пользователей в единой базе 1С, розница в режиме 24/7 и SLA 99,98% – в таких условиях любая авария быстро превращается в очереди на кассах, потерю денег и давление со стороны бизнеса. Показываем, как выстроить процесс аварийно-восстановительных работ: от первых алертов и базового скрининга системы до подключения команды, проверки гипотез и дебрифа после инцидента. Разбираем, как метрики, дашборды, техжурнал, Zabbix, Prometheus, Grafana, Telegram-боты и скрипты помогают не гадать, а быстро находить причину проблемы. На реальных авариях объясняем, почему «быстро» не должно означать «рискованно», как работа над ошибками снижает панику и почему каждая авария может сделать систему надежнее.

11.08.2026    2773    jul.dolganova    9    

23

Администрирование СУБД Пароли Системный администратор 1С 8.3 1С:Розница 2 1С:Управление производственным предприятием Абонемент ($m)

Пароль пользователя СУБД лежит в 1CV8Clst.lst обратимо: кто читает папку srvinfo - достаёт пароли SQL всех баз кластера, минуя права 1С. Обработка показывает, у каких баз пароль извлекается, помечает слабые и выдаёт план защиты. К СУБД не подключается, ничего не пишет - только читает файл.

10 стартмани

06.08.2026    1522    16    nedomolkov.ivan    0    

7

Администрирование СУБД Системный администратор 1С 8.3 Бесплатно (free)

Прогнал набор диагностических скриптов на двух рабочих базах: боевой с 580 сеансами и малонагруженной. Разбираю пять находок: статистика 97-дневной давности, 598 запросов со сканами, журнал транзакций в 73 % от данных, tempdb в один файл и 81 % ожиданий на параллелизме, который чинить не надо. Плюс три грабли, из-за которых самописный диагностический скрипт падает на чужом сервере. Семь рабочих скриптов внутри, копируются в SSMS как есть.

05.08.2026    2025    nedomolkov.ivan    8    

8

Администрирование СУБД Журнал регистрации Системный администратор Программист 1С 8.3 Бесплатно (free)

Журнал регистрации на нагруженной базе перестаёт открываться: файлы растут на гигабайты в день, просмотр виснет, история недоступна. Рассказываю, как мы вынесли журнал трёх продуктивных баз в ClickHouse: 35 млрд событий, поиск всех ошибок за сутки — 0,11 секунды, привычная форма журнала для пользователей и падение числа ошибок в проде в 23 раза за полгода. Архитектура, схема таблицы, грабли интеграции и все цифры с прода.

04.08.2026    2373    nedomolkov.ivan    0    

8

Администрирование СУБД 1С 8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

База 1С:ERP размером 646 Гб, полное маскирование за 5 часов - без создания промежуточной незащищенной копии. Разбираем бесплатный pg_anon на сквозном примере с реального продуктива.

27.07.2026    3584    Tantor    16    

15

HighLoad оптимизация Администрирование СУБД Программист Россия Бесплатно (free)

Если вы работаете с 1С на PostgreSQL и жалуетесь на тормоза — скорее всего, дело в join predicate pushdown, которого в стандартном PostgreSQL нет. В MS SQL Server этот механизм работает «из коробки», и при миграции именно запросы к виртуальным таблицам 1С бьют по производительности сильнее всего. В этой статье — реальный кейс от Postgres Professional с разбором плана выполнения, ручным экспериментом и доработкой планировщика СУБД, которая ускорила запросы от 22 до 54 000 раз.

16.06.2026    10229    postgres_professional    13    

12

HighLoad оптимизация Администрирование СУБД Системный администратор Программист 1С:Предприятие 8 Бесплатно (free)

Вышел релиз СУБД Tantor Postgres 18, и мы хотим рассказать о его новых возможностях для работы с приложениями на платформе "1С:Предприятие". В обзоре разберем улучшения планировщика, по традиции коснемся работы временных таблиц и не обойдем вниманием вспомогательные утилиты, которые упрощают поиск и диагностику проблем в высоконагруженных системах. За каждым пунктом - реальные запросы 1С, реальные рабочие базы и сотни часов тестирования!

16.06.2026    4283    Tantor    7    

10
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. nedomolkov.ivan 241 30.08.26 19:45 Сейчас в теме
Спасибо за продолжение, неожидал)
Скачаю ваш комплект, думаю пригодится... 👍
2. Ninel_S 31 30.08.26 19:53 Сейчас в теме
(1) Спасибо Вам за идею, Коллега
;-)
Для отправки сообщения требуется регистрация/авторизация