Взаимодействие 1С со сторонними продуктами посредством REST и Golang (middleware). Часть 3 - ElasticSearch

18.06.21

База данных - Журнал регистрации

Как в статье №1 этого цикла выгрузим через прослойку журнал регистрации (xml формат) в ElasticSearch. Статья будет иметь практическую направленность в минималистичном стиле

Предыдущие и будущие статьи:

Видел на этом ресурсе, как некоторые выгружают журнал в файлы, потом специальной утилитой эти файлы парсят и помещают в ElasticSearch. Видел, как из таблицы СУБД с журналом регистрации выбирались записи для ElasticSearch. У меня есть своя идея. В этой статье мы воспользуемся функцией глобального контекста ВыгрузитьЖурналРегистрации(), а полученный XML-файл отправим в прослойку через HTTP-запрос методом POST. На стороне прослойки распарсим файл и передадим полученную структуру в ElasticSearch. В итоге посмотрим полученный результат в веб-интерфейсе Kibana

Для тестирования делаем обработку с отборами по датам для журнала и командой отправки.

Запускал все это дело в демо ERP на Платформе 8.3.16.1502

Для парсинга XML в прослойке я воспользовался пакетом "github.com/beevik/etree"

А для работы с ElasticSearch - пакетом "github.com/olivere/elastic"

В настройки прослойки вывел адреса ElasticSearch и имя индекса

Видим, что данные пришли в ElasticSearch, накладываем какой-нибудь отбор

Исходники 1С обработки и прослойки на GitHub https://github.com/dmitry-msk777/Connector_1C_Enterprise

ОБНОВЛЕНИЕ 06.10.2020

Протестировал загрузку на файле журнала 2GB - 2 000 000 записей, переписал алгорим парсинга XML под функцию xml.Unmarshal, а запись в ElasticSearch под bulk по 10 000 записей за раз.

Производительность стала приемлемой на рабочем компьютере с 8GB и простеньким процессором: парсинг файла 6 минут, загрузка в Elastic 10 минут.

Обнаружил также проблему у функции глобального контекста ВыгрузитьЖурналРегистрации() если в параметр МаксимальноеКоличество задавать число меньшее 10 000, то он все равно будет всегда грузить 10 000. Узнал я это когда начал парсить выгружаемые файлы. В СП информации этой нет, в методической информации тоже нет. В начале я решил, что этот параметр не работает, когда вместо 50 записей, которые я хотел выгрузить, в XML оказалось 10 000

ОБНОВЛЕНИЕ 11.10.2020

Для файлов XML при отправке в прослойку добавлено zip-сжатие, это позволило например уменьшить файл с данными с 494MB до 32МБ

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

 

Golang RESTapi middleware ElasticSearch

См. также

Журнал изменений с восстановлением состояния ссылочных объектов и архивацией по HTTP / COM (расширение + конфигурация, 8.3.14+, ЛЮБАЯ конфигурация)

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

База данных «сама» меняет данные в документах/справочниках? Тогда данный журнал изменений для Вас! Практически не влияет на скорость записи объектов за счет быстрого алгоритма! Скорость работы почти в 2 раза выше типового механизма "История изменений"! Позволяет следить за изменениями и удалением в любых ссылочных объектах конфигурации, с возможностью архивации по HTTP(!) или COM, и сверткой данных. А так же, может восстановить состояние реквизитов (значения) до момента изменения или удаления объекта из базы. Есть ДЕМО-база где можно самостоятельно протестировать часть функционала! Работает на любых платформах выше 8.3.14+ и любых конфигурациях! Версия 3.1 от 24.08.2023!

21600 руб.

15.05.2017    42642    10    24    

38

Версионирование объектов для Альфа-авто, ред 4 и 5.

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

Подсистема версионирования объектов для конфигураций Рарус: Альфа-авто на базе типовой подсистемы от 1С. Позволяет хранить историю изменений документов и справочников, кто, что, когда и какие данные изменял, а так же вернуться к предыдущим версиям объекта.

4800 руб.

03.09.2016    42306    33    24    

37

LogManager - Внешний журнал регистрации в SQL

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

Журнал регистрации платформы 1С в SQL. Общая база хранения всех журналов. Через com-подключение регламентным заданием периодически догружает журналы регистраций из рабочих баз. Предоставляет настраиваемый доступ к журналам по правам подразделений. Формирует отчеты по пользователям и данным.

10000 руб.

23.05.2014    55592    52    16    

47

