Взаимодействие 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

См. также

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

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

21600 руб.

15.05.2017    43137    12    24    

40

Журнал регистрации Мониторинг Системный администратор Программист Бизнес-аналитик Руководитель проекта Платформа 1С v8.3 Платные (руб)

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

9000 руб.

28.08.2019    32317    18    21    

70

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

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

5000 руб.

28.11.2018    20102    14    6    

37

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

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

1 стартмани

29.12.2023    1759    20    dima_gsv    3    

13

Журнал регистрации Мониторинг Системный администратор Программист Абонемент ($m)

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

1 стартмани

19.11.2023    1144    5    AlexSTAL    0    

8

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

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

1 стартмани

13.11.2023    3953    9    AlexSTAL    0    

47

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

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

3 стартмани

26.09.2023    2261    12    doom2good    10    

14

Журнал регистрации Статистика базы данных HighLoad оптимизация Конфигурации 1cv8 Абонемент ($m)

Удобный отчет по выполнению фоновых заданий в 1С с разбивкой по разным критериям, например по срокам, в какой последовательности, выполнение дольше всех, сколько одновременно и так далее.

5 стартмани

04.09.2023    1074    8    Maxiko    0    

8
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Shmell 543 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 543 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 Ответить
Оставьте свое сообщение