Инструменты экспорта журнала регистрации 1С в ClickHouse/ElasticSearch

15.12.20

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

Как мы все знаем, штатные средства для просмотра журнала регистрации оставляют желать лучшего. Это и стало поводом для создания собственных.

Удалил релизы инструментов, которые были выложены здесь. Все последующие обновления и справочная информация обновляются и доступны только на странице репозитория. Оставлю эту статью как анонс.

Реализована работа только с файловым форматом журнала (lgp и lgf).

В публикации описаны инструменты для 2 СУБД:

  • ElasticSearch
  • ClickHouse

Я в своей ежедневной работе остановился на связке ClickHouse + Redash для визуализации данных (за что отдельное спасибо Юрию, сам бы не добрался посмотреть ее:)).

Для работы с ElasticSearch достаточно лишь установленного экземпляра ноды и Kiban`ы для визуализации.

Приложения работают в "Live" режиме, автоматически отслеживая появление/удаление файлов журнала и продолжая работать с последней позиции файла после перезапуска службы. Написаны на C# (net standard 2.1, net 5). Исходный код всех приложений открыт под лицензией MIT и может использоваться Вами как угодно. 

Репозиторий на Github состоит из нескольких проектов, вершиной айсберга которых является служба EventLogExporter.

 Ну, приступим.

Состав репозитория:

  • OneSTools.EventLog - Библиотека для чтения журнала регистрации (старый формат, LGF и LGP файлы). Позволяет выполнять как разовое чтение данных, так и запуск в "live" режиме
  • OneSTools.EventLog.Exporter.Core - Библиотека-ядро для инструментов экспорта журнала регистрации, на основе которой можно создавать приложения для экспорта в новые СУБД.
  • OneSTools.EventLog.Exporter.ClickHouse - Базовый пакет, реализующий интерфейс IEventLogStorage для экспорта журнала регистрации 1С в ClickHouse
  • OneSTools.EventLog.Exporter.ElasticSearch - Базовый пакет, реализующий интерфейс IEventLogStorage для экспорта журнала регистрации 1С в ElasticSearch
  • EventLogExporter - Служба для экспорта журнала регистрации в ClickHouse и ElasticSearch

Get started:

Конфигурация:

Файл конфигурации (appsettings.json) разбит на несколько секций, каждая из которых отвечают за функциональность определенной части приложения.

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: Заполнение секции требуется, если в секции Exporter у параметра StorageType указано значение 1.

"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"
    }
  },
  "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 потока записи.

Исходные коды этих приложений и других библиотек для работы с данными 1С можно посмотреть на моей странице Github. Там же можно бесплатно скачать архивы.

Журнал регистрации Elastic search SQL Server Clickhouse Мониторинг Администрирование

См. также

Журнал изменений с восстановлением состояния ссылочных объектов и архивацией по HTTP / COM (расширение + конфигурация, 8.3.14+, ЛЮБАЯ конфигурация)

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

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

21600 руб.

15.05.2017    42624    12    24    

38

Версионирование объектов для Альфа-авто, ред 4 и 5.

Оптовая торговля Розничная торговля Журнал регистрации Платформа 1С v8.3 Конфигурации 1cv8 Автомобили, автосервисы Управленческий учет Платные (руб)

Подсистема версионирования объектов для конфигураций Рарус: Альфа-авто на базе типовой подсистемы от 1С. Позволяет хранить историю изменений документов и справочников, кто, что, когда и какие данные изменял, а так же вернуться к предыдущим версиям объекта.

4800 руб.

03.09.2016    42301    33    24    

37

LogManager - Внешний журнал регистрации в SQL

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

Журнал регистрации платформы 1С в SQL. Общая база хранения всех журналов. Через com-подключение регламентным заданием периодически догружает журналы регистраций из рабочих баз. Предоставляет настраиваемый доступ к журналам по правам подразделений. Формирует отчеты по пользователям и данным.

10000 руб.

23.05.2014    55572    52    16    

47

Мониторинг баз и серверов 1С

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

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

9000 руб.

28.08.2019    31103    14    21    

66

LogiCH - хранение и анализ журнала регистрации в сверхбыстрой СУБД ClickHouse

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

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

5000 руб.

28.11.2018    19621    13    6    

37

Регламентное сокращение журнала регистрации

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

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

1 стартмани

29.12.2023    1383    14    dima_gsv    1    

12

Магия преобразований: ЖР, ТЖ, RAS/RAC, логи - универсальное решение Vector

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

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

1 стартмани

13.11.2023    3136    4    AlexSTAL    0    

42

Мониторинг состояния с отправкой в telegram

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

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

3 стартмани

26.09.2023    1829    11    doom2good    10    

13
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. user612295_death4321 12.11.20 19:54 Сейчас в теме
Можно ли привести аналогию сравнения размеров данных ?

Например имеем входные данные интенсивной работы пользователей, допустим ЖР на 1 ГБ в сутки.

Сколько эти 1 ГБ будут весить в КХ или Эластике ? Скорость ведь не бесплатная..
3. akpaevj 202 14.11.20 10:28 Сейчас в теме
(1) Опубликовал результаты теста
ivabanus; user612295_death4321; +2 Ответить
4. user612295_death4321 14.11.20 14:22 Сейчас в теме
(3) Спасибо, очень познавательно. Честно говоря, у меня есть эта проблема с тем, что слишком огромные ЖР и я все мечтаю начать куда нибудь их начать переливать.

Евгений, а можете поделиться целевой архитектурой, как у себя организовали импорт данных в КХ ?

Интересны следующие вещи:
1. Какая стратегия формирования файлов журналов регистрации в продуктиве? Час / День / Неделя / Месяц / etc ?
2. Служба импорта работает напрямую на сервере приложений 1С или вынесена на какую то отдельную ноду на которую копируются файлы ЖР?
3. КХ требует каких - то навыков администрирования, грамотного обслуживания и т.д.?
4. Как часто очищаете данные из КХ ?
5. akpaevj 202 14.11.20 14:43 Сейчас в теме
(4)
1. Файлы ЖР делятся по дням и удаляются ежедневно.
2. В целом, схема такая:
Есть 2 сервера приложений 1С. На одном из них установлен сборщик и виртуалка с КХ и Redash. Сбор осуществляется с локальных и сетевых папок.
3. На этот вопрос нет общего ответа. У меня развернут 1 экземпляр КХ и все обслуживание сводится к мониторингу доступности, так как нет таких объёмов логов, которые могут потребовать отдельного внимания на КХ. На более сложных системах возможно и потребуется, но это должны быть действительно большие системы с кластером КХ и/или ОЧЕНЬ большим объёмом логов. Вообще, у Яндекса очень хорошая документация на эту БД, там есть ответы на большинство вопросов.
4. Размер таблиц логов настолько мал, что, кажется, чистить их будет мой преемник:))
vvp117; user612295_death4321; user1464234; +3 Ответить
6. user612295_death4321 17.11.20 18:25 Сейчас в теме
(5) Евгений, а я что-то сразу не обратил внимание. Я верно читаю результаты тестирования, что при исходном текстовом файле лога журнала регистрации условных 3.3 ГБ, на выходе в КХ мы получили логов на 15 мегабайт. Может где-то нолики или циферки потерялись???
7. akpaevj 202 17.11.20 18:33 Сейчас в теме
(6) Вы все правильно прочитали, ошибки нет. Так как СУБД колоночная, то на размер напрямую влияет уникальность значений в столбце
16. user612295_death4321 05.12.20 08:14 Сейчас в теме
(7) Протестировал у себя, у меня результаты конечно не такие радужные, 600 МБ логов превратились в 37 МБ, но все ровно круто)
17. akpaevj 202 05.12.20 11:30 Сейчас в теме
(16) Я протестирую еще на нескольких наборах данных и обновлю данные тестов. Похоже моя тестовая выборка была не очень репрезентативной. С 600 до 37 - просто отличный результат.
8. DonAlPatino 176 18.11.20 20:00 Сейчас в теме
(5)
1. Старые файлы ЖР удаляются вашим приложением или что-то отдельное работает?
2. Я правильно понимаю, что файл тоже читает само приложение - никаких logtash/filebeat? Оно же запоминает точку остановки в случае перезапуска?
А сборку нескольких записей в журнал в одну строку тоже само приложение делает?
Проблема с тем что начало журналирования операции попало во "вчерашний" файл, а конец в "сегодняшний" как-то решается? Или отсутствие записей об окончании в случае перезапуска сервера?
9. akpaevj 202 18.11.20 21:11 Сейчас в теме
(8) В статье уже несколько устаревшая информация, обновлять ее здесь не планирую. Очень много нововведений, в том числе работа с кластером elastic'а. Все обновления документации и инструментов доступно на странице репозитория в github.
1. В статье описан только инструмент экспорта. Дополнительно я в данный момент разрабатываю и тестирую у себя службу, которая автоматически добавляет новые базы к экспорту логов и удаляет устаревшие файлы.
2. Кроме самого elastic'а больше ничего не нужно. Приложение запоминает местоположение и продолжает экспорт с последней прочитанной позиции. Вторую часть вопроса (о начале и конце "операции") не совсем понял, поясните
10. DonAlPatino 176 20.11.20 15:01 Сейчас в теме
(9) Ох, говорила мне мама - учи C#, а то так и будешь всю жизнь "манагером".

Я правильно понимаю, что вот тут (это из EventLogReader.cs)
            var (Value, Uuid) = _lgfReader.GetReferencedObjectValue(ObjectType.Users, (int)parsedData[3], cancellationToken);
            eventLogItem.UserUuid = Uuid;
            eventLogItem.User = Value;


Как раз по ссылке собираются все записи с одним ID, чтобы потом выкинуть в КХ или Эластик одной записью?
Сорри я парсером журналов больше года назад занимался, а сейчас вообще из мира 1С ушел.
Просто такую задачку мы решали сначала загружая все в SQL базу, а затем там объединяли записи (Сложнейшая загрузка журнала регистрации в ElasticSearch (или делаем настоящий ETL)
А тут все сильно проще, быстрее и того монстра явно можно закопать.
11. DonAlPatino 176 20.11.20 15:28 Сейчас в теме
(10)Перечитал комменты к моей старой статье. Я как раз comol'а просил поделиться как правильно сделать на КХ. Прошло время - вот оно :-)
13. akpaevj 202 20.11.20 17:53 Сейчас в теме
(11) А, я понял о каком объединении Вы говорите. Вероятно, речь идет об агрегации начала/конца/отката транзакции. Этим служба не занимается. Для анализа длительности транзакций на мой взгляд проще пользоваться clickhouse с его mergetree и постобработкой, ну и ТЖ, естественно.
14. DonAlPatino 176 23.11.20 12:33 Сейчас в теме
(13)Ну тогда это пока не то :-( Я же все это включая буферную базу замутил, чтобы отчет в ELKе "как в 1С" получить. Ибо те же одинэсники встали в позу. И делали мы ее практически без участия 1с программеров.
Вот когда будет рассказ про "mergetree и постобработку" с выводом результатов как в 1С - тогда можно будет и мою систему закопать наконец-то.
15. akpaevj 202 23.11.20 15:18 Сейчас в теме
(14) С задачей агрегации данных и получения длительности транзакции все просто - ее не стоит выполнять с помощью журнала регистрации, that's all)) Только с помощью ТЖ, либо с помощью подсистемы "Оценка производительности" из БСП.
12. akpaevj 202 20.11.20 16:44 Сейчас в теме
(10) Это фрагмент кода заполнения экземпляра класса EventLogItem (записи события журнала), где устанавливаются GUID и Имя пользователя:) ничего более. В журнале нет нескольких записей с одним id. Каждое событие представлено отдельной записью. Видел Вашу статью, знатно вы там наворотили:))
2. akpaevj 202 12.11.20 20:29 Сейчас в теме
(1) Без суда и следствия могу сказать что клик выигрывает по всем показателям с очень большим отрывом. В ближайшее время выложу сравнение
18. Evil Beaver 8114 30.12.20 12:18 Сейчас в теме
Огнищще! Я джва года ждал такую разработку!
axelerleo; akpaevj; +2 Ответить
19. rukalico 13.02.21 17:41 Сейчас в теме
Дошел по инструкции до пункта:
Для теста в Вашей среде, достаточно просто выполнить конфигурацию приложения в файле appsettings.json, установить runtime .net 5 (при его отсутствии) и запустить exe/dll

1. Откуда брать exe? Нужно самому компилить через Visual Studio?
2. appsettings.json есть в 2х папках - OneSTools.EventLog.Exporter.Manager и OneSTools.EventLog.Exporter
Какую папку и какой файл в итоге нужно использовать?
20. rukalico 14.02.21 12:30 Сейчас в теме
(19) Снимаю этот вопрос.
Скомпилировал через Visual Studio и установил как службу.
21. akpaevj 202 12.04.21 15:30 Сейчас в теме
(20) Прошу прощения, по какой-то причине пропустил Ваши сообщения. Вы, вероятно, скачали исходники, поэтому и не нашли там никаких exe файлов) В Releases репозитория лежат скомпилированные приложения. Менеджер - это обертка над службами экспорта, по этому поводу в документации все описано
22. bavkyz 3 18.06.21 21:09 Сейчас в теме
добрый, подскажите не могу запустить C:\EventLogExporter>EventLogExportersManager.exe/dll
Unhandled exception. System.Exception: StorageType parameter is not specified
at OneSTools.EventLog.Exporter.Manager.ExportersManager.GetStorage(String dataBaseName)
at OneSTools.EventLog.Exporter.Manager.ExportersManager.StartExporter(String path, String name, String dataBaseName)
at OneSTools.EventLog.Exporter.Manager.ExportersManager.ExecuteAsync(CancellationToken stoppingToken)
at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
at OneSTools.EventLog.Exporter.Manager.Program.Main(String[] args)

сам файл настройки
{
"Manager": {
"ClstFolders": [
{
"Folder": "C:\\\\Program Files\\1cv8\\srvinfo\\reg_1541",
"Templates": [
{
"Mask": "alfatest2",
"Template": "[IBNAME]"
}
]
}
]
},
"ClickHouse": {
"ConnectionString": "Host=localhost;Port=8123;Username=default;password=;"
},
}
25. akpaevj 202 19.06.21 23:53 Сейчас в теме
(22) StorageType parameter is not specified - не задан тип хранилища
23. bavkyz 3 18.06.21 21:11 Сейчас в теме
и как пользоваться маской , если мне нужно будет все базы
26. akpaevj 202 19.06.21 23:54 Сейчас в теме
(23) маска - это регулярное выражение. Соответственно для всех баз - это просто звёздочка (*)
45. user1412015 16.08.23 08:09 Сейчас в теме
(26) Добрый день.
При установке маски "*" получаю ошибку. Может кто сталкивался?
Unhandled exception. System.Text.RegularExpressions.RegexParseException: Invalid pattern '*' at offset 1. Quantifier {x,y} following nothing.


"Manager": {
"ClstFolders": [
{
"Folder": "\\\\CHL_sql\\c$\\Program Files\\1cv8\\srvinfo\\reg_1641",
"Templates": [
{
"Mask": "*",
24. bavkyz 3 19.06.21 15:18 Сейчас в теме
Разобрался , этот блок тоже надо оказывается
"Exporter": {
"StorageType": 1,
"Portion": 10000,
"TimeZone": "Asia/Novosibirsk",
"WritingMaxDegreeOfParallelism": 1,
"CollectedFactor": 3,
"ReadingTimeout": 1,
"LoadArchive": false
},
27. user1241061 23.03.22 09:10 Сейчас в теме
Здравствуйте Евгений. Хотим Попробовать Вашу разработку. еще не попробовали, но уже нравится.
Хотим провести тест на тестовом стенде в яндекс облаке.
коннект через мир, но вот беда, не могу настроить соединение :(
https://cloud.yandex.ru/docs/managed-clickhouse/operations/connect

Где то какие то параметры нужно передать, или создать конфигурационный файл?
28. bavkyz 3 05.04.22 05:11 Сейчас в теме
(27)
провести тест на тестовом стенде в яндекс облаке


Пользуюсь данной разработкой , что нужно:
1. Установить кликхаус(далее КХ) (у меня в докере, в моей лан сети)
2. на сервер, где работает 1с сервер установить EventLogExporter как службу
3. настройки EventLogExporter у меня во вл. файле.


P.S. в принципе у меня все работало, периодически появлялась какая то ошибка, помогал перезапуск службы EventLogExporter, но последнюю неделю марта 22г все сломалось (перестали загружаться данные в КХ). Думал все начать сначала, удалил базу КХ и загрузка вроде пошла, но появилась неизвестная ошибка ... ЖР разделен по дням, КХ не может прочитать какую то строку из ЖР, удаляю данный день - загрузка идет дальше, но ошибка повторяется. Написал автору, жду ответа....
Прикрепленные файлы:
appsettings.json
29. st0m 24.05.22 20:44 Сейчас в теме
Доброго времени суток! Очень интересная разработка, запускаем на своих базах, вопрос возник только такой - как запустить службу на кластер, что бы данные она писала с каждой папки логов в свою базу КХ? У меня все валится в одну базу КХ. Конфигурационный файл могу приложить. Заранее спасибо!
32. akpaevj 202 04.07.22 22:02 Сейчас в теме
(29) Здравствуйте. Необходимо задать маску имени базы в КХ (параметр Template)
30. VKislitsin 966 21.06.22 19:22 Сейчас в теме
Евгений, подскажите, пожалуйста, проект живой? Пул-реквесты принимаете? Спрашиваю, т.к. на странице проекта неделю висит PR с доработками, без каких-либо комментариев. У меня тоже есть некоторые доработки, в том числе по некоторым Issues.
31. akpaevj 202 04.07.22 21:58 Сейчас в теме
(30) Проект очень даже живой. На текущий момент не могу выделить время на него никак, PR на этой неделе постараюсь принять. С февраля выдался очень насыщенный период, продохнуть некогда
VKislitsin; +1 Ответить
33. Anykey_d 7 03.10.22 18:12 Сейчас в теме
Евгений, добрый день ! В первую очередь огромное спасибо за ваши труды. Проект очень крутой !!!
Подскажите как настроить сетевые пути ? В моем случае КХ запущен на отдельной машине в сети. Никак не получается в конфиг файле указать сетевой путь до папок серверов 1с. Заранее спасибо !
34. Anykey_d 7 04.10.22 17:36 Сейчас в теме
(33)
Все настроил. Вопрос снят
35. Anykey_d 7 04.10.22 17:37 Сейчас в теме
Евгений подскажите пожалуйста как победить ошибку :

Failed to write data to 1C_XXX

Exception:
ClickHouse.Client.ClickHouseServerException (0x000000FC): Code: 252. DB::Exception: Too many parts (300). Merges are processing significantly slower than inserts. (TOO_MANY_PARTS) (version 22.1.3.7 (official build))

at ClickHouse.Client.ADO.ClickHouseConnection.HandleError(HttpResponseMessage response, String query)
at ClickHouse.Client.ADO.ClickHouseConnection.PostStreamAsync(String sql, Stream data, Boolean isCompressed, CancellationToken token)
at ClickHouse.Client.Copy.ClickHouseBulkCopy.PushBatch(ICollection`1 rows, ClickHouseType[] columnTypes, String[] columnNames, CancellationToken token)
at ClickHouse.Client.Copy.ClickHouseBulkCopy.WriteToServerAsync(IEnumerable`1 rows, IReadOnlyCollection`1 columns, CancellationToken token)
at OneSTools.EventLog.Exporter.Core.ClickHouse.ClickHouseStorage.WriteEventLogDataAsync(List`1 entities, CancellationToken cancellationToken)
36. alexey_kurdyukov 157 21.10.22 08:42 Сейчас в теме
Что-то новую базу под каждую ИБ не создает, требует, чтобы имя базы было прописано всё валит в неё.
Как заставить работать как в документации?

У кого проблема как у меня - нужно совсем удалить параметр Database
37. alexey_kurdyukov 157 26.10.22 12:52 Сейчас в теме
Я так понимаю, с нескольких серверов кластера оно журнал не соберет, потому что имена файлов будут одинаковые? Даже если указать маску ИБ, не указывать имя БД, то он будет писать с разных серверов в одну БД, но не сможет хранить текущую позицию, потому что она будет одна, а папок несколько?
38. alexey_kurdyukov 157 26.10.22 13:50 Сейчас в теме
(37) Кажется я понял, нужно создать Merge-таблицу, будет ли это правильно?:
CRE ATE   TABLE IF NOT EXISTS all_el
                (
                    FileName LowCardinality(String),
                    EndPosition Int64 Codec(DoubleDelta, LZ4),
                    LgfEndPosition Int64 Codec(DoubleDelta, LZ4),
                    Id Int64 Codec(DoubleDelta, LZ4),
                    DateTime DateTime('UTC') Codec(Delta, LZ4),
                    TransactionStatus LowCardinality(String),
                    TransactionDate DateTime('UTC') Codec(Delta, LZ4),
                    TransactionNumber Int64 Codec(DoubleDelta, LZ4),
                    UserUuid LowCardinality(String),
                    User LowCardinality(String),
                    Computer LowCardinality(String),
                    Application LowCardinality(String),
                    Connection Int64 Codec(DoubleDelta, LZ4),
                    Event LowCardinality(String),
                    Severity LowCardinality(String),
                    Comment String Codec(ZSTD),
                    MetadataUuid String Codec(ZSTD),
                    Metadata LowCardinality(String),
                    Data String Codec(ZSTD),
                    DataPresentation String Codec(ZSTD),
                    Server LowCardinality(String),
                    MainPort Int32 Codec(DoubleDelta, LZ4),
                    AddPort Int32 Codec(DoubleDelta, LZ4),
                    Session Int64 Codec(DoubleDelta, LZ4)
                )
                engine = Merge(REGEXP('.*_el'), 'EventLogItems');
Показать
39. user813055 03.02.23 17:46 Сейчас в теме
Добрый день.
Помогите пожалуйста.
Не могу запустить коннектор

в логах:

: not found17:44:51 /opt/EventLogExporter/entrypoint.sh: 2: /opt/EventLogExporter/entrypoint.sh:
2023-02-03 17:44:51 Unhandled exception. System.Exception: Event log folder is not specified
2023-02-03 17:44:51 at OneSTools.EventLog.Exporter.Core.EventLogExporter.CheckSettings()
.....
40. пользователь 20.06.23 15:26
Сообщение было скрыто модератором.
...
41. пользователь 20.06.23 15:27
Сообщение было скрыто модератором.
...
42. medstoun 20.06.23 15:30 Сейчас в теме
У меня вот такой вопрос, папка с логами 1С находится на виртуальной машине на убунту, а кликхаус на другой виртуальной машине, которая тоже на убунту. Вопрос: как мне сделать так что бы логи из одной виртуальной машины экспортировались на другую виртуальную машину(на ту на которой находится кликхаус)?
43. medstoun 20.06.23 15:32 Сейчас в теме
У меня вот такой вопрос, папка с логами 1С находится на виртуальной машине на убунту, а кликхаус на другой виртуальной машине, которая тоже на убунту. Вопрос: как мне сделать так что бы логи из одной виртуальной машины экспортировались на другую виртуальную машину(на ту на которой находится кликхаус)?
44. 1cnik2 28.06.23 11:20 Сейчас в теме
Коллеги, всем у кого EventLogExporter зависает с "Failed to write data to ..." предлагаю следующий скрипт на ps.
Ставьте его в автозапуск каждые 5-10 минут(внутри скрипта тоже поменяйте, если не 10 минут) и будет счастье.
придется только не использовать менеджер логэкспортеров, и запускать отдельную службу на каждую из баз.

$filePath = 'E:\...\OneSTools.Eventlog\ut\log.txt' #путь к логу EventLogExporter
$serviceName = 'EventLogExporter_ut' #имя службы винды
$webhookUrl = 'https://discord.com/api/webhooks/.....................'

function Send-DiscordMessage {
    param(
        [Parameter(Mandatory=$true)] [string] $Text,
        [Parameter(Mandatory=$true)] [string] $WebhookUrl
    )

    $body = ConvertTo-Json @{
        content = $Text
    }

    Invoke-RestMethod -Uri $WebhookUrl -Method Post -Body $body -ContentType 'application/json;charset=utf-8'
}

$lastWriteTime = (Get-Item $filePath).LastWriteTime

if ($lastWriteTime -lt (Get-Date).AddMinutes(-10)) {
    $message = "File `$filePath` has no changes for 10 minutes."
    Send-DiscordMessage -Text $message -WebhookUrl $webhookUrl

    Restart-Service -Name $serviceName
}
Write-Output "$(Get-Date) скрипт отработал" >> "$($MyInvocation.MyCommand.Name).log"
Показать
46. Prooa 39 06.09.23 03:22 Сейчас в теме
Добрый день
зависает и не помогает рестарт службы, в логах пишет
Information | OneSTools.EventLog.Exporter.Core.EventLogExporter[0]
File 20230905000000.lgp will be read from 224313356 position, LGF file will be read from 323960 position

после ребута снова эта же строка и стоит
47. Prooa 39 06.09.23 03:55 Сейчас в теме
после ребута агента начинает работать, но это не вариант
Оставьте свое сообщение