All Projects → akpaevj → OneSTools.EventLog

akpaevj / OneSTools.EventLog

Licence: MIT license
Библиотеки и готовые инструменты для чтения и экспорта журнала регистрации 1С в ClickHouse и ElasticSearch

Programming Languages

C#
18002 projects

Projects that are alternatives of or similar to OneSTools.EventLog

yabr.os
Чтение скобочного формата файлов 1С (oscript)
Stars: ✭ 33 (-65.62%)
Mutual labels:  clickhouse, 1c
Storagetapper
StorageTapper is a scalable realtime MySQL change data streaming, logical backup and logical replication service
Stars: ✭ 232 (+141.67%)
Mutual labels:  clickhouse
Clickhouse Rpm Install
How to install clickhouse RPM packages
Stars: ✭ 136 (+41.67%)
Mutual labels:  clickhouse
Vectorsql
VectorSQL is a free analytics DBMS for IoT & Big Data, compatible with ClickHouse.
Stars: ✭ 171 (+78.13%)
Mutual labels:  clickhouse
Clickhouse Net
Yandex ClickHouse fully managed .NET client
Stars: ✭ 142 (+47.92%)
Mutual labels:  clickhouse
Clickhouse exporter
This is a simple server that periodically scrapes ClickHouse stats and exports them via HTTP for Prometheus(https://prometheus.io/) consumption.
Stars: ✭ 193 (+101.04%)
Mutual labels:  clickhouse
Sqli
orm sql interface, Criteria, CriteriaBuilder, ResultMapBuilder
Stars: ✭ 1,644 (+1612.5%)
Mutual labels:  clickhouse
Clickhouse
ClickHouse® is a free analytics DBMS for big data
Stars: ✭ 21,089 (+21867.71%)
Mutual labels:  clickhouse
Promhouse
PromHouse is a long-term remote storage with built-in clustering and downsampling for Prometheus 2.x on top of ClickHouse.
Stars: ✭ 212 (+120.83%)
Mutual labels:  clickhouse
Clickhouse Sqlalchemy
ClickHouse dialect for SQLAlchemy
Stars: ✭ 166 (+72.92%)
Mutual labels:  clickhouse
Flink Clickhouse Sink
Flink sink for Clickhouse
Stars: ✭ 165 (+71.88%)
Mutual labels:  clickhouse
Pg2ch
Data streaming from postgresql to clickhouse via logical replication mechanism
Stars: ✭ 149 (+55.21%)
Mutual labels:  clickhouse
Synch
Sync data from the other DB to ClickHouse(cluster)
Stars: ✭ 200 (+108.33%)
Mutual labels:  clickhouse
Carbon Clickhouse
Graphite metrics receiver with ClickHouse as storage
Stars: ✭ 139 (+44.79%)
Mutual labels:  clickhouse
Graphouse
Graphouse allows you to use ClickHouse as a Graphite storage.
Stars: ✭ 241 (+151.04%)
Mutual labels:  clickhouse
Pandahouse
Pandas interface for Clickhouse database
Stars: ✭ 126 (+31.25%)
Mutual labels:  clickhouse
Clickhouse Cli
A third-party client for the Clickhouse DBMS server.
Stars: ✭ 164 (+70.83%)
Mutual labels:  clickhouse
Go Clickhouse
Golang ClickHouse connector
Stars: ✭ 174 (+81.25%)
Mutual labels:  clickhouse
prometheus to clickhouse
Prometheus to Clickhouse Adapter
Stars: ✭ 14 (-85.42%)
Mutual labels:  clickhouse
Go Clickhouse
Golang SQL database driver for Yandex ClickHouse
Stars: ✭ 240 (+150%)
Mutual labels:  clickhouse

Инструменты для чтения и экспорта журнала регистрации 1С

Репозиторий содержит как библиотеки так и готовые инструменты для чтения и экспорта журнала регистрации 1С в ClickHouse и ElasticSearch. В основе служб экспорта находится pipeline (TPL Dataflow) обработка данных, за счет чего достигается высокая скорость экспорта с возможностью параметризации потребления ресурсов CPU<->RAM.

Обзор инструмента и использование в Docker (от Андрея Овсянкина):
Сверхбыстрый Журнал Регистрации 1C с помощью Yandex Clickhouse

Состав:

Наименование Описание Actions/Nuget
OneSTools.EventLog Библиотека для чтения журнала регистрации (старый формат, LGF и LGP файлы). Позволяет выполнять как разовое чтение данных, так и запуск в "live" режиме Nuget EventLog .NET 5
OneSTools.EventLog.Exporter.Core Библиотека-ядро для инструментов экспорта журнала регистрации
EventLogExporter Служба для экспорта журнала регистрации в ClickHouse и ElasticSearch EventLogExporter .NET 5
EventLogExportersManager Служба, выполняющая роль менеджера и наблюдающая каталоги серверов на предмет появления/удаления информационных баз с автоматическим подключением/отключением экспорта их журналов регистраций

Get started:

Инструмент поставляется с возможностью использования в 2 режимах:

  1. С использованием менеджера экспортеров - это полноценный сервис наблюдения за кластером серверов 1С, автоматизирующий подключение/отключение экспорта ЖР информационных баз (EventLogExportersManager.exe/dll)
  2. Без использования менеджера - отдельный процесс, обслуживающий ЖР конкретно указанной информационной базы (EventLogExporter.exe/dll)

В случае использования приложения без менеджера, нет необходимости заполнять секцию 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"
          }
        ]
      }
    ]
  }

