diff --git a/README.md b/README.md index ecd7d4a..a63e03d 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,114 @@ -

Периодическая загрузка событий из журналов регистрации ИБ 1С:Предприятие 8 в базу MS SQL Server/MySQL или индекс ElasticSearch

-Описание http://infostart.ru/public/182820/ +

Периодическая загрузка событий из журналов регистрации ИБ 1С:Предприятие 8 во внешнее хранилище (MS SQL Server, MySQL или ElasticSearch)

+Основная страница приложения http://infostart.ru/public/182820/ + +Еще один вариант парсера файлов журнала регистрации для 1С:Предприятие 8.2/8.3. +Преимущества: +1) Читает журнал регистрации напрямую, что дает высокую скорость. +2) Знает, где остановилось чтение в прошлый раз, и начинает с этого места при следующем запуске. +3) Может работать и как windows-служба, и как обычное приложение. + +Приложение написано на .NET 4.6. + +В качестве источника данных может быть как старый (текстовый) формат журнала регистрации, так и новый (SQLite база данных). +В качестве хранилища событий могут выступать MS SQL Server, MySQL и ElasticSearch. + +

Особенности работы

+

MS SQL Server

+Строка соединения с хранилищем: + +Запись событий в базу выполняется порциями по 1000 записей с помощью Bulk Insert. + +

MySQL

+ +

ElasticSearch

+Строка соединения с хранилищем - protocol://servername:portname +Например (если ES запущен на той же машине, где работает загрузчик): http://localhost:9200 +Запись событий в базу выполняется порциями по 1000 записей с помощью Bulk Insert. + +Порядок работы: + +1) На сервере MS SQL создать пустую базу данных. + +2) На сервере приложений 1С, из БД которого нужно грузить события, под административными правами запустить EventLogLoaderManager.exe + +3) Указать строку соединения с базой. + +Можно использовать шаблоны: +; + +4) Указать интервал между циклами чтения событий из ЖР. Допустимо ставить несколько секунд - на производительности сервера не скажется. + +5) Отметить те БД, события из которых необходимо периодически загружать в базу. + +6) Нажать «Сохранить параметры», при этом в каталоге программы создается файл настроек setting.ini + +7) Если нужна периодическая загрузка – нажимаем «Установить службу», ищем в списке служб «EventLog loader service» и исправляем аккаунт, от имени которого будет работать служба. Если строка соединения содержит логин и пароль, то можно ничего не менять, если нет, то службу нужно запускать от имени правильной учетной записи windows, которая имеет полные права на SQL-базу с событиями. + +8) Если нужна разовая загрузка – запускаем из каталога программы EventLogLoader.exe. Следует учесть, что это приложение, как и служба, работает в бесконечном цикле (проверяет новые события, пишет их в базу, делает паузу, затем повторяет заново), поэтому прерывается она при нажатии любой кнопки мыши. + + + + +Некоторые особенности + +1) Для каждой ИБ журнал регистрации грузится в отдельном потоке. Если начнете грузить по сотне баз, то велика вероятность на начальном этапе повесить сервер. В дальнейшем, если проверять новые события достаточно часто (например, каждые 10 секунд), то служба быстро их записывает в базу без особой загрузки сервера. + +2) Если загрузку прервать, то при повторном запуске она продолжится с места остановки (позиция сохраняется в БД). + +3) Таблицы в БД создаются автоматически. Если вы удалили какая-нибудь таблицу - надо перезапустить службу. + +4) Все события по всем ИБ хранятся в одной таблице. Разделитель – колонка «Код информационной базы». + +5) Логи с ошибками хранятся в каталоге программы в папке «log». + +6) Работает только с платформой 8.2 (файлами lgf и lgp). + +7) В таблицах созданы только основные кластерные индексы по полю "Код информационной базы". Для ускорения запросов, которые вам требуются регулярно, нужно добавлять свои индексы. + +8) Несколько полей осталось нераспознанными (Field2, Field7, Field8). Если вам известно их назначение - сообщите, пожалуйста. + + +Описание таблиц + + + +1) Infobases - список обрабатываемых ИБ. Код генерируется автоматически при добавлении новой базы в этот список. Эти же коды определяют принадлежность записей в определенной ИБ во всех других таблицах. + +2) Params - хранит последние прочитанные файлы и позиции в них. + +3) Назначение остальных таблиц понятно из их названия. Итоговая таблица с событиями с присоединенными справочниками + +SELECT TOP (1000) Infobases.Name, Events.DateTime, Events.TransactionStatus, Events.TransactionStartTime, Events.TransactionMark, + Users.Name AS [User], Computers.Name AS Computer, Applications.Name AS App, Events.Field2, EventsType.Name AS EventType, + Events.EventType, Events.Comment, Metadata.Name AS Metadata, Events.DataStructure, Events.DataString, + Servers.Name AS [Server], MainPorts.Name AS MainPort, SecondPorts.Name AS SecondPort, Events.Seance +FROM Events INNER JOIN + Applications ON Events.InfobaseCode = Applications.InfobaseCode AND Events.AppName = Applications.Code INNER JOIN + Computers ON Events.InfobaseCode = Computers.InfobaseCode AND Events.ComputerName = Computers.Code INNER JOIN + EventsType ON Events.InfobaseCode = EventsType.InfobaseCode AND Events.EventID = EventsType.Code INNER JOIN + Infobases ON Events.InfobaseCode = Infobases.Code INNER JOIN + Users ON Events.InfobaseCode = Users.InfobaseCode AND Events.UserName = Users.Code INNER JOIN + SecondPorts ON Events.InfobaseCode = SecondPorts.InfobaseCode AND Events.SecondPortID = SecondPorts.Code INNER JOIN + Servers ON Events.ServerID = Servers.Code AND Events.InfobaseCode = Servers.InfobaseCode INNER JOIN + MainPorts ON Events.InfobaseCode = MainPorts.InfobaseCode AND Events.MainPortID = MainPorts.Code INNER JOIN + Metadata ON Events.InfobaseCode = Metadata.InfobaseCode AND Events.MetadataID = Metadata.Code + + +Объемы получаемой информации + +Хранение структурированных данных более затратное с точки зрения требуемого места на дисках. +Иными словами - объем базы данных будет существенно больше суммы объемов всех ЖР, которые были обработаны и загружены. + +Реальный пример: + +2 информационные базы с объемом ЖР 2132 Мб (1192+971). Время первичного разбора в 2 потока (т.к. базы 2) - около 1,5 часов. + +Общее количество событий - 19'507'484 млн. + +Объем базы на MS SQL Server - 12879 Мб, т.е. примерно в 6 раз больше! + +НО - если применить сжатие таблиц, как, например, описано здесь, то получим 1610 Мб, т.е. даже меньше исходных данных. +К сожалению, не все версии MS SQL Server поддерживают сжатие.