Сложнейшая загрузка журнала регистрации в ElasticSearch (или делаем настоящий ETL)

24.05.20

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

Году в 2017ом возникло (наверное странное на тот момент) желание перегрузить журнал регистраций 1С в ELK. Чтобы журналы место на диске не съедали, 1С программисты забыв поставить фильтр сервер не подвешивали, все журналы лежали в одном месте да и можно было безопасно туда ответственных пользователей пускать, чтобы сами смотрели кто какой документ поправил.На предложение написать выгрузку сразу из 1С программисты благополучно забили ("ой на это минимум месяц", "у нас срочные бизнес-фичи" и т.д. и т.п.). Зато попалась статья от Aleksey.Bochkov (https://infostart.ru/public/182820/). Ну и решили мы все это запилить без 1С программистов. Во что влезаем я тогда еще не понимал. А вылилось почти в год допилок (хорошо хоть в фоновом режиме) в цельный ETL с использованием C#, T-SQL и прочими делами.

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

Наименование Файл Версия Размер
Исходники загрузчика и скрипты создания БД
.7z 268,89Kb
6
.7z 268,89Kb 6 Скачать

[DECLAIMER]

  1. Я в курсе решения от SilverBullet и @lustin. Но момент когда оно было в свободном доступе я упустил, а денег на покупку чего-то, что не нужно бизнесу непосредственно сейчас никто не даст :-(
  2. Уже сильно позже я прочитал статью @milut "Простейшее использование Elasticsearch для работы с журналом регистрации". И, сравнивая с объемом проделанной работы, я совсем не уверен, что надо было городить такого монстра. Хотя тут можно подогнать базу про "независимость от  работы сервера 1С", "меньшую нагрузку на кластер" и "контролируемую загрузку журналов для большого количества баз из одного места"
  3. Зато если бы у меня была такая штука на прошлом месте работы (немецкая контора, которую аудировал deloitte & touche) - я бы точно представил ее аудиторам как "система хранения аудиторского следа независимая от разработчиков и администраторов 1С". Меня там очень гнобили за отсутствие "аудиторского следа".

Можно рассматривать данную статью как один из вариантов решения или пример хождения по граблям, которое лучше избегать ;-) Итак.

Для начала поставили EventLogLoader Aleksey.Bochkov, настроили загрузку журналов в MS SQL Server и последующую выгрузку в ELK и решили, что всё. Оказалось не всё. Программисты 1С посмотрели и заявили, что работать в этом не будут, т.к. записи журнала идут вперемешку, а они привыкли и готовы работать только со "стандартным журналом". Стало понятно, что загруженные данные надо трансформировать. Кроме тогоEventLogLoader временами подвисал и всё вставало, а чистку загруженных логов все равно надо делать руками

Решили улучшать - собрали группу из трех человек - я, как идеолог, @klimov_andrey как спец по ELK и программист C# и T-SQL Роман и погнали.

Роман переписал EventLogLoader  на C# - стало работать без зависаний плюс добавилось удаление загруженных журналов (только для файловых журналов и параллельно я под это дело написал переключатель форматов журналов на Python).

После нескольких итераций, Роман успешно нарисовал трансформацию данных на T-SQL, которая брала данные из таблиц EventLogLoader и преобразовывала все это в формат, который уже был похож на привычный 1С журнал. При трансформации записи накапливались в буфере, чтобы потом собирать несколько штук в единую запись журнала. В процессе очень помогла статья "Формат файлов журнала регистрации 1С 8.1/8.2 - ELF/LOG/LGF/LGP"

Финальным аккордом загрузили все журналы для 35 баз с 2 серверов с января 2018 го года. Теперь оно все в ELK и доступно для поиска. В общем получилась вот такая красота:

Итого как это выглядит с технической точки зрения.

  • Все журналы переключены в файловый режим
  • Переписанный на C# EventLoader запускается в командной строке (сделать как сервис руки не дошли) и мониторит папку с журналами (для каждой базы стартует свой поток).
  • Как только 1С сервер "отпускает" файл, EventLoader забирает его, обрабатывает и выгружает во временные таблицы SQL Server (структура таблиц как у оригинального EventLoader) и удаляет.
  • На SQL Server крутится регламентное задание, которое мониторит временные таблицы и собирает записи в "человеческий" вид, ориентируясь на запись о начале (_$Transaction$_.Begin) и о том что транзакция закончилась - зафиксирована (_$Transaction$_.Commit) или отменена (_$Transaction$_.Rollback)
  • "человеческие" записи перегружаются в таблицу event2
  • В таблицу event2 за записями приходит logtash и забирает их в ELK
  • На Kibana cделаy простенький dashboard,который все это красиво визуализирует.

В приложенном архиве:

Солюшен EventLogLoader, который включает всю разработку Aleksey.Bochkov.  на VB.Net плюс проект EventLogApp на C# (так же отдельно выложен на github)

database.sql - скрипт создания БД для MS SQL

Для работы трансформации надо создать Job urgent c следующим шагом:

declare @counter int
set @counter = 1
while @counter <= 5
begin
	exec up_AddEvents2rowsDirect 100
	set @counter = @counter + 1
end

Журнал ELK загрузка данных ElasticSearch

См. также

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

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

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

19200 руб.

15.05.2017    42521    10    24    

38

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

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

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

4800 руб.

03.09.2016    42255    33    24    

37

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

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

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

10000 руб.

23.05.2014    55472    52    16    

47

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

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

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

9000 руб.

28.08.2019    30955    14    21    

66

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

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

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

5000 руб.

28.11.2018    19545    13    6    

36

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

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

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

1 стартмани

29.12.2023    1244    12    dima_gsv    1    

12

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

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

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

1 стартмани

13.11.2023    2969    4    AlexSTAL    0    

42

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

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

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

3 стартмани

26.09.2023    1753    11    doom2good    10    

13
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 27.09.19 17:02
(0) плюс!

Читать было очень интересно. Как будто еще раз свою задачу пережил :)