Мониторинг баз и серверов 1С

Журнал регистрации Мониторинг Платформа 1С v8.3 Платные (руб)

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

9000 руб.

28.08.2019    31129    14    21    

66

LogiCH - хранение и анализ журнала регистрации в сверхбыстрой СУБД ClickHouse

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

Конфигурация LogiCH эффективно решает проблему хранения и анализа записей журналов регистрации. Разработка использует столбцовую СУБД ClickHouse, одну из самых быстрых Big Data OLAP СУБД. Любой анализ журнала можно выполнить в одном отчете, в котором доступны все возможности СКД с учетом ограничений RLS. Количество подключаемых баз не ограничено и не влияет на скорость построения анализа.

5000 руб.

28.11.2018    19632    13    6    

37

Регламентное сокращение журнала регистрации

Инструменты администратора БД Журнал регистрации Платформа 1С v8.3 1С:Управление торговлей 11 Абонемент ($m)

Внешняя обработка для регламентного сокращения журнала регистрации для конфигураций на базе БСП и платформы 8.3.20+

1 стартмани

29.12.2023    1398    15    dima_gsv    1    

12

Магия преобразований: ЖР, ТЖ, RAS/RAC, логи - универсальное решение Vector

Мониторинг Журнал регистрации Технологический журнал Абонемент ($m)

Как легко и быстро с помощью специализированных решений собирать, парсить и передавать логи и метрики.

1 стартмани

13.11.2023    3150    4    AlexSTAL    0    

42

Мониторинг состояния с отправкой в telegram

Журнал регистрации Инструменты администратора БД Мониторинг Мессенджеры и боты Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х Абонемент ($m)

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

3 стартмани

26.09.2023    1839    11    doom2good    10    

13
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Shmell 535 22.09.20 12:12 Сейчас в теме
Интересный подход. Вопрос на уточнение - какая периодичность хранения ЖР? При полном включенном журнале и 100+ одновременно работающих пользователях - размер журнала может начинаться от 1 ГБ и стремиться к бесконечности. Чем больше по размеру xml файл - тем он дольше по времени парсится. В статье еще хотелось бы увидеть замеры по времени, а точнее корреляцию между объемом журнала и временем занесения записей в elastic (какой подход используется в пакете - построчный put или bulk insert)
+
2. dmitry-irk38 136 22.09.20 13:00 Сейчас в теме
(1) Ограничений на время соединения и размер передаваемого тела (с файлом) не устанавливал, попробую прогнать какой-нибудь большой журнал с большим файлом.

Проведу замеры. Вероятно если он слишком большой можно его выгрузить из 1С в многопоточном режиме, разбивая на периоды. Т.е запустить 20 фоновых заданий, который передадут 20 файлов по периоду 6 месяцев. Попробую.

По поводу метода "построчный put или bulk insert" поглядел, вероятно это put потому что каждое событие отдельно грузится в Elastic, попробую использовать bulk insert.

Как Вы думаете какое количество времени допустимо для выгрузки большого журнала регистрации?
+
3. Shmell 535 23.09.20 09:01 Сейчас в теме
(2) по фоновым заданиям - это подход хороший, но нужно будет контролировать целостность выгрузки, т.к., например, какое-либо фоновое может отвалиться.

по времени - тут все зависит от требуемой частоты анализа/просмотра ЖР, вернее от частоты актуальности, если нужно что бы каждые 5 минут заносилась при инкрементном подходе свежая порция данных из ЖР - то это одна тех реализация и, скорее всего, ВыгрузитьЖурналРегистрации() не подойдет, а если частота - сутки, то другая, где использование данной процедуры вполне приемлемо.

Тем не менее, я считаю, что для суточного анализа - Ваш подход хорош.
+
4. dmitry-irk38 136 06.10.20 20:59 Сейчас в теме
(3) Протестировал производительность 2 миллиона записей примерно 2GB грузились 3 часа, а с bulk insert по 10 000 записей в порции, за 10 минут.

Сейчас 2 GB грузит за 15 минут, 5 минут на парсинг XML, его тоже пришлось переписать т.к старый алгоритм падал на 1GB (недостаточно памяти).

Возможно, можно еще ускориться если поставить на сервер и поиграть с размером bulk insert, но 15 минут для журнала 2GB кажется приемлемым.

Можно еще попробовать сживать файлы в Zip, чтобы по сети они быстрей передавались если это все на разных физических\логических машинах размещается.
Shmell; user1464234; +2
Оставьте свое сообщение