Выгрузка журнала регистрации 1С в ClickHouse с помощью Vector

10.11.22

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

Данное решение предназначено для выгрузки журнала регистрации из 1С 8.2 - 8.3 (формат журнала LGF/LGP) в ClickHouse. Одной из отличительных особенностей данного решения является возможность подключения экспортера ЖР к системам мониторинга.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Выгрузка журнала регистрации 1С в ClickHouse с помощью Vector:
.zip 5,91Kb
66
66 Скачать (1 SM) Купить за 1 850 руб.

Приветствую, коллеги.

Этим решением хочу предложить сообществу еще один способ выгрузки журнала 1С в ClickHouse.

Предыстория

Как и у многих, у нас в компании возникали неудобства и сложности при использовании стандартного журнала регистрации 1С. В поиске решения этой проблемы мы обратили внимание на разработку Евгения Аклаева, наверное, это лучшее решение из того, что можно найти в открытом доступе. 

Но при тестировании этого решения мы обнаружили, что иногда экспортер перестает отправлять данные в ClickHouse (помогал только перезапуск), происходит, вероятно, это при потере связи с ClickHouse. Гарантировать бесперебойный доступ к ClickHouse мы не могли, поскольку базы 1С у нас территориально размещены на разных площадках (филиалах), и периодически могут возникать кратковременные перебои со связью по независящим от нас причинам. Из-за этой проблемы и невозможности подключить экспортер к мониторингу нам пришлось продолжить поиск инструмента для выгрузки ЖР 1С.

Так как у нас ранее уже был положительный опыт использования на не 1С проектах сборщика логов Vector, то мы решили попробовать его применить и для 1С.

Немного о Vector

Vector это кроссплатформенный open-source сборщик логов с возможностями ETL.

Его задача заключается в том, чтобы взять из некоторого источника лог, при необходимости как то его трансформировать и отправить в некоторое хранилище. Написан Vector на Rust, что позволяет показывать ему очень хорошие результаты по производительности при скромном потреблении ресурсов.

В Vector можно писать очень гибкие алгоритмы трансформации данных на встроенном языке VRL или на языке LUA в случае, если возможностей VRL не хватает. И, что немаловажно, Vector имеет встроенный экспортер своих метрик в Prometheus, что позволяет настроить его мониторинг например в Grafana, а также у Vector есть возможность проверять статус его работы (healthcheck) путем обычного GET запроса. На момент написания статьи проект Vector имеет около 18K звезд на github.

В общем, инструмент хороший, и нам оставалось только подружить его с логом 1С, что мы собственно и сделали. Алгоритм парсера журнала 1С был написан на основе статьи Антона Ширяева, огромная ему благодарность за проделанную работу, а формат таблицы в ClickHouse мы оставили почти такой же, как в экспортере Евгения Аклаева, что по идее должно дать возможность продолжить пользоваться уже существующими инструментами для просмотра журнала: вариант1, вариант2.

Если в вашей инфраструктуре не развернуты ClickHouse, Grafana и Prometheus, то для тестирования работы предлагаемого решения вы можете развернуть их самостоятельно с помощью Docker, Docker-compose конфиг с этими сервисами есть в архиве, а о том, как настроить ClickHouse в Docker, я писал в этой статье.

Инструкция по установке и настройке Vector для windows

  • Скачиваем и устанавливаем дистрибутив Vector c официального сайта.
    (я использую вариант дистрибутива: Windows MSI)
  • Распаковываем архив, приложенный к статье, например в c:\collector\
  • Редактируем файл collector.cmd, в нем через переменные окружения задаются настройки сборщика:
    onec_logs_path - путь к папке, где хранятся логи 1С

onec_logs_server - адрес сервера ClickHouse

onec_logs_database - база данных CH

onec_logs_user - пользователь CH

onec_logs_password - пароль CH

onec_logs_table_logs - таблица для ЖР 1С

onec_logs_table_errors - таблица для сообщений об ошибках парсинга ЖР

onec_logs_api_ip_port - ip, порт для проверки состояния сборщика

onec_logs_metric_ip_port - ip, порт для экспорта метрик в prometheus 

onec_logs_debug - режим отладки

  • Создаем в ClickHouse базу данных с именем, что и в переменной onec_logs_database и далее в этой базе создаем две таблицы: одну для журнала 1С с именем, заданным в переменной onec_logs_table_logs
    и вторую для хранения ошибок парсинга журнала с именем заданной в переменной onec_logs_table_errors. Скрипты для создания этих таблиц приведены в файлах create-table-ones-logs.sql, create-table-ones-logs-error.sql.
  • Для запуска сборщика запускаем файл collector.cmd.

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

