ClickHouse и Журналы регистрации 1С: анализ в реальном времени – опыт Magnit Tech

28.02.26

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

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

Меня зовут Юлия Даскаль, я работаю ведущим разработчиком в Центре экспертизы 1С компании Magnit Tech.

Хочу рассказать о том, как нам удалось победить нашу боль и наладить работу с огромнейшими журналами регистрации.

 

 

Немного о ситуации в «Магните»:

  • У нас более 50 баз 1С, некоторые из которых имеют очень большие журналы регистрации.

  • Суммарно в месяц накапливается около 2 ТБ логов. Это просто огромнейший объем информации, в котором часто бывает сложно найти то, что нужно.

  • При таких объемах поиск одного события в стандартном журнале регистрации 1С может занимать больше часа. А нам такие скорости не подходят – для нас важно получать информацию максимально оперативно.

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

Поэтому мы стали искать решение: анализировали рынок, изучали опыт других компаний, сравнивали инструменты – и в итоге остановились на ClickHouse.

 

 

ClickHouse – это колоночная СУБД, которая изначально была разработана в Яндексе для Яндекс.Метрики, а позже выделилась в отдельный проект, став доступной для всех.

  • ClickHouse распространяется с открытым исходным кодом под лицензией Apache License 2.0, что подразумевает бесплатное коммерческое использование.

  • Одна из ключевых особенностей ClickHouse – это колоночное хранение данных. В отличие от классических СУБД, где данные хранятся построчно, ClickHouse хранит информацию в колонках. Это существенно ускоряет выполнение запросов, поскольку система считывает только необходимые столбцы и отбрасывает ненужные данные.

  • ClickHouse поддерживает различные кодеки сжатия данных.

  • Индексы в нем построены так, что позволяют при выполнении запросов исключать из обработки ненужные блоки данных.

  • Еще одно преимущество – поддержка распределенных запросов «из коробки». Мы можем развернуть ClickHouse в кластере и выполнять запросы к данным различных серверов параллельно.

  • Кроме того, ClickHouse позволяет работать с данными практически в реальном времени – они доступны сразу после загрузки, не нужно ничего ждать и дополнительно обрабатывать.

  • И у ClickHouse более 30 видов движков хранения с различными особенностями записи, хранения и обработки данных. Поэтому критически важно правильно выбрать движок на этапе проектирования, поскольку это напрямую влияет на производительность при выполнении запросов.

  • Сфера применения у ClickHouse довольно широкая: это и хранение логов (как в нашем случае), и бизнес-аналитика, и мониторинг, и работа с Big Data.

 

 

У многих может возникнуть вопрос: почему ClickHouse, а не ElasticSearch? Мы тоже задавались этим вопросом, и окончательно определились после сравнения производительности этих двух систем, которое приводится в статье на Инфостарте – большое спасибо автору за подробный анализ.

Если коротко:

  • ElasticSearch отлично подходит для полнотекстового поиска.

  • Но в задачах агрегации ClickHouse значительно превосходит по скорости.

  • Кроме того, ClickHouse эффективнее сжимает данные, что обеспечивает более компактное хранение.

  • А еще ElasticSearch более ресурсоемкий, потому что вынужден дополнительно расходовать оперативную память для поддержания индекса полнотекстового поиска в актуальном состоянии.

 

 

ClickHouse идеально подходит для журнала регистрации 1С:

  • Колоночная структура ClickHouse не приспособлена к частым изменениям данных – стандартные операции UPDATE приводят к пересборке затронутых данных, а это ресурсозатратно и неэффективно. Но в случае с логами 1С нам и не нужно ничего менять – мы производим только сбор и хранение событий.

  • У журнала регистрации фиксированная структура полей, которую легко переложить на табличное хранение.

  • За счет того, что в журнале регистрации большинство полей содержат неуникальные и часто повторяющиеся данные, мы можем их эффективно сжимать в ClickHouse.

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

 

 

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

  • Использование REST-интерфейса ClickHouse. Это базовый способ взаимодействия, но у него есть существенный недостаток – в этом случае нагрузка ложится непосредственно на сервер приложений 1С, а мы такие риски себе позволить не можем, так как логи у нас достаточно большие.

  • Подключение через ADODB – этот вариант, к сожалению, тоже не подходит, поскольку не поддерживает кроссплатформенность.

  • Различные готовые решения из репозиториев на GitHub – с ними тоже, к сожалению, часто случаются проблемы:

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

    • Часто нет документации, или она недостаточно информативная.

    • Нет возможности настраивать и распараллеливать нагрузку на разбор.

    • И, к сожалению, часто бывает низкая производительность.

  • Специализированное ПО, которое забирает логи из одного источника, преобразует в нужный формат и отправляет в целевую систему – к таким инструментам относятся, в частности, Vector и Fluent Bit.

 

 

