Инструменты экспорта журнала регистрации 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 Мониторинг Администрирование

См. также

Журнал регистрации Мониторинг Системный администратор Программист Бизнес-аналитик Руководитель проекта Платформа 1С v8.3 Платные (руб)

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

9000 руб.

28.08.2019    33939    22    21    

74

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

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

5000 руб.

28.11.2018    20747    17    6    

42

Журнал регистрации Программист Россия Бесплатно (free)

В материале рассматривается сравнение двух инструментов для работы с журналом регистрации 1С: утилиты ibcmd и платформы Vector. Описаны их функциональные возможности, тестирование производительности и практическое применение для преобразования логов в формат JSON.

20.11.2024    657    user1913000    7    

17

Журнал регистрации Тестирование QA Программист Бесплатно (free)

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

21.10.2024    2803    leemuar    8    

22

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

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

1 стартмани

29.12.2023    2164    31    dima_gsv    3    

13

Журнал регистрации Мониторинг Системный администратор Программист Абонемент ($m)

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

1 стартмани

19.11.2023    1442    5    AlexSTAL    0    

8

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

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

1 стартмани

13.11.2023    4733    9    AlexSTAL    0    

47

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

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

3 стартмани

26.09.2023    2829    19    doom2good    16    

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

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

Сколько эти 1 ГБ будут весить в КХ или Эластике ? Скорость ведь не бесплатная..
3. akpaevj 207 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 207 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 207 17.11.20 18:33 Сейчас в теме
(6) Вы все правильно прочитали, ошибки нет. Так как СУБД колоночная, то на размер напрямую влияет уникальность значений в столбце
16. user612295_death4321 05.12.20 08:14 Сейчас в теме
(7) Протестировал у себя, у меня результаты конечно не такие радужные, 600 МБ логов превратились в 37 МБ, но все ровно круто)
17. akpaevj 207 05.12.20 11:30 Сейчас в теме
(16) Я протестирую еще на нескольких наборах данных и обновлю данные тестов. Похоже моя тестовая выборка была не очень репрезентативной. С 600 до 37 - просто отличный результат.
8. DonAlPatino 178 18.11.20 20:00 Сейчас в теме
(5)
1. Старые файлы ЖР удаляются вашим приложением или что-то отдельное работает?
2. Я правильно понимаю, что файл тоже читает само приложение - никаких logtash/filebeat? Оно же запоминает точку остановки в случае перезапуска?
А сборку нескольких записей в журнал в одну строку тоже само приложение делает?
Проблема с тем что начало журналирования операции попало во "вчерашний" файл, а конец в "сегодняшний" как-то решается? Или отсутствие записей об окончании в случае перезапуска сервера?
9. akpaevj 207 18.11.20 21:11 Сейчас в теме
(8) В статье уже несколько устаревшая информация, обновлять ее здесь не планирую. Очень много нововведений, в том числе работа с кластером elastic'а. Все обновления документации и инструментов доступно на странице репозитория в github.
1. В статье описан только инструмент экспорта. Дополнительно я в данный момент разрабатываю и тестирую у себя службу, которая автоматически добавляет новые базы к экспорту логов и удаляет устаревшие файлы.
2. Кроме самого elastic'а больше ничего не нужно. Приложение запоминает местоположение и продолжает экспорт с последней прочитанной позиции. Вторую часть вопроса (о начале и конце "операции") не совсем понял, поясните
10. DonAlPatino 178 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 178 20.11.20 15:28 Сейчас в теме
(10)Перечитал комменты к моей старой статье. Я как раз comol'а просил поделиться как правильно сделать на КХ. Прошло время - вот оно :-)
13. akpaevj 207 20.11.20 17:53 Сейчас в теме
(11) А, я понял о каком объединении Вы говорите. Вероятно, речь идет об агрегации начала/конца/отката транзакции. Этим служба не занимается. Для анализа длительности транзакций на мой взгляд проще пользоваться clickhouse с его mergetree и постобработкой, ну и ТЖ, естественно.
14. DonAlPatino 178 23.11.20 12:33 Сейчас в теме
(13)Ну тогда это пока не то :-( Я же все это включая буферную базу замутил, чтобы отчет в ELKе "как в 1С" получить. Ибо те же одинэсники встали в позу. И делали мы ее практически без участия 1с программеров.
Вот когда будет рассказ про "mergetree и постобработку" с выводом результатов как в 1С - тогда можно будет и мою систему закопать наконец-то.
15. akpaevj 207 23.11.20 15:18 Сейчас в теме
(14) С задачей агрегации данных и получения длительности транзакции все просто - ее не стоит выполнять с помощью журнала регистрации, that's all)) Только с помощью ТЖ, либо с помощью подсистемы "Оценка производительности" из БСП.
12. akpaevj 207 20.11.20 16:44 Сейчас в теме
(10) Это фрагмент кода заполнения экземпляра класса EventLogItem (записи события журнала), где устанавливаются GUID и Имя пользователя:) ничего более. В журнале нет нескольких записей с одним id. Каждое событие представлено отдельной записью. Видел Вашу статью, знатно вы там наворотили:))
2. akpaevj 207 12.11.20 20:29 Сейчас в теме
(1) Без суда и следствия могу сказать что клик выигрывает по всем показателям с очень большим отрывом. В ближайшее время выложу сравнение
18. Evil Beaver 8244 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 207 12.04.21 15:30 Сейчас в теме
(20) Прошу прощения, по какой-то причине пропустил Ваши сообщения. Вы, вероятно, скачали исходники, поэтому и не нашли там никаких exe файлов) В Releases репозитория лежат скомпилированные приложения. Менеджер - это обертка над службами экспорта, по этому поводу в документации все описано
22. bavkyz 4 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 207 19.06.21 23:53 Сейчас в теме
(22) StorageType parameter is not specified - не задан тип хранилища
23. bavkyz 4 18.06.21 21:11 Сейчас в теме
и как пользоваться маской , если мне нужно будет все базы
26. akpaevj 207 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 4 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 4 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 207 04.07.22 22:02 Сейчас в теме
(29) Здравствуйте. Необходимо задать маску имени базы в КХ (параметр Template)
30. VKislitsin 1013 21.06.22 19:22 Сейчас в теме
Евгений, подскажите, пожалуйста, проект живой? Пул-реквесты принимаете? Спрашиваю, т.к. на странице проекта неделю висит PR с доработками, без каких-либо комментариев. У меня тоже есть некоторые доработки, в том числе по некоторым Issues.
31. akpaevj 207 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 165 21.10.22 08:42 Сейчас в теме
Что-то новую базу под каждую ИБ не создает, требует, чтобы имя базы было прописано всё валит в неё.
Как заставить работать как в документации?

У кого проблема как у меня - нужно совсем удалить параметр Database
37. alexey_kurdyukov 165 26.10.22 12:52 Сейчас в теме
Я так понимаю, с нескольких серверов кластера оно журнал не соберет, потому что имена файлов будут одинаковые? Даже если указать маску ИБ, не указывать имя БД, то он будет писать с разных серверов в одну БД, но не сможет хранить текущую позицию, потому что она будет одна, а папок несколько?
38. alexey_kurdyukov 165 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 13 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 Сейчас в теме
после ребута агента начинает работать, но это не вариант
48. user2080265 22.05.24 16:15 Сейчас в теме
Добрый день. Подскажите с чем связано, что записи в кликхаус обновляются только раз в сутки.
Есть записи только за вчерашний день.
Где-то есть возможность задать настройку, в описании не нашёл.
49. gorsh157 51 28.05.24 18:27 Сейчас в теме
Добрый день. Подскажите пожалуйста, с чем может быть связано, не выгружаются Метаданные по событию Доступ.Отказ в доступе?
Оставьте свое сообщение