Данное решение предполагает отправку журнала регистрации только из одной базы 1С, поэтому если вам нужно отправлять ЖР из нескольких баз, просто размножьте файл collector.cmd с внесением необходимых изменений для каждой базы 1С.

Настройка мониторинга

Для того, чтобы проверить, что сборщик находится в рабочем состоянии, нужно отправить GET запрос на http://host:port/health.

Номер порта задается в переменной onec_logs_api_ip_port. В случае, если Vector находится в рабочем состоянии, в ответ мы получим сообщение в json формате: {"ok":true} с кодом статуса 200.

 

 

Для того, чтобы информацию о статусе сборщика можно было мониторить с помощью Grafana, можно воспользоваться blackbox exporter. Blackbox exporter - это сервис, предназначенный для того, чтобы собирать информацию о доступности сервисов и отдавать ее в виде Prometheus метрик.

Метрики сборщика можно получить, перейдя по адресу http://host:port/metrics/.

Номер порта задается в переменной onec_logs_metric_ip_port.

 

 

Пример дашборда с метриками Vector можно скачать из маркета Grafana, выглядит она следующим образом:

 

 

А описание всех существующих метрик можно получить, обратившись к официальной документации Vector.

Как это работает

Конфигурация Vector находится в файле vector.toml и разбита на секции, которые из себя представляют блоки конвейера (pipeline) по обработкие потока данных (журнала 1С). Визуально этот конвейер выглядит следующим образом:

 

 

В секции [sources.input_logs] указывается, откуда брать файлы ЖР 1С, а в параметре multiline.condition_pattern указывается регулярное выражение, по которому Vector разделяет строки в лог файле на отдельные записи журнала. Подробнее о возможных настройках можно почитать в документации.

Секция [transforms.remap_logs] ссылается на файл transform.vrl, в котором размещен алгоритмом трансформации, задачей которого является: 

  1. разбить полученную строку лога на отдельные колонки. Разбиение записи журнала на колонки также выполняется с помощью регулярного выражения.
  2. Преобразовать дату записи журнала в формат, который понимает ClickHouse.
  3. В случае, если в процессе парсинга лога произойдет ошибка, записать ее в поле err.

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

Если ошибок не было (поле err пусто), то данные поступают в секцию [transforms.preparation_data], в которой происходит обогащение данных лога из словаря 1Cv8.lgf. Алгоритм работы со словарем находится в файле transform.lua. После обогащения данные отправляются в ClickHouse в таблицу с именем описанной в переменной onec_logs_table_logs.

В заключение хотелось бы сказать, что Vector с легкостью запускается в ОС Linux или Docker контейнере.

Надеюсь получить от сообщества конструктивную обратную связь и помощь в развитии данного решения.

ЖР ClickHouse Vector Prometheus

См. также

Внешние источники данных Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

15.11.2022    19820    18    SQV0    49    

38

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    24500    23    1    

25

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

Если вам нужно автоматически генерировать представления (view) к вашей базе данных 1С (есть две версии - для СУБД MS SQL Server и для PostgreSQL) по структуре метаданных 1С, то вам необходима данная обработка. Наш "Генератор View", другими словами - это коннектор к данным 1С для Power BI - незаменимый помощник для бизнес-аналитиков, работающих с базами 1С из Yandex Datalens/Power BI и т.д. Работает для обычных и управляемых форм под 1С 8.3

230000 руб.

31.07.2020    13544    13    48    

25

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    10529    11    8    

13

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

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

10200 руб.

24.06.2021    20420    57    53    

35

Внешние источники данных Загрузка и выгрузка в Excel Зарплата Бюджетный учет Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате из Парус 10(Торнадо) учреждений через файлы Excel в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ). В принципе, обработка может быть использована для загрузки из файлов Excel, полученных из любых информационных систем.

48000 руб.

16.11.2018    30687    21    31    

22

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Бухгалтерский учет 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Платные (руб)

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (базовая, ПРОФ, КОРП, ФРЕШ).

13200 руб.

19.12.2016    46735    85    105    

65
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user612295_death4321 14.11.22 13:24 Сейчас в теме
Как часто отваливается сервис ? Если сравнивать с разработкой Евгения.
Ростислав; +1 Ответить
3. axilab 91 15.11.22 03:36 Сейчас в теме
(1) Пока объективной статистикой поделится не могу потому что данное решения опубликовал после двух недель использования в продакшен (12 серверов, 24 базы). За это время никаких проблем с сборщиком не возникало.
2. ImHunter 327 14.11.22 14:52 Сейчас в теме
Из статьи не уловил, как сделать периодическую выгрузку журнала. Зашедулить выполнение collector.cmd?
4. axilab 91 15.11.22 03:45 Сейчас в теме
(2) Нет, так лучше не делать. Сборщик запускается разово и следит за изменениями в файлах журнала, и по мере появления новых данных в журнал они отправляются в ClickHouse. Т.е. данные в ClickHouse поступают практически в режиме реального времени (с задержкой примерно 5 секунд).
5. user660878_to101kv 15.11.22 09:08 Сейчас в теме
Так же столкнулся с тем, что иногда экспортер Евгения отваливался с ошибкой Failed to write data to v8logs, на гитхабе была дискусия на эту тему, кто то писал что не хватает оперативной памяти, но если глянуть на граффики в заббиксе, то с ней все норм.