В итоге мы выбрали Vector, потому что у него есть ряд серьезных преимуществ:

  • Поддержка сложных архитектурных схем – возможность подключать различные очереди и дополнительные инстансы, переносить нагрузку с сервера приложений 1С на отдельный сервер.

  • Широкие возможности по разбору и трансформации логов – для Vector можно написать собственные правила для парсинга и преобразования полей в нужный формат, управлять логикой обработки и структурой итоговых данных.

  • Многопоточность – Vector способен отправлять данные в разные системы одновременно. Например, мы одним и тем же процессом Vector на одном сервере отправляем данные журнала регистрации в ClickHouse, а данные технологического журнала – в OpenSearch.

  • По сравнению с ibcmd (утилитой администрирования автономного сервера) Vector работает быстрее, и итоговый файл логов получается значительно меньше по весу – например, исходный файл логов весом 600 МБ после трансформирования через ibcmd начинает весить 4 ГБ. Это связано с тем, что ibcmd заменяет в итоговом файле логов все идентификаторы на представления – за счет этого файл пухнет и становится очень большим. Подробнее об этих особенностях и сравнении ibcmd с Vector можно прочитать в статье на Инфостарте.

  • Нет ощутимой нагрузки. Например, у нас Vector развернут на сервере приложений 1С и несмотря на огромные объемы разбираемых логов – до 6000 записей в секунду (в среднем около 1500) – заметного влияния на производительность не наблюдается.

  • Быстрая обработка и отправка данных. Среднее время обработки логов – от появления события в журнале регистрации до его попадания в ClickHouse – максимум 3 минуты, а часто и меньше.

Подробнее о нашем опыте работы с Vector рассказал Александр Леонов.

 

 

Сервер для ClickHouse у нас имеет следующие характеристики:

  • 4 ядра CPU.

  • 16 ГБ оперативной памяти.

  • Диск объемом 1 ТБ.

Справа показана структура таблиц журнала регистрации по одной из баз. В ClickHouse у нас хранятся данные журнала за год, всего они занимают 132 ГБ, из них больше всего – в таблице lgp. При этом сама исходная база данных, из которой собирается этот журнал регистрации, занимает около 80 ТБ.

 

 

Расскажу подробнее про структуру таблиц.

  • В таблице error хранятся ошибки парсинга файла логов – например, если при парсинге Vector не смог корректно обработать и загрузить запись журнала в основную таблицу, информация об ошибке попадает сюда.

  • В таблице lgf хранятся идентификаторы ссылок, используемые в основной таблице логов, и их текстовые представления. Благодаря тому, что в основной таблице логов используются именно идентификаторы, удалось сократить ее объем примерно на 30%. При этом за получение журнала регистрации в человекочитаемом виде приходится «платить» – соединяться с этой таблицей и получать все представления.

 

 

  • Таблица lgp – основная, в ней хранятся абсолютно все события журнала регистрации, поэтому она и занимает больше всего места в базе. На слайде показаны топ-5 наиболее частых событий – видно, что на первом месте событие _$Data$_Update, апдейты данных.

 

 

Кроме этого, у нас есть две таблицы материализированных представлений (MatView), в которые сохраняются результаты запросов для ускорения доступа к данным.

  • mv_lgp_minute – содержит уже сагрегированные данные в разрезе минут. Далее я расскажу подробнее, для чего мы так сделали.

  • mv_session – хранит информацию о пользовательских сессиях с датой начала и датой окончания.

 

 

Теперь о том, какими способами можно получить обработанные данные из ClickHouse обратно в 1С.

  • Через внешние источники данных – но это требует настройки сервера приложения 1С.

  • Через COM или ADODB – у нас в компании этот способ запрещен, в частности, из-за отсутствия кроссплатформенности и из-за того, что различные базы используют различные версии платформы, и это тоже накладывает свои сложности.

  • Напрямую через REST API ClickHouse – это наиболее удобный и гибкий способ, и именно его мы и использовали.

Для получения через REST API обработанных данных из ClickHouse мы написали обработку, которая может использоваться в любой конфигурации. В ней можно формировать отчеты, настраивая для них различные отборы; сохранять и выбирать варианты; заменять GUID на человекочитаемые представления.

