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

26.09.19

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Powershell скрипт для загрузки данных мониторинга в MySQL
.ps 7,71Kb
64
64
1 SM
Скачать Купить за 1 850 руб.

Для начала надо понимать, что задача возникла не на ровном месте. Время от времени 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С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    7267    27    4    

51

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 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.

14400 руб.

06.12.2023    5597    24    1    

54

SALE! %

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

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

3600 2880 руб.

14.01.2013    181850    1104    0    

876

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

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

14400 руб.

29.04.2020    30010    88    151    

63

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

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

3600 руб.

06.02.2017    31522    32    18    

48

Мониторинг Инструменты администратора БД Системный администратор Платформа 1С v8.3 Россия Платные (руб)

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

1500 руб.

01.12.2020    15126    38    0    

55

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

Данная разработка позволит решить вопрос с резервным копированием Ваших баз в автоматическом режиме, расположенных на сервере 1С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней.

6000 руб.

06.11.2012    71291    623    45    

83

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

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих запросов на sql, ожиданий, конвертация запроса в 1С и рекомендации, где может тормозить.

2 стартмани

15.02.2024    10158    206    ZAOSTG    74    

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

Спасибо!
4. theelectric 17 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 17 08.09.19 11:12 Сейчас в теме
(4) Даже напрямую обращаясь к кластеру выходит ошибка соединения. Подскажите, в чем может быть проблема?
Прикрепленные файлы:
6. theelectric 17 08.09.19 11:19 Сейчас в теме
(5) И даже так не соединяет:
Прикрепленные файлы:
7. DonAlPatino 178 09.09.19 09:30 Сейчас в теме
(6)Служба RAS соответствующей версии 1С установлена?
8. theelectric 17 09.09.19 09:56 Сейчас в теме
(7) Да, аналогичной версии
Прикрепленные файлы:
9. DonAlPatino 178 09.09.19 10:32 Сейчас в теме
(8)Администраторы кластера не созданы?
10. theelectric 17 09.09.19 10:56 Сейчас в теме
(9) Нет, не созданы
Прикрепленные файлы:
11. DonAlPatino 178 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 17 09.09.19 21:46 Сейчас в теме
(11) Оказывается, ras не был запущен. Спасибо большое за помощь!
13. theelectric 17 20.09.19 15:11 Сейчас в теме
Вячеслав, у Вас опыт работы с Grafana уже есть... А подскажите, в чем может быть проблема данной ошибки, как указано на рисунке ниже?
Прикрепленные файлы:
18. DonAlPatino 178 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 17 23.09.19 10:23 Сейчас в теме
Да, мы переработали Ваш скрипт для сохранения данных по сеансам в MS SQL. Вот что нам выдает ваш запрос в Grafana:
Прикрепленные файлы:
21. DonAlPatino 178 23.09.19 14:34 Сейчас в теме
(19) ну там же русским языком написано, что ему не нравится. Надо погружаться в T-SQL. Графана тут совсем не при делах...
23. theelectric 17 23.09.19 14:49 Сейчас в теме
Я понял, буду копать в эту сторону. Спасибо!
14. ImHunter 320 20.09.19 16:44 Сейчас в теме
Тоже сделал подобный мониторинг - Дженкинсом периодически запускается os-скрипт (допиленная Считалка сеансов), он выгружает в Elastic, результаты смотрим в Kibana.
15. DonAlPatino 178 21.09.19 20:28 Сейчас в теме
(14) А почему именно Дженкинсом? Я вот вижу в статьях, что время от времени люди используют его как запускатор скриптов... А вот в чем тут профит не пойму...
16. ImHunter 320 22.09.19 10:47 Сейчас в теме
(15) Ну так сбор нагрузки - это срез данных на
текущий момент времени. Для истории нагрузки, соответственно, нужно периодически собирать данные. Этим и занимается Дженкинс - постоянно запускает скрипт.
17. DonAlPatino 178 23.09.19 09:21 Сейчас в теме
(16) А у меня просто по шедулеру стартует этот самый сбор статистики. В чем преимущество использования именно Дженкиса? Не холивара ради - может я какую-то киллфичу пропускаю по причине того, что дженкинс не знаю вообще. Это же CI/CD в первую очередь? Или я сильно ошибаюсь?
20. ImHunter 320 23.09.19 10:42 Сейчас в теме
(17) Ну хз. У нас - для однообразия. Чтобы понятно было - что, когда и чем запускается.
22. DonAlPatino 178 23.09.19 14:36 Сейчас в теме
(20)Я правильно понимаю что вы используете Дженкис как централизованную систему управления запуском скриптов на куче серверов? Я как-то не рассматривал его в таком контексте
24. ImHunter 320 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 178 05.02.22 17:55 Сейчас в теме
(27) Мы по логину определяли e-mail и отправляли уведомление о возмождном зависании задач в 1С, например.
29. fr.myha 23.02.22 10:34 Сейчас в теме
А чего не использовать TSDB? Там временная метка ставится автоматически в UNIX формате, что удобно для Grafana?
30. adapter 418 04.08.22 12:13 Сейчас в теме
можно получить тот же функционал не выходя из экосистемы 1С. Работает "из коробки", новый стек технологий осваивать не придется
mks.adaptersoft.ru

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