За день был написан сервис, некий clickhouse watcher, который следил за появлением новых данных в бд клика, при отсутствии онных в течении заданного количества минут, сервис пинал сервис EventLogExporter-a ) Справедливости ради, отмечу что это не единственная задача сервиса, среди его функций есть архивация старых ЖР и отправка на репу в долговременное хранение, дополнительная чистка бесполезных данных по условиям и удаление данных выходящих за заданную глубину хранения.

Работает с февраля безотказно, бывает по некоторым системам сервис шлет алерт что данные не появляются какое то количество времени и перезапуски не помогают, как правило ночью, в момент переключения с одного файла жр на другой, либо в моменты обновления, после появления данных сервис ОКает и шлет этот ок в телегу.
6. axilab 91 15.11.22 12:07 Сейчас в теме
(5) Круто.. Как было сказано в одном культовом фильме..:)
Жить захочешь – не так раскорячишься!
Прикрепленные файлы:
8. Dach 380 16.11.22 11:03 Сейчас в теме
(5) а можете поделиться кодом сервиса? Есть репо на github?
11. user660878_to101kv 16.11.22 16:41 Сейчас в теме
(8) + изменил этот кусок на упорядочивание по дате времени, т.к. при перезапуске службы экспортера, иногда экспортер ругался на отсутствие файла предыдущего дня и каждый запуск начинал чтение с начала файла)
Прикрепленные файлы:
7. ImHunter 327 16.11.22 06:30 Сейчас в теме
Можно ли сделать классификацию событий? Например, есть некоторые ошибки, по которым нужно вывести общую статистику их возникновения.
9. axilab 91 16.11.22 14:52 Сейчас в теме
(7) Если я правильно понял вопрос то да.
Понимая условия отбора и группировки нужно написать соответствующий SQL запрос к таблице журнала в ClickHouse.
12. Cyberhawk 135 24.11.22 10:29 Сейчас в теме
Аклаева
Ошибка в фамилии.
13. eawolf83 29.11.22 07:47 Сейчас в теме
Добрый день.
Скачал вашу выгрузку. Поднял CH в докере, настроил vector, запустил.
Вроде запустилось, но в таблицы CH ничего не записалось.
В каталоге с логами появился файл checkpoints.json :

{"version":"1","checkpoints":[{"fingerprint":{"dev_inode":[1215617734,1338976464212682653]},"position":8298,"modified":"2022-11-29T04:38:37.660894900Z"}]}


Куда начать смотреть, чтобы разобраться?
14. axilab 91 29.11.22 08:35 Сейчас в теме
(13)
Приветствую, обычно если есть какие то проблемы то Vector выводит сообщения об ошибках в консоль.
Скиньте сюда скрин консоли Vector, иначе гадать о причинах можно бесконечно долго.
16. batsy66 61 20.02.23 17:20 Сейчас в теме
(13)Аналогичная проблема. Так и не получается запустить трансформацию логов