Основная цель этой обработки – это работа с журналом регистрации в 1С таким же образом, как и со стандартным журналом регистрации.

 

 

Но если нам нужно получить из ClickHouse более сложные агрегации, мы обращаемся к другим инструментам:

  • Например, у ClickHouse есть веб-интерфейс в браузере – там можно выполнять любые SQL-запросы.

  • Можно подключить базу ClickHouse к DBeaver – он также позволяет просмотреть структуру таблиц, узнать их размер и выполнить любые сложные запросы с агрегациями.

  • Можно читать данные из 1С через REST API – для этого мы, в частности, используем нашу обработку.

  • Или подключиться к ClickHouse напрямую из Grafana, чтобы тоже выполнять там запросы или анализировать данные на дашбордах.

 

 

Теперь о том, как мы используем наш журнал регистрации в ClickHouse.

  • Мы разбираем инциденты ИБ – смотрим, кто изменил тот или иной элемент справочника, зашел под админскими правами или что-то удалил, в общем, сделал что-то не так. Раньше это было очень сложно: приходилось восстанавливать журналы регистрации из архива, подключать их к 1С, настраивать отборы, долго ждать (около часа). А если сразу разобраться не получалось или требовалось проверить еще какие-то гипотезы, приходилось делать все это заново. Сейчас сотрудники сопровождения используют готовый запрос к ClickHouse, меняют параметры на нужные и за 30 секунд получают результат. Они очень рады.

  • Статистика работы пользователей – мы можем анализировать производительность сотрудников: кто сколько создал документов, сколько создал элементов справочников.

  • Дашборды в Grafana – дальше я покажу их и расскажу, как мы их используем.

  • И анализ демографии данных – при запуске новых интеграционных потоков часто требуется оценить: какие данные чаще всего изменяются, как часто, в каком объеме и сколько среди них уникальных значений. На слайде как раз показано, что когда мы собирали демографию данных из журнала регистрации стандартными средствами – без детализации до объектов, без сбора уникальных записей – это занимало около часа. Сейчас же демография данных у нас считается по уникальным записям и занимает примерно 15 секунд.

 

 

Вот так выглядят наши дашборды в Grafana.

Удобно, что Grafana интегрируется с ClickHouse напрямую – ей не нужны никакие прослойки. Заходим в интерфейс, пишем запрос, получаем данные и можем их визуализировать.

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

Однако при построении некоторых дашбордов мы столкнулись с проблемой производительности: часть визуализаций не успевала выполняться и завершалась по таймауту.

Для решения этой проблемы мы добавили материализованное представление mv_lgp_minute, которое содержит уже сагрегированные данные в разрезе минут. Теперь запросы выполняются не к «сырым» данным, а к предварительно агрегированным, что позволяет ускорить формирование визуализаций и стабилизировать работу дашбордов.

 

 

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

Дело в том, что ClickHouse не поддерживает триггеры в классическом понимании. Однако есть альтернативные решения:

  • Использовать материализованное представление и через него передавать данные в классическую СУБД – PostgreSQL, MySQL, MS SQL – а там уже можно использовать триггеры.

  • Настроить отправку из материализованного представления в Kafka и подключить внешний скрипт для обработки очереди. На GitHub вы можете скачать пример реализации такого триггера: при появлении определенных событий через Materialized View данные отправляются в Kafka, после чего внешний скрипт считывает сообщения из очереди и выполняет необходимые действия – например, отправляет информацию в Sentry и уведомляет о событии через Telegram или email.

  • Настроить триггеры на стороне Grafana – задать критические значения показателей и реагировать на их превышение.

Таким образом ClickHouse позволил нам превратить журнал регистрации из проблемы в источник новых возможностей.

 

Вопросы и ответы

 

Что такое демография данных и для чего она используется?

Анализ демографии данных требуется при проектировании новых интеграционных потоков. У нас большие базы, и при запуске интеграции важно понимать реальный объем изменений, чтобы правильно выбрать инструмент.

Например, мы знаем, что за день у нас было 80 000 изменений документов. Но при анализе выясняется, что уникальных объектов – всего 10 000. Это означает, что фактически нужно передавать не 80 000 записей, а 10 000. Соответственно, можно выбрать более экономичный сценарий выгрузки – например, выполнять ее пакетно в конце дня.

Из стандартного журнала регистрации на наших объемах запросов было невозможно получить количество уникальных записей – запрос просто падал. Сейчас такой расчет занимает около 15 секунд вместо часа.

Что такое материализованное представление?

