Кто уложил 1С, или мониторинг загрузки кластера в разрезе пользователей с помощью Grafana

26.09.19

База данных - Инструменты администратора БД

Мониторингом различных параметров работы кластера 1С в zabbix сейчас уже никого не удивишь. Собственно потребление памяти, процов и места на серверах обычно настраивают первыми. Потом идет мониторинг в разрезе rphost'ов и различные метрики функционирования SQL сервера. Но вот когда уже все это есть, то временами возникает вопрос - какой же конкретно нехороший человек пытается съесть все (ну не все, но много) ресурсы сервера? Можно смотреть в консоль кластера и ловить редиску там. Можно анализировать журнал регистраций, включать технологический журнал или накапливать статистку в специализированных базах 1С. Но, "настоящим" сисадминам проще как-то с внешними скриптами, базами данных и, например, Grafana. Расскажу что у нас получилось.

Скачать файлы

Наименование Файл Версия Размер
Powershell скрипт для загрузки данных мониторинга в MySQL
.ps 7,71Kb
63
.ps 7,71Kb 63 Скачать

Для начала надо понимать, что задача возникла не на ровном месте. Время от времени rphost росли до 20-30GB, или обнаруживались зависшие сессии в сутки, а то и более. "Проблемых" пользователей ловили через консоль, но помогало это относительно - пользователи через день уже не помнили что запустили, поиск по журналу за сутки занимал много времени и не всегда заканчивался успехом, в общем процесс надо было как-то ввести в управляемое русло.

Наверняка поставленную задачу можно решить другими способами и более эффективно и предложенное решение можно и нужно критиковать. Скажем это был неплохой повод изучить новые технологии и расширить горизонты :-). Ну и не пришлось отвлекать программистов 1С от основной работы - пиления бизнес-фич. 

Статья - не полноценная инструкция по разворачиванию системы (и так получилась какая-то огромная для меня). Скорее описан подход к решению проблемы. И вопрос оптимизации этого подхода для меня скорее открыт, чем решен :-)

Структура решения вкратце

  1. "1C Remote Administation Client" (RAC) подключается к "1C Remote Administation Server" (RAS) и получает информацию о кластере 1С.
  2. Скрипт в Powershell запускает RAC, структурирует полученную от него информацию, и посылает ее в базу MySQL.
  3. В базе MySQL к полученным записям добавляется время получения этих записей.
  4. Grafana с помощью специфических запросов в MySQL визуализирует данные о кластере 1С.
  5. Использую Notification channels из Grafana рассылаем уведомления о проблемах заинтересованным лицам.

Как ставить и запускать службу RAC/MySQL/Grafana рассказывать не буду - информации достаточно.

Создаем базу MySQL для хранения данных:

CREATE DATABASE 1c_monitoring;
ALTER DATABASE 1c_monitoring CHARACTER SET utf8 COLLATE utf8_general_ci;

Создаем таблицу сессий

use 1c_monitoring
create table sessions(
	id serial primary key,
	server varchar(255) NOT NULL,
	clock timestamp,
	uuid varchar(36) NOT NULL,
	base varchar(255),
	user varchar(255) ,
	type varchar(255) NOT NULL,
	started timestamp,
	last timestamp,
	sleep bool default false,
	current BIGINT,
	5min BIGINT,
	total BIGINT,
	duration_cur bigint(20),
	duration_db_cur bigint(20)
);

Что бы работали запросы Grafana в базу MySQL необходимо убрать режим "ONLY_FULL_GROUP_BY", для этого нужно указать все необходимые (те что уже есть) режимы исключив "ONLY_FULL_GROUP_BY"

SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

Рекомендуется сделать специального пользователя MySQL для удаленных подключений к базе 1c_monitoring (у меня adm1c)

В Grafana через web-интерфейс прописываем созданную БД как Data Sources:

Name MySQL 1C
MySQL Connection  
Host mysql:3306
Database 1c_monitoring
User adm1c
Password Ну понятно

На сервер с кластером 1С ставим mysql-connector-net и подключаем PowerShell скрипт, который раз в 5 минут считывает для каждой активной сессии имя пользователя, Память(текущая),Память(5 минут), Память(Всего) и время старта сессии и вставляет из в БД (скриптик приложен - как-то страшно его показывать, т.к. выглядит... не идеально)

Данные в БД мы получили - приступаем к визуализации. Добавляем в Grafana dashboard, в него panel, в разделе metrics вводим запрос к графане (синтаксис там SQL-подобный с использованием специальных агрегатных функций Grafana, которые начинаются с "__"):

SELECT
  $__timeGroupAlias(clock,5m,0),
  concat(user,' (',base,')') AS metric,
  max(Current) AS "memory"
FROM sessions
WHERE
  $__timeFilter(clock) and
  server = 'SRV-BASE'