А на GitHub не публиковали проект для совместной с сообществом разработки?
3. DonAlPatino 176 27.09.19 20:55 Сейчас в теме
(1) С удовольствием если расскажете как это правильно делать. Особенно учитывая что EventLogLoader по чесноку взят у Aleksey.Bochkov и просто переписан на C# и немного допилен. Я честно не знаю как корректно опубликовать финальный проект, который содержит большую часть чужого кода.
user983047; YPermitin; +2 Ответить
9. Evil Beaver 8107 30.09.19 15:37 Сейчас в теме
(3)
Я честно не знаю как корректно опубликовать финальный проект, который содержит большую часть чужого кода

Сделать пулреквест Алексею Бочкову на гитхаб
10. DonAlPatino 176 30.09.19 15:57 Сейчас в теме
(9) Тогда проект уедет к Алексею и будет зависеть от него и его свободного времени. А у него я смотрю Latest commit 2f830f1 on 16 Apr 2017
Лучше все-таки наверное честный fork.
11. Evil Beaver 8107 30.09.19 21:03 Сейчас в теме
(10) не уедет. Ваш форк так и останется у вас. А вливаться Алексею от вас или нет - пусть решит сам. Форк в любом случае можете развивать как угодно, ПР, на мой взгляд, это просто спасибка такая, респект автору.
13. DonAlPatino 176 01.10.19 09:41 Сейчас в теме
(11) Т.е. я могу создать отдельную репу как fork (вопрос у меня как ее корректно оформить со ссылкой на оригинальную репу) и отдельно отправить ПР Алексею? Может какая статья для чайников есть как это правильно оформлять.
21. Evil Beaver 8107 01.10.19 15:51 Сейчас в теме
(13) в гитхабе нажимаете у Алексея кнопку Fork и в вашем аккаунте создастся новая репа с копией оригинала и со ссылкой на оригинал. Делаете в ней что хотите, а часть изменений можете отправить назад в виде пулреквеста. Стандартная схема, посмотрите уроки работы с гитхабом в Сети. При этом ваша копия - только ваша и можете делать с ней что хотите.
22. DonAlPatino 176 02.10.19 11:25 Сейчас в теме
(21) Рома сделал. Бросьте, пожалуйста, взгляд. Если все нормально я еще в статью внесу.
Evil Beaver; +1 Ответить
23. Evil Beaver 8107 02.10.19 11:49 Сейчас в теме
(22) Ну да, так и делается форк, все ок.
2. user1287012 27.09.19 20:47 Сейчас в теме
Почему логстеш только забирает? Он же всю вашу трансформацию делает влёт и сразу складывает в эластик. Sql Server в этой цепочке вообще не нужен.
mnemchinov; +1 Ответить
4. DonAlPatino 176 27.09.19 21:00 Сейчас в теме
(2) У нас не вышло корректно разобраться с флагами начала - окончания транзакций. Плюс были ситуации когда в логе запись об окончании транзакции шла раньше записи о ее начале. Реально SQL содержит буфер на миллион записей с использованием которого обрабатываются такие ситуации. Если есть подробности и код как с этим бороться используя чистый logtash, то делитесь :-). Мы на глубокое знание ELK не претендуем :-) Любители :-)
YPermitin; +1 Ответить
5. user1287012 27.09.19 21:32 Сейчас в теме
Я тоже любитель. Но зная возможности логстеша, для него это рядовая задача. Работа с логами - основное для чего его используют во всем мире. Главное правильно настроить конвейеры приема и модификации. Ваше решение кажется слишком переусложненным.
6. DonAlPatino 176 28.09.19 14:49 Сейчас в теме
(5) Осталось дождаться вашей статьи с описанием как это сделать. Тут будет много благодарных.
mnemchinov; YPermitin; dmpas; +3 Ответить
7. Dach 372 30.09.19 11:20 Сейчас в теме
А мы используем вот это решение

