REST API для получения информации о кластере сервера 1С и управления объектами кластера.
Требуются следующие библиотеки и инструменты:
- OneScript.Web - MVC фреймворк для разработки веб-сайтов с использованием OneScript
- irac - если установлен OneScript устанавливается командой
opm install -l
- cpdb - если установлен OneScript устанавливается командой
opm install -l
- 1C RAC - утилита RAC из состава платформы 1С:Предприятие 8.3
Перейти в подкаталог src и запустить OneScript.Web:
cd <путь к hirac>\src
<путь к OneScript.Web>\OneScript.WebHost.exe
Запуск будет выполнен на 5005 порту. Изменить порт можно в файле настроек appsettings.json
На сервере MS SQL, где расположены базы 1С создать имя для входа "_1Cmonitor" (имя может быть любым) с ролью "Public" и дополнительными правами:
Connect SQL
,Connect Any Database
,View any database
,View server state
.
Указать способ аутентификации: SQL Server authentification
.
Для кажой базы 1С, для которой требуется получать информацию об использовании и таблицах создать пользователя "_1Cmonitor" (имя может быть любым) и связать его с именем для входа "_1Cmonitor". В свойствах базы назначить этому пользователю право SELECT
.
Имя для входа и пользователя можно изменить в переменной @monitorUserName
(при необходимости поправить длину имени в определении).
DECLARE @monitorUserName NVARCHAR(10);
SET @monitorUserName = '_1Cmonitor';
DECLARE @command NVARCHAR(1000);
SELECT @command = '
DECLARE @is1cbase BIT;
SELECT @is1cbase = COUNT(Tables.name) FROM ?.sys.tables AS Tables WHERE Tables.name = ''v8users''
IF (@is1cbase = 1)
BEGIN
USE ?
DECLARE @hasMonitorUser BIT;
SELECT @hasMonitorUser = COUNT(Principals.name) FROM ?.sys.database_principals AS Principals WHERE Principals.name = ''' + @monitorUserName + '''
IF (@hasMonitorUser = 0)
BEGIN
CREATE USER [' + @monitorUserName + '] FOR LOGIN [' + @monitorUserName + '] WITH DEFAULT_SCHEMA=[dbo]
END
GRANT SELECT ON DATABASE::[?] TO [' + @monitorUserName + '];
END
'
EXEC sp_MSforeachdb @command
- ras - параметры сервера администрирования RAS
- <имя сервера администрирования> - параметры конкретного сервера администрирования RAS (
__default
для значений по умолчанию)- admin_name - имя администратора агента кластера
- admin_pwd - пароль администратора агента кластера
- ras - адрес сервера администрирования RAS
- rac - версия утилиты администрирования RAC
- reserves - резервируемый сервер администрирования
- <имя сервера администрирования> - параметры конкретного сервера администрирования RAS (
- cluster - параметры кластеров 1С
- <имя кластера:порт> - параметры кластера (rmngr) по указанному адресу:порту (
__default
для значений по умолчанию)- selectedInfobasesOnly - true - получать информацию только о перечисленных информационных базах
- admin_name - имя администратора кластера
- admin_pwd - пароль администратора кластера
- infobase - параметры информационных баз в кластере
- <Имя ИБ> - параметры информационной базы (
__default
для значений по умолчанию)- admin_name - имя администратора ИБ
- admin_pwd - пароль администратора ИБ
- dbms_type - тип СУБД (в настоящий момент только "MSSQLServer")
- dbms_server - адрес сервера СУБД
- dbms_user - имя пользователя для получения информации от СУБД
- dbms_pwd - пароль пользователя для получения информации от СУБД
- dbms_base - имя базы данных в СУБД
- dbms_dbstruct_lifetime - период актуальности структуры хранеения базы данных
- dbms_db_lifetime - период актуальности информации о базе данных в СУБД
- dbms_tables_lifetime - период актуальности информации о таблицах в СУБД
- <Имя ИБ> - параметры информационной базы (
- infobase - параметры информационных баз в кластере
- <имя кластера:порт> - параметры кластера (rmngr) по указанному адресу:порту (
- useCommands - true - включена возможность выполнения команд управления кластером; false -возможность отключена
- dbms_dbstruct_cache - каталог для хранения кэша структуры данных баз СУБД
- selectedClustersOnly - true - получать информацию только о перечисленных кластерах
- connectionPoolSize - число одновременных подключений к сервису администрирования
- reconnectAtempts - количество попыток инициализации кластера 1С
- reconnectInterval - задержка перед повторным подключением (мсек.) умножается на номер попытки подключения
- connectionWait - время ожидания свободного подключения (мсек.), после которого будет сообщено об ошибке подключения
- connectionLockInterval - максимальное время блокировки подключения (мсек.), после которого подключение будет принудительно освобождено
- logQueryDuration- true - будет выполняться логирование времени выполнения запросов в файл
- QueryDurationLogFilename - путь к файлу лога замеров времени
В командный файл reg_os_web_as_service.cmd регистрации HiRAC в качестве сервиса Windows. Запуск:
reg_os_web_as_service.cmd <путь к OneScript.Web>\OneScript.WebHost.exe <адрес>:<порт> <путь к hirac>\src
- <тип объектов>/list - список объектов
- <тип объектов>/<путь к объекту> - содержимое объекта по указанному пути
- <тип объектов>/<путь к объекту>/<свойство> - значение свойства <свойство> объекта по указанному пути
- counter/list - описания доступных счетчиков
- counter/<тип объектов>/list - описания доступных счетчиков для <тип объектов>
- counter/<тип объектов>/<счетчик> - значения счетчика <счетчик> для <тип объектов>
- cluster - информация о кластерах
- server - информация о рабочих серверах
- process - информация о рабочих процессах
- infobase - информация об информационных базах
- session - информация о сеансах
- connection - информация о соединениях
- cluster - cluster/<адрес сервера>/<порт сервера> или cluster/<идентификатор>
- server - server/<адрес сервера>/<порт сервера> или server/<идентификатор>
- process - process/<адрес сервера>/<порт процесса> или process/<идентификатор>
- infobase - infobase/<имя информационной базы> или infobase/<идентификатор>
- session - session/<имя информационной базы>/<номер сеанса> или session/<идентификатор>
- connection - connection/<имя информационной базы>/<номер сеанса> или connection/<идентификатор>
- field - имя поля запрашиваемого объекта, которое попадет в результат (
field=_all
- попадут все поля) - filter_<поле объекта>_<операция сравнения> - условие (фильтр) по значению поля
- order - сортировка по значениям полей
- top - отбор указанного количества первых результатов с учетом порядка сортировки
order
- filter_<поле объекта>_<операция сравнения> - условие (фильтр) по значению поля
- dim - имя измерения счетчика по которым выполняется свертка значения счетчика (
dim=_all
- попадут все измерения счетчика) - top - отбор указанного количества первых значений счетчика с максимальным значением
- aggregate - агрегатная функция свертки значений счетчика
- format - формат вывода результата
- eq - равно (может не указываться), для строк выполняется без учета регистра
- neq - не равно, для строк выполняется без учета регистра
- gt - больше
- gte - больше или равно
- lt - меньше
- lte - меньше или равно
- sw - начинается с
- ew - заканчивается на
- cnt - содержит
- mre - соответствует регулярному выражению
- count - количество значений счетчика
- distinct - количество различных значений счетчика
- sum - сумма значений счетчика
- min - минимальное значение счетчика
- max - максимальное значение счетчика
- avg - среднее значение счетчика
- json - (по умолчанию) JSON-текст собственной структуры
- prometheus - формат Prometheus
- plain - плоский текстовый формат без указания значений измерений
http://localhost:5005/cluster/list
http://localhost:5005/server/list
http://localhost:5005/infobase/list
http://localhost:5005/session/list
http://localhost:5005/counter/list
http://localhost:5005/counter/session
или
http://localhost:5005/counter/session?dim=_all
В формате Prometheus
http://localhost:5005/counter/session?format=prometheus
Агрегатная функция по умолчанию (count
)
http://localhost:5005/counter/session?dim=_no
Агрегатная функция СУММА (sum
)
http://localhost:5005/counter/session?dim=_no&aggregate=sum
http://localhost:5005/counter/session/count?dim=_all
http://localhost:5005/counter/session/count?filter_app_id=Designer
Агрегатная функция СУММА (sum
)
http://localhost:5005/counter/session/count?dim=host&dim=infobase&aggregate=sum
- Так как для работы приложения необходима консольная утилита
rac
. а ее распространение ограниченно лицензией 1С, то для сборки образа нам необходима актуальная учетная запись на https://users.v8.1c.ru/. В момент сборки будет скачан необходимый нам дистрибутив платформы.
Для этого необходимо создать файл переменных .env
в корне репозитария, по примеру env.example
и заполнить его правильными значениями
ONEC_USERNAME=<ПОЛЬЗОВАТЕЛЬ_USERS.1C.V8.RU>
ONEC_PASSWORD=<ПАРОЛЬ_ОТ_USERS.1C.V8.RU>
ONEC_VERSION=8.3.14.1993
OSCRIPT_VERSION=1.5.0
- Запустить скрипт сборки образов. При необходимости первым параметром можно указать тег собираемого образа. Тег по умолчанию -
oscript/hirac:latest
bash build_images.sh
Пример конфигурационного файла hirac лежит в каталоге src/config/racsettings.json, он же применяется по умолчанию при запуске контейнера. При необходимости использовать свои параметры необходимо переопределить конфигурационный файл, через подключеннный volume:
docker run -d -p 5000:5000 -v $(pwd)/src/config/racsettings.json:/app/config/racsettings.json demoncat/hirac:latest