Библиотеки и готовые инструменты для чтения и экспорта журнала регистрации 1С в ClickHouse и ElasticSearch
Репозиторий содержит как библиотеки так и готовые инструменты для чтения и экспорта журнала регистрации 1С в ClickHouse и ElasticSearch. В основе служб экспорта находится pipeline (TPL Dataflow) обработка данных, за счет чего достигается высокая скорость экспорта с возможностью параметризации потребления ресурсов CPU<->RAM.
Обзор инструмента и использование в Docker (от Андрея Овсянкина):
Сверхбыстрый Журнал Регистрации 1C с помощью Yandex Clickhouse
Наименование | Описание | Actions/Nuget |
---|---|---|
OneSTools.EventLog | Библиотека для чтения журнала регистрации (старый формат, LGF и LGP файлы). Позволяет выполнять как разовое чтение данных, так и запуск в "live" режиме | |
OneSTools.EventLog.Exporter.Core | Библиотека-ядро для инструментов экспорта журнала регистрации | |
EventLogExporter | Служба для экспорта журнала регистрации в ClickHouse и ElasticSearch | |
EventLogExportersManager | Служба, выполняющая роль менеджера и наблюдающая каталоги серверов на предмет появления/удаления информационных баз с автоматическим подключением/отключением экспорта их журналов регистраций |
Инструмент поставляется с возможностью использования в 2 режимах:
В случае использования приложения без менеджера, нет необходимости заполнять секцию Manager конфигурационного файла
Файл конфигурации (appsettings.json) разбит на несколько секций, каждая из которых отвечает за функциональность определенной части приложения.
Manager:
Секция настроек менеджера служб экспорта.
"Manager": {
"ClstFolders": [
{
"Folder": "C:\\\\Program Files\\1cv8\\srvinfo\\reg_1541",
"Templates": [
{
"Mask": "upp_main",
"Template": "[IBNAME]_el"
}
]
},
{
"Folder": "C:\\\\Program Files\\1cv8\\srvinfo\\reg_1542",
"Templates": [
{
"Mask": "bp3_.*",
"Template": "[IBNAME]_el"
}
]
}
]
}
где:
Информационные базы, которые не попали ни под одну из масок будут пропущены, экспорт их журналов выполняться не будет
При использовании менеджера изменяются настройки для СУБД. При использовании ClickHouse из строки подключения нужно удалить параметр Database, менеджер автоматически создаст базу данных для каждой экспортируемой информационной базы с именем, которое будет определено в зависимости от выбранного шаблона наименования. При использовании ElasticSearch имя индекса будет определено таким же способом, поэтому параметр Index будет просто проигнорирован
Exporter:
В этой секции размещены общие параметры экспортера, не зависящие от СУБД.
"Exporter": {
"StorageType": 2,
"LogFolder": "C:\\Users\\akpaev.e.ENTERPRISE\\Desktop\\1Cv8Log",
"Portion": 10000,
"TimeZone": "Europe/Moscow",
"WritingMaxDegreeOfParallelism": 8,
"CollectedFactor": 8,
"ReadingTimeout": 1,
"LoadArchive": false
}
где:
ClickHouse:
"ConnectionStrings": {
"Default": "Host=localhost;Port=8123;Username=default;password=;Database=database_name;"
}
ElasticSearch:
"ElasticSearch": {
"Nodes": [
{
"Host": "http://192.168.0.95:9200",
"AuthenticationType": "0"
},
{
"Host": "http://192.168.0.93:9200",
"AuthenticationType": "1",
"UserName": "",
"Password": ""
}
{
"Host": "http://192.168.0.94:9200",
"AuthenticationType": "2",
"Id": "",
"ApiKey": ""
}
],
"Index": "upp-main-el",
"Separation": "M",
"MaximumRetries": 2,
"MaxRetryTimeout": 30
}
где:
Так-же при первом подключении к узлу приложение проверяет наличие шаблона индекса (Index template) с именем "oneslogs" и при отсутствии - создает. Если шаблон уже создан, то его перезапись происходить не будет, так как предполагается возможная ручная модификация первично созданного шаблона.
Пример файла кофигурации, содержащий секции для всех поддерживаемых СУБД:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"Manager": {
"ClstFolders": [
{
"Folder": "C:\\\\Program Files\\1cv8\\srvinfo\\reg_1541",
"Templates": [
{
"Mask": "upp_main",
"Template": "[IBNAME]_el"
}
]
}
]
},
"Exporter": {
"StorageType": 2,
"LogFolder": "C:\\Users\\akpaev.e.ENTERPRISE\\Desktop\\1Cv8Log",
"Portion": 10000,
"TimeZone": "Europe/Moscow",
"WritingMaxDegreeOfParallelism": 1,
"CollectedFactor": 2,
"ReadingTimeout": 1,
"LoadArchive": false
},
"ClickHouse": {
"ConnectionString": "Host=192.168.0.93;Port=8123;Database=upp_main_el;Username=default;password=;"
},
"ElasticSearch": {
"Nodes": [
{
"Host": "http://192.168.0.95:9200",
"AuthenticationType": "0"
}
],
"Index": "upp-main-el",
"Separation": "M",
"MaximumRetries": 2,
"MaxRetryTimeout": 30
}
}
Все приложения могут быть запущены в 2 режимах: как обычное приложение, либо как служба Windows/Linux. Для теста в Вашей среде, достаточно просто выполнить конфигурацию приложения в файле appsettings.json, установить runtime .net 5 (при его отсутствии) и запустить exe/dll. Базы данных в СУБД вручную создавать не нужно, они будут созданы автоматически.
Для запуска приложения как службы необходимо (название службы и путь к исполняемому файлу подставить свои):
Windows: Поместить файлы приложения в каталог и выполнить в консоли команду:
sc create EventLogExporter binPath= "C:\elexporter\EventLogExporter.exe"
и запустить службу командой:
sc start EventLogExporter
Linux: (на примере Ubuntu 20.04.1 LTS): В этом примере файлы приложения были помещены в каталог /opt/EventLogExporter В /etc/systemd/system создать файл eventlogexporter.service с содержимым:
[Service]
Type=notify
WorkingDirectory=/opt/EventLogExporter
ExecStart=/usr/bin/dotnet /opt/EventLogExporter/EventLogExporter.dll
[Install]
WantedBy=multi-user.target
Применить изменения командой:
systemctl daemon-reload
и запустить службу:
systemctl start eventlogexporter.service
Для теста был использован сервер с Intel Xeon E5-2643 3.40 GHz x2, 128 GB RAM и SAS дисками (Windows Server 2016). Экземпляр ElasticSearch установлен на хосте, экземпляр ClickHouse развернут на нем же в виртуальной машине (Hyper-V) с 4096 MiB RAM. Размер загружаемого журнала регистрации - 945 MiB.
СУБД | Порция | Время загрузки | Потребляемая память | Событий/сек | MiB/сек | Итоговый размер таблицы |
---|---|---|---|---|---|---|
ClickHouse | 10000 | 1 мин. 41 сек. | ~ 60 MiB | 71032 | 9.13 | 56.66 MiB |
ElasticSearch | 5000 | 2 мин. 35 сек. | ~ 100 MiB | 45968 | 6.09 | 1106.7 MiB |
ClickHouse использовался as is, но к колонкам (в зависимости от типа и состава данных) применены кодеки. Для шаблона индекса ElasticSearch были выставлены параметры number_of_shards = 6, number_of_replicas = 0, index.codec = best_compression и использовалось 4 потока записи.