где:

  1. ClstFolders - массив описаний каталогов рабочих серверов (reg_*)
  2. Folder - Путь к каталогу рабочего сервера (reg_*)
  3. Templates - шаблоны обрабатываемых наименований информационных баз и правила наименования баз данных логов
    Mask - регулярное выражение, применяемое к имени информационной базы
    Template - шаблон имени базы данных хранения логов журнала. Обязательно должен содержать в себе переменную [IBNAME]

Информационные базы, которые не попали ни под одну из масок будут пропущены, экспорт их журналов выполняться не будет

При использовании менеджера изменяются настройки для СУБД. При использовании 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
  }

где:

  1. StorageType - тип хранилища журнала регистрации. Может принимать значения:
    1 - Clickhouse
    2 - ElasticSearch
  2. LogFolder - путь к каталогу журнала регистрации 1С
  3. Portion - Размер порции, записываемый в БД за одну итерацию (10000 по умолчанию)
  4. TimeZone - часовой пояс (в формате IANA Time Zone Database), в котором записан журнал регистрации. По умолчанию - часовой пояс системы
  5. WritingMaxDegreeOfParallelism - количество потоков записи в СУБД. Т.к. в ClickHouse не поддерживаются одновременные BULK операции, то параметр имеет смысл только для ElasticSearch. По умолчанию - 1
  6. CollectedFactor - коэффициент количества элементов, которые могут быть помещены в очередь записи. Предельное количество элементов равно Portion * CollectedFactor. По умолчанию - 2
  7. ReadingTimeout - таймаут сброса данных при достижении конца файла (в секундах). По умолчанию - 1 сек.
  8. LoadArchive - Специальный параметр, предназначенный для первоначальной загрузки архивных данных. При установке параметра в true, отключается "live" режим и не выполняется запрос последнего обработанного файла из БД

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
  }

где:

  1. Nodes - узел, содержащий хосты кластера ElasticSearch, либо один узел при работе с одной нодой. При недоступности текущего узла будет происходить переключение на следующий узел списка. Для узлов доступны 3 типа аутентификации:
    0 - без аутентификации
    1 - Basic
    2 - ApiKey
  2. Index - префикс названия индекса, конечное название будет определено в зависимости от значения параметра Separation.
  3. Separation - метод разделения данных по индексам. Может принимать значения:
    H (Hour) - делить индексы по часам. Пример конечного названия индекса: index-name-el-2020010113
    D (Day) - делить индексы по дням. Пример конечного названия индекса: index-name-el-20200101
    M (Month) - делить индексы по месяцам. Пример конечного названия индекса: index-name-el-202001
    При указании любого другого (либо не указании вовсе) значения, разделения индекса не будет и конечное название индекса будет выглядеть так: index-name-el-all
  4. MaximumRetries - количество попыток переподключения к очередному узлу
  5. MaxRetryTimeout - таймаут попытки подключения

Так-же при первом подключении к узлу приложение проверяет наличие шаблона индекса (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 потока записи.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].