https://infostart.ru/public/1111813/

и очень довольны
8. DonAlPatino 176 30.09.19 14:33 Сейчас в теме
(7) Возьму на заметку. Навскидку я все-таки предпочел логгирование конкретных баз (у нас очень много всяких архивов) ну и наличие у нас автооосвобождение места на диске тоже радует :-)
12. comol 5051 30.09.19 23:29 Сейчас в теме
И сколько раз твердили миру... Не надо ЖР в эластик грузить. Это дорого! Кто то "очень продвинутый" поигрался и понеслась....
14. DonAlPatino 176 01.10.19 09:42 Сейчас в теме
(12) Можно подробнее почему дорого?
15. comol 5051 01.10.19 10:40 Сейчас в теме
(14) Размеры посчитайте. В нормальном хранилище логов их размер должен быть в 10 раз меньше чем основной ЖР как минимум. Правильнее в 100. Не создавать нагрузку на процессор и диски. Ну не для этого эластик. Не нужен вам полнотекст по логам. А если нужен полнотекст по логам - у вас проблема или в архитектуре или бизнес процессах.
16. DonAlPatino 176 01.10.19 11:09 Сейчас в теме
(15) Ну не знаю. 2 сервера, 25 баз. В Elastic логов на 24 гига с июля 2018 года. Стандартно я чищу логи раз в пол-года вычищая по 50-60 гигов на сервере. К сожалению размер журналов 1С перед загрузкой я не посмотрел, но там явно сильно больше должно быть.
PS В "ёлку" будет пускать бизнес-юзеров. Они без полнотекстового поиска работать просто не умеют.
17. comol 5051 01.10.19 11:15 Сейчас в теме
(16) в вашем миникейсе вообще штатного ЖР хватило бы. Эластик расжимает данные а не сжимает. Почитайте описания движка. Не будет меньше. Для пользователей надо делать интерфейс истории а не "пускать в ёлку" или ещё куда
18. DonAlPatino 176 01.10.19 12:02 Сейчас в теме
(17) Хм... Вам конечно виднее, но давать права на журнал в 1С бизнесам (когда даже программеры ухитряются подвесить сервак) я не хочу. И следить за местом на дисках где живут журналы тоже. Ну и на тендерах, в которых мы участвуем, с нас всегда требуют наличие "централизованной системы сбора и управления логами".
19. comol 5051 01.10.19 12:39 Сейчас в теме
(18) и вы им продаёте эластик? :))))))). Централизованная система сбора логов обычно о другом.

Ну для маленькой базы не нужен он. Если вы за год только 50гб набираете....

