EventLogLoader | ||
EventLogLoaderManager | ||
EventLogLoaderService | ||
.gitattributes | ||
.gitignore | ||
EventLogLoader.sln | ||
README.md |
Периодическая загрузка событий из журналов регистрации ИБ 1С:Предприятие 8 во внешнее хранилище (MS SQL Server, MySQL или ElasticSearch)
Основная страница приложения http://infostart.ru/public/182820/Еще один вариант парсера файлов журнала регистрации для 1С:Предприятие 8.2/8.3. Преимущества:
- Читает журнал регистрации напрямую, что дает высокую скорость.
- Знает, где остановилось чтение в прошлый раз, и начинает с этого места при следующем запуске.
- Может работать и как windows-служба, и как обычное приложение.
Приложение написано на .NET 4.6.
В качестве источника данных может быть как старый (текстовый) формат журнала регистрации, так и новый (SQLite база данных). В качестве хранилища событий могут выступать MS SQL Server, MySQL и ElasticSearch.
Особенности работы
MS SQL Server
Строка соединения с хранилищем:- для windows-авторизации Data Source=MSSQL1;Server=имя сервера;Database=имя базы;Integrated Security=true;
- для обычной авторизации Data Source=MSSQL1;Server=имя сервера;Database=имя базы;Password=Пароль;User ID=Имя пользователя
MySQL
ElasticSearch
Строка соединения с хранилищем - protocol://servername:portname Например (если ES запущен на той же машине, где работает загрузчик): http://localhost:9200 Запись событий в базу выполняется порциями по 1000 записей с помощью Bulk Insert.Порядок работы:
-
На сервере MS SQL создать пустую базу данных.
-
На сервере приложений 1С, из БД которого нужно грузить события, под административными правами запустить EventLogLoaderManager.exe
-
Указать строку соединения с базой.
Можно использовать шаблоны: ;
-
Указать интервал между циклами чтения событий из ЖР. Допустимо ставить несколько секунд - на производительности сервера не скажется.
-
Отметить те БД, события из которых необходимо периодически загружать в базу.
-
Нажать «Сохранить параметры», при этом в каталоге программы создается файл настроек setting.ini
-
Если нужна периодическая загрузка – нажимаем «Установить службу», ищем в списке служб «EventLog loader service» и исправляем аккаунт, от имени которого будет работать служба. Если строка соединения содержит логин и пароль, то можно ничего не менять, если нет, то службу нужно запускать от имени правильной учетной записи windows, которая имеет полные права на SQL-базу с событиями.
-
Если нужна разовая загрузка – запускаем из каталога программы EventLogLoader.exe. Следует учесть, что это приложение, как и служба, работает в бесконечном цикле (проверяет новые события, пишет их в базу, делает паузу, затем повторяет заново), поэтому прерывается она при нажатии любой кнопки мыши.
Некоторые особенности
-
Для каждой ИБ журнал регистрации грузится в отдельном потоке. Если начнете грузить по сотне баз, то велика вероятность на начальном этапе повесить сервер. В дальнейшем, если проверять новые события достаточно часто (например, каждые 10 секунд), то служба быстро их записывает в базу без особой загрузки сервера.
-
Если загрузку прервать, то при повторном запуске она продолжится с места остановки (позиция сохраняется в БД).
-
Таблицы в БД создаются автоматически. Если вы удалили какая-нибудь таблицу - надо перезапустить службу.
-
Все события по всем ИБ хранятся в одной таблице. Разделитель – колонка «Код информационной базы».
-
Логи с ошибками хранятся в каталоге программы в папке «log».
-
Работает только с платформой 8.2 (файлами lgf и lgp).
-
В таблицах созданы только основные кластерные индексы по полю "Код информационной базы". Для ускорения запросов, которые вам требуются регулярно, нужно добавлять свои индексы.
-
Несколько полей осталось нераспознанными (Field2, Field7, Field8). Если вам известно их назначение - сообщите, пожалуйста.
Описание таблиц
-
Infobases - список обрабатываемых ИБ. Код генерируется автоматически при добавлении новой базы в этот список. Эти же коды определяют принадлежность записей в определенной ИБ во всех других таблицах.
-
Params - хранит последние прочитанные файлы и позиции в них.
-
Назначение остальных таблиц понятно из их названия. Итоговая таблица с событиями с присоединенными справочниками
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 поддерживают сжатие.