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

24.05.20

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

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

Скачать файл

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

Наименование SM По подписке [?] Купить один файл
Исходники загрузчика и скрипты создания БД
.7z 268,89Kb
6
6
1 SM
Скачать Купить за 1 850 руб.

[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

См. также

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

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

9000 руб.

28.08.2019    32779    19    21    

71

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

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

5000 руб.

28.11.2018    20316    18    6    

40

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

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

21600 руб.

15.05.2017    43436    12    24    

40

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

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

1 стартмани

29.12.2023    1892    27    dima_gsv    3    

13

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

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

1 стартмани

19.11.2023    1231    5    AlexSTAL    0    

8

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

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

1 стартмани

13.11.2023    4219    9    AlexSTAL    0    

47

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

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

3 стартмани

26.09.2023    2447    14    doom2good    10    

14

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

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

5 стартмани

04.09.2023    1160    11    Maxiko    0    

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

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

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

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

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

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

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

Бизнесу вообще ЖР давать это зло. Есть менеджер инфобеза которому оно нужно.
20. DonAlPatino 178 01.10.19 12:46 Сейчас в теме
(19) Простите, а что им продать? 25 журналов 1С для 25 баз? comol, а давайте вместо тонкого троллинга вы мне будете предлагать имеющиеся готовые решение? И, ключевой момент, бесплатные. Я в целом на infostart и пишу, чтобы услышать альтернативные предложения.
25. comol 5073 03.10.19 14:04 Сейчас в теме
(20) На Инфостарте есть. ClickHouse или любая другая столбцовая СУБД. Перед вами не стоит задачи поисковых запросов, а вполне себе запросов аналитических. Это не троллинг, это я Вас пытался навести на решение к которому Вы можете прийти самостоятельно.
Троллинг только в том что "повторять за другими их ошибки это плохо" :).
27. DonAlPatino 178 03.10.19 14:59 Сейчас в теме
(25) т,е. мне надо поднять и изучить еще одну СУБД (кроме Эластика), сделать туда выгрузку (причем очевидно с тем же ETL - вряд ли оно из коробки умеет склеивать записи 1сного журнала), нарисовать интерфейс для работы (Kibana я знаю, Clickhousе нет и можно ли получить данные без отдельного интерфейса тоже не знаю) и это будет считаться не зря потраченным временем? И это все не уже даже толстый троллинг?
Вот тут вот @lustin призывал использовать "ёлку", а так же пенял, что никто не хотел учить Go, чтобы сделать красивую выгрузку журнала 1С в ELK с использование filebeat. Это решение он теперь продаёт. @comol теперь учит меня, что ELK - это "плохо и ошибка". И куда крестьянину податься?
28. comol 5073 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 178 03.10.19 16:28 Сейчас в теме
(28) Почитал. При моих "маленьких" объемах почему бы просто не оставить все в таблицах MS SQL?
30. comol 5073 03.10.19 16:37 Сейчас в теме
(29) Всё верно. MS SQL просто будет пытаться там транзакции лепить где они не нужны... но вцелом если освоите BULK INSERT норм. решение
31. DonAlPatino 178 03.10.19 16:44 Сейчас в теме
(30) Если вы все-таки прочитали мою статью не по диагонали, то там уже все есть. Только "ёлку" надо оторвать за "ненадобностью" (по вашему мнению). И интерфейс с поиском написать. Ну или всех дружно отправить в консоль SQL и запросами его, запросами.
В общем и целом не убедили от слова вообще.
32. comol 5073 03.10.19 17:08 Сейчас в теме
(31) Сорри. По диагонали. Интерфейс с поиском я считаю надо писать для любой СУБД. И встраивать в 1С. А grafana прекрасно работает и с ms sql. Что вы к kibana приаезались. Оно убогое.
34. fatman78 19 08.05.22 13:06 Сейчас в теме
(28)
Некрофильство конечно, но добавлю сюда ссылку на замечательный вариант мониторинга и выгрузки записей ЖР из конкретной базы или автоматически всех баз Кластера 1С в ClickHouse OneSTools.EventLog от Акпаева Евгения, там же в описании есть ссылка на видео инструкцию от Андрея Овсянкина, как это все прикрутить в Docker-е и пользоваться результатами, в т.ч. из 1С через ODBC.
24. Efimoff 129 02.10.19 16:07 Сейчас в теме
есть отчет Журнал регистрации на СКД. И пользователям можно дать, и отборы есть,
и работает быстро
26. comol 5073 03.10.19 14:04 Сейчас в теме
(24) Для объемов выше вполне подойдёт
33. alexlx 114 05.02.20 14:22 Сейчас в теме
Случайно никто не делал такой парсер на Java?
Оставьте свое сообщение