2023-02-20 16:47:13 2023-02-20T13:47:13.320886Z INFO vector::app: Internal log rate limit configured. internal_log_rate_secs=10
2023-02-20 16:47:13 2023-02-20T13:47:13.321176Z INFO vector::app: Log level is enabled. level="vector=info,codec=info,vrl=info,file_source=info,tower_limit=trace,rdkafka=info,buffers=info,lapin=info,kube=info"
2023-02-20 16:47:13 2023-02-20T13:47:13.329720Z INFO vector::app: Loading configs. paths=["/etc/vector/vector.toml"]
2023-02-20 16:47:13 2023-02-20T13:47:13.550993Z INFO vector::topology::running: Running healthchecks.
2023-02-20 16:47:13 2023-02-20T13:47:13.551625Z INFO vector::topology::builder: Healthcheck passed.
2023-02-20 16:47:13 2023-02-20T13:47:13.551844Z WARN http: vector::internal_events::http_client: HTTP error. error=error trying to connect: tcp connect error: Connection refused (os error 111) error_type="request_failed" stage="processing" internal_log_rate_limit=true
2023-02-20 16:47:13 2023-02-20T13:47:13.551914Z ERROR vector::topology::builder: msg="Healthcheck failed." error=Failed to make HTTP(S) request: error trying to connect: tcp connect error: Connection refused (os error 111) component_kind="sink" component_type="clickhouse" component_id=emit_log_sucsess component_name=emit_log_sucsess
2023-02-20 16:47:13 2023-02-20T13:47:13.552251Z INFO source{component_kind="source" component_id=input_logs component_type=file component_name=input_logs}: vector::sources::file: Starting file server. include=["/etc/tmp/logs\\\\*.lgp"] exclude=[]
2023-02-20 16:47:13 2023-02-20T13:47:13.553489Z INFO vector: Vector has started. debug="false" version="0.27.0" arch="x86_64" revision="5623d1e 2023-01-18"
2023-02-20 16:47:13 2023-02-20T13:47:13.553546Z INFO vector::sinks::prometheus::exporter: Building HTTP server. address=127.0.0.1:9598
2023-02-20 16:47:13 2023-02-20T13:47:13.560225Z INFO source{component_kind="source" component_id=input_logs component_type=file component_name=input_logs}:file_server: file_source::checkpointer: Loaded checkpoint data.
2023-02-20 16:47:13 2023-02-20T13:47:13.587920Z INFO vector::internal_events::api: API server running. address=127.0.0.1:8686 playground=http://127.0.0.1:8686/playground


Vector и CH запустил в контейнерах
15. eawolf83 29.11.22 12:06 Сейчас в теме
(14)
Вроде заработало, записи в CH появились с какого-то раза, сам не понял что сделал.
17. user1877236 12.04.23 10:55 Сейчас в теме
а как делать выгрузку для двух баз на одном сервере приложений? настроил два файла collector.cmd на две базы запускаю их, один работает а второй выдает ошибку:

2023-04-12T07:27:13.692975Z ERROR source{component_kind="source" component_id=input_logs component_type=file component_name=input_logs}: vector_common::finalizer: FinalizerSet task ended prematurely. error=channel closed
21. Teplotrassamen 05.06.24 17:03 Сейчас в теме
(17) Столкнулся вроде с тем же (второй и последующие копии файла *.cmd не запускали сборщик). Заработало после изменения стандартных портов (api и metric) на отличные. В каждой копии файла разные порты должны быть. Может кому поможет.
18. medstoun 20.06.23 15:41 Сейчас в теме
У меня вот такой вопрос, папка с логами 1С находится на виртуальной машине на убунту, а кликхаус на другой виртуальной машине, которая тоже на убунту. Вопрос: как мне сделать так что бы логи из одной виртуальной машины экспортировались на другую виртуальную машину(на ту на которой находится кликхаус)?
19. r3code 26.04.24 07:34 Сейчас в теме
(18) нет проблем. Сделайте кликхаус на другой машине доступным по сети, настройте аутентификацию. На первой машине с логами и vector настройте sink с адресом clickhouse и все заработает.
Вам главное настроить сеть между ВМ, чтобы вектор увидел кликхаус
20. agnev 64 27.04.24 11:58 Сейчас в теме
Прекрасная статья, но неужели github репо не появилось для этой разработки? все же события новые хоть редко появлются, но возможны. Так что конфиги править совместно и т.п. разумно.
22. Teplotrassamen 07.06.24 09:04 Сейчас в теме
К сожалению способ не стабильный или я не смог его правильно приготовить.
Способ Евгения у меня требовал регулярных перезапусков и при внутренней ошибке в ЖР (1с продолжает с ЖР работать без проблем) не стал дальше разбирать ЖР.
Этот способ, тоже не смог работать с таким журналом, в добавок положив клик так, что он перестал работать) Но повторюсь, возможно нужно как-то дорабатывать этот способ чтобы работало или мне просто не повезло.
23. dagondima88 02.08.24 11:16 Сейчас в теме
Коллеги! Добрый день! Отличная реализация! Есть только вот вопрос касательно настройки на Linux, есть ли какая то инструкция
24. 1cnik2 13 16.08.24 07:31 Сейчас в теме
Коллеги, всем привет! Благодарю автора за статью!
Мы сейчас пользуемся для сбора данных ЖР вот этим https://github.com/akpaevj/OneSTools.EventLog/tree/master/OneSTools.EventLog инструментом(благодарю автора!), и как уже написали коллеги выше, пришлось написать примочку, которая "подпинывает" его, если долго нет изменений в логах. В целом все устраивает, но хотелось бы избавиться от примочки и таки не иметь задержек поступления логов. У EventLog они могут достигать 5 минут(в нашем случае).
Собственно, вопрос - а структуры таблиц, в которые пишут инструмент упомянутый в статье и EventLog, они совместимые?
Оставьте свое сообщение