Материализованное представление задает запрос с правилами обработки данных, поступающих в исходную таблицу. При добавлении новых записей ClickHouse автоматически применяет этот запрос и сохраняет результат в отдельной таблице.

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

Вы сказали, что в ClickHouse более 30 движков хранения для таблиц. Какой движок вы в итоге используете?

Для основных таблиц у нас в ClickHouse используется движок MergeTree – он самый распространенный и универсальный, покрывает большую часть задач.

Насколько оправдано вынесение представлений в отдельную таблицу и использование соединений, вместо того чтобы обогащать основную таблицу?

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

Да, для получения человекочитаемого вида приходится выполнять соединения, но экономия объема это оправдывает.

Вы сказали, что в качестве движка, который загружает логи в ClickHouse, выбрали Vector. Чем вас не устроили Fluent Bit или Fluentd?

По сравнению с Fluent Bit Vector требует меньше ресурсов и значительно производительнее. К тому же Vector позволяет реализовывать сложные архитектурные схемы, описывать правила преобразования. В нашем случае это критично, поскольку у нас большие объемы логов.

Мы для выгрузки в ClickHouse используем экспортер от Евгения Акпаева, и у него есть проблема: если в журнале регистрации возникает событие «журнал регистрации поврежден», он перестает его читать и экспортировать. У Vector нет таких проблем? Или у вас журнал никогда не повреждается?

Vector корректно обрабатывает ошибки. Если при разборе возникает проблема, запись попадает в таблицу errors, откуда ее можно дополнительно проанализировать и обработать.

У вас Vector крутится как сервис на каждом сервере приложений 1С? Или где он вообще находится?

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

Вы на каждую базу 1С создаете отдельную базу в ClickHouse?

Да, для каждой базы 1С у нас отдельная база в ClickHouse.

Как вы подключаете новые базы ко всему этому конвейеру?

Мы создаем базы и их таблички в ClickHouse вручную. Никакой автоматизации в этом плане пока нет. Но да, в дальнейшем мы планируем перейти на подход Infrastructure as Code и использовать шаблонные конфигурации с переменными окружения.

Что происходит с исходными файлами журнала регистрации 1С после того, как вы их экспортируете в ClickHouse?

У нас есть отдельные регламенты, которые по прошествии определенного периода времени уже чистят этот журнал. Но в момент, когда событие отправляется в ClickHouse, с данными журнала регистрации ничего не происходит

А чистите как, кодом? Или через команду Сократить для журнала регистрации в конфигураторе?

Нет, просто удаляем файлы.

Но для удаления файлов журнала нужно же останавливать службу в 1С. Останавливаете? Или можно на лету как-то удалить?

Останавливаем. И удаляем, используя пакетный режим конфигуратора с параметром запуска ReduceEventLogSize.

 

*************

Статья написана по итогам доклада (видео), прочитанного на конференции INFOSTART TECH EVENT.

 

Инфостарт Tech Event 2026

Инфостарт A&PM Event 2026

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Журнал регистрации WEB-интеграция Программист 1С 8.3 1С:Библиотека стандартных подсистем Абонемент ($m)

Долго отлаживали интеграции через сообщения, журнал регистрации и чужие прокси. На проде это не взлетело. Собрали простой инструмент внутри платформы — смотришь запрос/ответ, повторяешь, выгружаешь curl.

1 стартмани

07.08.2026    550    2    Viktor_Ermakov    7    

11

Администрирование СУБД Журнал регистрации Системный администратор Программист 1С 8.3 Бесплатно (free)

Журнал регистрации на нагруженной базе перестаёт открываться: файлы растут на гигабайты в день, просмотр виснет, история недоступна. Рассказываю, как мы вынесли журнал трёх продуктивных баз в ClickHouse: 35 млрд событий, поиск всех ошибок за сутки — 0,11 секунды, привычная форма журнала для пользователей и падение числа ошибок в проде в 23 раза за полгода. Архитектура, схема таблицы, грабли интеграции и все цифры с прода.

04.08.2026    906    nedomolkov.ivan    0    

8

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

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

20.11.2024    8551    user1913000    13    

26

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

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

21.10.2024    9483    leemuar    8    

25

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

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

1 стартмани

29.12.2023    5675    63    dima_gsv    6    

15

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

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

1 стартмани

19.11.2023    4741    10    AlexSTAL    0    

8

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

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

1 стартмани

13.11.2023    10145    15    AlexSTAL    0    

48

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

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

3 стартмани

26.09.2023    5961    29    doom2good    16    

16
Для отправки сообщения требуется регистрация/авторизация