GROUP BY 1,2
ORDER BY $__timeGroup(clock,5m,0)

Ну и после некоторого кряхтенья получаем график использования памяти в разрезе пользователей:

Потребление памяти по пользователям

Подобным же образом визуализировали время сессий.

Продолжительность сессий пользователей

Ну как бы здорово - видим кто ест всю память, у кого сессии зависли (по факту скорее фоновые задания, запущенные во время работы), для регламентов видим какие регламенты вдруг стали выполняться сильно дольше. Но оперативности, к сожалению, нет. Если никто не посмотрит на dashboard (а туда начинают смотреть когда пользователи начинают жаловаться), то никто и не дернется. Зато получили профили использования ресурсов и можно реагировать, если что-то идет не так.

Сначала сделали оповещение группы 1С по почте используя стандартный функционал Grafana рассылки уведомлений через электронную почту. Для этого надо сконфигурить Notification channels для работы с почтовым сервером, а потом настроить Alert Rules. Как-то вот так:

Настройка Alert Rules

Теперь группе поддержки 1С стало сложнее пропустить предупреждение. Но если мы предупреждаем "одинэсников", то почему не сообщить сразу пользователю, что он каким-то образом запустил некую ресурсоемкую задачу? Если пользователь сразу отреагирует, то и группе поддержки 1С будет проще. В каких-то ситуациях можно не реагировать (все знают что запущена тяжелая обработка - "бобёр выдыхай"), в каких-то надо срочно прерывать задачу, в каких-то надо ставить на рефакторинг функционал и сразу понятно кто будет бизнес-заказчиком этого рефакторинга.

Вишенка на торте - используем webhook в Grafana (через все тот же Notification channels)! Grafana при включенном алерте посылает json с описанием проблемы на webhook сервер. Сервер берет из json пользователя, сервер, базу и время или размер сессии, шлет это все в bash-скрипт, который сопоставляет имя пользователя и его почту используя внутрикорпоративный портал, формирует сообщение и посылается на почту пользователю.

Пользователь получает что-то вроде:

Добрый день, <Имя пользователя>, согласно данным системы мониторинга 1С сегодня (17.06.2019) в 20:01 наблюдалось аномальное потребление Вами ресурсов сервера 1С SRV-BASE  в информационной базе un_acc30 - 1095.84 MB. Большая просьба максимально детализовано сообщить какие операции в 1С в это время вы совершали и было ли что-то необычное (тормоза, вылет) во время работы. Информацию просьба направлять на ITSupport.

 