Бизнесу вообще ЖР давать это зло. Есть менеджер инфобеза которому оно нужно.
20. DonAlPatino 176 01.10.19 12:46 Сейчас в теме
(19) Простите, а что им продать? 25 журналов 1С для 25 баз? comol, а давайте вместо тонкого троллинга вы мне будете предлагать имеющиеся готовые решение? И, ключевой момент, бесплатные. Я в целом на infostart и пишу, чтобы услышать альтернативные предложения.
25. comol 5051 03.10.19 14:04 Сейчас в теме
(20) На Инфостарте есть. ClickHouse или любая другая столбцовая СУБД. Перед вами не стоит задачи поисковых запросов, а вполне себе запросов аналитических. Это не троллинг, это я Вас пытался навести на решение к которому Вы можете прийти самостоятельно.
Троллинг только в том что "повторять за другими их ошибки это плохо" :).
27. DonAlPatino 176 03.10.19 14:59 Сейчас в теме
(25) т,е. мне надо поднять и изучить еще одну СУБД (кроме Эластика), сделать туда выгрузку (причем очевидно с тем же ETL - вряд ли оно из коробки умеет склеивать записи 1сного журнала), нарисовать интерфейс для работы (Kibana я знаю, Clickhousе нет и можно ли получить данные без отдельного интерфейса тоже не знаю) и это будет считаться не зря потраченным временем? И это все не уже даже толстый троллинг?
Вот тут вот @lustin призывал использовать "ёлку", а так же пенял, что никто не хотел учить Go, чтобы сделать красивую выгрузку журнала 1С в ELK с использование filebeat. Это решение он теперь продаёт. @comol теперь учит меня, что ELK - это "плохо и ошибка". И куда крестьянину податься?
28. comol 5051 03.10.19 15:22 Сейчас в теме
(27) Я не призываю переделывать конечно... в Вашем случае даже трудозатраты на Эластик уже наверное лишние.

@lustin призывал использовать "ёлку"

Не умоляя достоинств всё-таки своя голова на плечах должна тоже быть.
Вы же в магазине не покупаете всё что вам продают...

А вот тут Флант (знаете же кто такие) https://habr.com/ru/company/flant/blog/341386/ "не продают" систему хранения логов в кликхаус.
А вот тут https://habr.com/ru/company/vk/blog/430168/ это делают вконтакте...

Но я не призываю "верить мне или кому бы то ни было". Выгрузите и туда и туда по пару десятков миллионов записей и проверьте объем и скорость.
ETL там будет один и тот же ClickHouse поддерживает вполне себе нормальный SQL (правда записи надо добавлять не им а порциями)

ClickHouse поддерживает Grafana https://grafana.com/grafana/plugins/vertamedia-clickhouse-datasource/installation т.е. не нужен вам Kibana. Да и для ELK я бы тоже графану использовал.
29. DonAlPatino 176 03.10.19 16:28 Сейчас в теме
(28) Почитал. При моих "маленьких" объемах почему бы просто не оставить все в таблицах MS SQL?
30. comol 5051 03.10.19 16:37 Сейчас в теме
(29) Всё верно. MS SQL просто будет пытаться там транзакции лепить где они не нужны... но вцелом если освоите BULK INSERT норм. решение
31. DonAlPatino 176 03.10.19 16:44 Сейчас в теме
(30) Если вы все-таки прочитали мою статью не по диагонали, то там уже все есть. Только "ёлку" надо оторвать за "ненадобностью" (по вашему мнению). И интерфейс с поиском написать. Ну или всех дружно отправить в консоль SQL и запросами его, запросами.
В общем и целом не убедили от слова вообще.
32. comol 5051 03.10.19 17:08 Сейчас в теме
(31) Сорри. По диагонали. Интерфейс с поиском я считаю надо писать для любой СУБД. И встраивать в 1С. А grafana прекрасно работает и с ms sql. Что вы к kibana приаезались. Оно убогое.
34. fatman78 17 08.05.22 13:06 Сейчас в теме
(28)
Некрофильство конечно, но добавлю сюда ссылку на замечательный вариант мониторинга и выгрузки записей ЖР из конкретной базы или автоматически всех баз Кластера 1С в ClickHouse OneSTools.EventLog от Акпаева Евгения, там же в описании есть ссылка на видео инструкцию от Андрея Овсянкина, как это все прикрутить в Docker-е и пользоваться результатами, в т.ч. из 1С через ODBC.
24. Efimoff 129 02.10.19 16:07 Сейчас в теме
есть отчет Журнал регистрации на СКД. И пользователям можно дать, и отборы есть,
и работает быстро
26. comol 5051 03.10.19 14:04 Сейчас в теме
(24) Для объемов выше вполне подойдёт
33. alexlx 110 05.02.20 14:22 Сейчас в теме
Случайно никто не делал такой парсер на Java?
Оставьте свое сообщение