У нас поставлены 2 хука на превышение памяти на сессию больше 1GB и на продолжительность сессии более суток. Скрипты написаны на bash и если будут кому интересны приложу. Выглядят тоже ужасно + наша специфика с определением e-mail (пользователи создаются с русским ФИО в качестве username и за их e-mail'ами приходится дополнительно лазить на внутрикорпоративный портал).

Ну собственно всё. 3 месяца ушло на то, чтобы убедить пользователей не пугаться и сразу сообщать что было запущено и что с этим сделать.

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

Теперь вот надо определить следующее узкое место, которое можно замониторить через Grafana...

UPD. 26/09/2019 Уважаемый @klimov_andrey, как автор упомянутых скриптов, модифицировал скрипт загрузки данных в Grafana. Теперь скрипт

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

 

Мониторинг 1C Grafana rac powershell

См. также

Автоподбор ролей для профилей и групп доступа в любых типовых базах 1С УТ 11, КА 2, ERP2, Розница 2/3, УНФ 16/3, БП 3, ЗУП 3 и подобных (УФ, Платформа 8.3.14+)

Инструменты администратора БД Роли и права 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 15.12.2023, версия 1.1.

12000 руб.

06.12.2023    2980    13    1    

34

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8000 руб.

10.11.2023    3544    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3600 2520 руб.

14.01.2013    177758    1073    0    

849

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    27383    79    146    

59

Система хранения присоединенных файлов в томах на диске

Инструменты администратора БД Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием Платные (руб)

Конфигурация Комплексная автоматизация 1.1 (и УПП 1.3 тоже) хранит файлы и изображения в справочнике Хранилище дополнительной информации в реквизите Хранилище типа ХранилищеЗначений. Та же история с ВложениямиЭлектроннойПочты. Но при этом присоединенные файлы в Электронном документообороте хранит в томах на диске. Эта доработка позволяет использовать стандартный механизм хранения файлов, изображений и вложений электронных писем в томах на диске. При этом можно разделить тома хранения по объектам конфигурации.

4200 руб.

10.11.2015    61320    88    59    

73

"Менеджер потоков 2.1": УПП: "Восстановление партий"

Инструменты администратора БД Платформа 1С v8.3 1С:Управление производственным предприятием Россия Бухгалтерский учет Управленческий учет Платные (руб)

Как оптимизировать то, что, считалось, не поддается оптимизации? Как повысить доступность базы данных? Как проводить самую «времяемкую» операцию не по паре раз в неделю, а по несколько раз в день*? Ответ есть!

20000 руб.

12.09.2019    11746    5    9    

7

Брандмауэр для сервера 1С Предприятие 8 - внешнее управление сеансами

Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

3600 руб.

06.02.2017    31111    31    18    

47

Хранилище файлов на SQL

Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Управленческий учет Платные (руб)

Привязка файлов / сканов к объектам 1С с сохранением их на SQL-сервере

12000 руб.

09.10.2019    10986    5    8    

9
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. blackhole321 1303 02.09.19 20:21 Сейчас в теме
Если не секрет, почему в качестве СУБД использовали MySQL, а не MSSQL или Postgres?
2. DonAlPatino 176 03.09.19 09:40 Сейчас в теме
(1) Как говориться "так исторически сложилось". Первоначально пытались решить задачу используя zabbix, который уже работал на mysql. Поэтому данные туда и грузили. Ну дальше все так и осталось. Пока запускали я наконец-то понял смысл Time-Series Databases вообще и почему так пиарят тот же Prometeus в частности. Но пока решили не переделывать - данных не много
3. blackhole321 1303 03.09.19 10:22 Сейчас в теме
(2)
ески сложилось". Первоначально пытались решить задачу используя zabbix, который уже работал на mysql. Поэтому данные туда и грузили. Ну дальше все так и осталось. Пока запускали я наконец-то понял смысл Time-Series Databases вообще и почему так пиарят тот же Prometeus в частности. Но пока решили не переделывать - д

Спасибо!
4. theelectric 16 07.09.19 22:51 Сейчас в теме
Вячеслав, подскажите, пжл, в чем может быть ошибка соединения? Первая часть кода скрипта полностью как у Вас...

.\rac.exe : Ошибка соединения с сервером
C:\Users\1s\Desktop\Load2MsSqlnew.ps1:8 знак:12
+ $cluster = .\rac.exe cluster list | % {if ($_ -match 'cluster'){$_ -replace "^.* ...
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (Ошибка соединения с сервером:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError

Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение
.\rac.exe : Ошибка разбора параметра: cluster
C:\Users\1s\Desktop\Load2MsSqlnew.ps1:9 знак:17
+ $racInfobases = .\rac.exe infobase --cluster=$cluster summary list
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (Ошибка разбора параметра: cluster:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError

.\rac.exe : Ошибка разбора параметра: cluster
C:\Users\1s\Desktop\Load2MsSqlnew.ps1:34 знак:16
+ $racSessions = .\rac.exe session --cluster=$cluster list
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (Ошибка разбора параметра: cluster:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
5. theelectric 16 08.09.19 11:12 Сейчас в теме
(4) Даже напрямую обращаясь к кластеру выходит ошибка соединения. Подскажите, в чем может быть проблема?
Прикрепленные файлы:
6. theelectric 16 08.09.19 11:19 Сейчас в теме
(5) И даже так не соединяет:
Прикрепленные файлы:
7. DonAlPatino 176 09.09.19 09:30 Сейчас в теме
(6)Служба RAS соответствующей версии 1С установлена?
8. theelectric 16 09.09.19 09:56 Сейчас в теме
(7) Да, аналогичной версии
Прикрепленные файлы:
9. DonAlPatino 176 09.09.19 10:32 Сейчас в теме
(8)Администраторы кластера не созданы?
10. theelectric 16 09.09.19 10:56 Сейчас в теме
(9) Нет, не созданы
Прикрепленные файлы:
11. DonAlPatino 176 09.09.19 11:36 Сейчас в теме
Ну в общем вот это "rac cluster list" должно отрабатывать на самом сервере с запущенной службой RAS. и отдавать id кластера.
У меня на 5 серверах отрабатывает без всякого шаманства.

Я бы попробовал переставить все нуля на пустой машине. Вот PS скрипт для установки RAS

$version = Get-ChildItem "C:\Program Files\1cv8" | ? {$_.Name -like '*.*.*.*'} | select -Expand Name | %{[Version]$_} | sort | select -last 1 | %{[string]$_}
Set-Location "C:\Windows\System32"
.\sc stop ras
.\sc delete ras
.\sc create ras binpath= "C:\Program Files\1cv8\$version\bin\ras.exe cluster --service" displayname= "1C:Enterprise 8.3 RAS" start= auto
.\sc start ras
12. theelectric 16 09.09.19 21:46 Сейчас в теме
(11) Оказывается, ras не был запущен. Спасибо большое за помощь!
13. theelectric 16 20.09.19 15:11 Сейчас в теме
Вячеслав, у Вас опыт работы с Grafana уже есть... А подскажите, в чем может быть проблема данной ошибки, как указано на рисунке ниже?
Прикрепленные файлы:
18. DonAlPatino 176 23.09.19 09:43 Сейчас в теме
(13)
Что-то я не вижу на скрине 'AS' вообще. Это этот запрос?

SELECT
$__timeGroupAlias(clock,5m,0),
concat(user,' (',base,')') AS metric,
max(Current) AS "memory"
FROM sessions
WHERE
$__timeFilter(clock) and
server = 'SRV-BASE'
GROUP BY 1,2
ORDER BY $__timeGroup(clock,5m,0)

Ну для начала посомтрте в "generated sql". Я так понимаю у вас не mysql, а mssql?
19. theelectric 16 23.09.19 10:23 Сейчас в теме
Да, мы переработали Ваш скрипт для сохранения данных по сеансам в MS SQL. Вот что нам выдает ваш запрос в Grafana:
Прикрепленные файлы:
21. DonAlPatino 176 23.09.19 14:34 Сейчас в теме
(19) ну там же русским языком написано, что ему не нравится. Надо погружаться в T-SQL. Графана тут совсем не при делах...
23. theelectric 16 23.09.19 14:49 Сейчас в теме
Я понял, буду копать в эту сторону. Спасибо!
14. ImHunter 312 20.09.19 16:44 Сейчас в теме
Тоже сделал подобный мониторинг - Дженкинсом периодически запускается os-скрипт (допиленная Считалка сеансов), он выгружает в Elastic, результаты смотрим в Kibana.
15. DonAlPatino 176 21.09.19 20:28 Сейчас в теме
(14) А почему именно Дженкинсом? Я вот вижу в статьях, что время от времени люди используют его как запускатор скриптов... А вот в чем тут профит не пойму...
16. ImHunter 312 22.09.19 10:47 Сейчас в теме
(15) Ну так сбор нагрузки - это срез данных на
текущий момент времени. Для истории нагрузки, соответственно, нужно периодически собирать данные. Этим и занимается Дженкинс - постоянно запускает скрипт.
17. DonAlPatino 176 23.09.19 09:21 Сейчас в теме
(16) А у меня просто по шедулеру стартует этот самый сбор статистики. В чем преимущество использования именно Дженкиса? Не холивара ради - может я какую-то киллфичу пропускаю по причине того, что дженкинс не знаю вообще. Это же CI/CD в первую очередь? Или я сильно ошибаюсь?
20. ImHunter 312 23.09.19 10:42 Сейчас в теме
(17) Ну хз. У нас - для однообразия. Чтобы понятно было - что, когда и чем запускается.
22. DonAlPatino 176 23.09.19 14:36 Сейчас в теме
(20)Я правильно понимаю что вы используете Дженкис как централизованную систему управления запуском скриптов на куче серверов? Я как-то не рассматривал его в таком контексте
24. ImHunter 312 23.09.19 15:17 Сейчас в теме
25. DrSender 82 20.07.21 11:55 Сейчас в теме
Аналогично сделал. RAS не использую - работает через COMConnector.
Perfomance Monitor выгружает в отдельную базу MS SQL , остальные разнообразные скрипты тоже в MS SQL , но в другую базу.
Отображение через Grafana.
Очень удобно совмещать разноплановые события по времени и смотреть, что на что влияет.
И конечно очень важно просматривать / сравнивать с историей событий.
26. XmakcX07 17.09.21 15:43 Сейчас в теме
(25)а можете статью сделать или как то более подробно расписать, как у вас получилось 4 вида запросов все данные собрать?
27. i_lo 214 04.02.22 17:51 Сейчас в теме
Добрый день!
Я так понимаю, что скрипт получает с кластера информацию о сеансах. Под пользователем понимается Логин пользователя в базе, или он умеет что-то хитрее?
28. DonAlPatino 176 05.02.22 17:55 Сейчас в теме
(27) Мы по логину определяли e-mail и отправляли уведомление о возмождном зависании задач в 1С, например.
29. fr.myha 23.02.22 10:34 Сейчас в теме
А чего не использовать TSDB? Там временная метка ставится автоматически в UNIX формате, что удобно для Grafana?
30. adapter 417 04.08.22 12:13 Сейчас в теме
можно получить тот же функционал не выходя из экосистемы 1С. Работает "из коробки", новый стек технологий осваивать не придется
mks.adaptersoft.ru

лимиты производительности по метрикам тоже есть, но на сайте пока не описаны.
31. DonAlPatino 176 05.08.22 13:46 Сейчас в теме
(30) https поднимите, пожалуйста. 2022 год на дворе.
Оставьте свое сообщение