Сравнение парсера журнала регистрации Vector и ibcmd

20.11.24

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

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

Введение

Около года назад мы пришли к выводу, что работа с журналом регистрации в текущем виде, как это предлагает 1С, особенно для наших HighLoad систем, невозможен. Логи за день только по одной ИС занимали около 300 Гб, это делало нереальным поиск истории действий пользователей. Такие действия – мука для администраторов. Они делали отбор, ждали несколько часов, понимали, что отбор был неверен и повторяли действие.

После этого мы реализовали выгрузку журнала регистрации в ClickHouse с помощью Vector, это позволило хранить довольно большую глубину данных, так как ClickHouse неплохо сжимает данные (данные в ClickHouse занимают в 8 раз меньше места чем в обычных файлах лога) и вторым преимуществом стало то, что отбор данных стал происходить существенно быстрее. Для примера, отбор по LIKE по нескольким миллиардам строк происходил за 30 сек. Еще одним неочевидным плюсом стала возможность просматривать логи разных ИС в одном месте – это может быть полезно для распределенных ИС. Наконец, мы получили хорошую аналитику по числу ошибок, интенсивности транзакций и контекст фоновых заданий.

Событие

Начиная с 25-й версии платформы 1С у утилиты автономного сервера ibcmd появилась возможность работы с журналом регистрации, а именно команда экспорта журнала в форматы xml и json.

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

Исходя из этого события мы решили сравнить, что лучше - используемое нами решение Vector или же утилита ibcmd.

Возможности ibcmd eventlog

Если вызвать справку по новому режиму работы утилиты ibcmd, мы получим следующее:

 
Справка по команде ibcmd eventlog

Исходя из данной справки мы имеем следующие возможности:

  1. Выгрузка данных в 2 форматах xml и json
  2. Поддержка выгрузки без учета корневых элементов json и xml – json line и xml line
  3. Выгрузка данных за необходимый период
  4. Отслеживание новых записей в ЖР 
  5. Выгрузка данных в файл

Звучит неплохо, но, как всегда, дьявол кроется в деталях.

Возможности Vector

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

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

В плане задач в рамках теста Vector (прочитать файл лога, разобрать и записать в json) позволяет:

  1. Отслеживать изменения файлов и мониторинг их добавления по маске
  2. Обработка нескольких каталогов для отслеживания изменений файлов
  3. Запоминает последние обработанные строки или файлы
  4. Настраиваемый алгоритм разбора файлов логов
  5. Настраиваемые схемы ротации выходного файла
  6. 10 форматов выходных файлов в т.ч. csv и protobuf
  7. Сжатие выходного файла
  8. Настраиваемые фильтры\условия по разобранным данным перед записью в целевой файл.

Функции вне зачета:

  1. Сбор данных (Sources):
    • Vector поддерживает широкий спектр источников для сбора данных, включая файлы syslog, journald, Docker, Kubernetes, HTTP, Apache Kafka и многие другие;
    • Можно интегрировать собственные источники данных, поддерживаются настраиваемые плагины для разнообразных протоколов и источников.
  2. Преобразование данных (Transforms):
    • Приложение поддерживает трансформации для структурирования, нормализации и фильтрации данных на лету. Это позволяет изменять формат данных до их передачи в конечные точки (sinks);
    • Vector позволяет удалять ненужные поля, а также применять фильтрацию по условиям и преобразовывать данные с помощью скриптов на языке Remap (Vector Remap Language, VRL);
    • Возможность агрегации и агрегирование данных для их последующей отправки в определенное место.
  3. Отправка данных (Sinks):
    • Vector поддерживает отправку данных в большое количество систем и сервисов, включая ElasticSearch, Amazon S3, Apache Kafka, Prometheus, ClickHouse, Splunk, Datadog, InfluxDB, AWS CloudWatch и другие;
    • Можно настраивать несколько целевых точек отправки, делая Vector частью сложных ETL процессов.
  4. Высокая производительность:
    • Vector разработан на Rust, что обеспечивает высокую производительность и надежность работы;
    • Он способен обрабатывать миллионы событий в секунду с минимальными задержками, что делает его подходящим для высоконагруженных систем.
  5. Надежность и отказоустойчивость:
    • Встроенные механизмы обеспечения целостности данных, такие как сохранение сообщений в случае сбоев сети, встроенное квотирование и регулирование нагрузки;
    • Vector использует подход "отправить или потерпеть неудачу" (at-most-once или at-least-once), что гарантирует либо доставку данных, либо их полное восстановление.
  6. Конфигурируемость и управление конфигурацией:
    • Vector имеет простой и понятный конфигурационный файл на языке TOML, который позволяет настроить все источники, трансформации и точки отправки;
    • Также поддерживается динамическое обновление конфигурации и горячее применение изменений.
  7. Поддержка микросервисов и контейнеров:
    • Vector легко интегрируется с Docker, Kubernetes и другими контейнерными системами, что делает его гибким для использования в микросервисной архитектуре;
    • Поддерживает автоматическое определение служб и контейнеров, таких как Kubernetes Pods, что упрощает настройку потоков данных в динамических средах.
  8. Низкие требования к ресурсам:
    • Vector разработан так, чтобы минимизировать потребление CPU и памяти, обеспечивая высокую пропускную способность при небольшом потреблении ресурсов;
    • Подходит для использования на маломощных серверах и в облачных средах.
  9. Поддержка облачных решений:
    • Vector может легко интегрироваться с сервисами AWS, GCP, Azure, и поддерживает множество функций, оптимизированных для облачных инфраструктур;
    • Есть возможности для безопасной передачи данных, включая шифрование и интеграцию с системами управления доступом.
  10. Наблюдаемость и мониторинг:
    • Vector генерирует собственные метрики, которые могут быть отправлены в мониторинговые системы (например, Prometheus), чтобы отслеживать его состояние и производительность;
    • Vector имеет встроенную систему логирования и предоставления статистики о передаче и трансформации данных, что упрощает отладку и управление.

Тестирование выгрузки в json

Настройки тестирования

Для тестирования был взят лог одной из ИС за час размером 600 Мб.

Были выполнены следующие команды для трансформации лога с помощью ibcmd:

"C:\Program Files\1cv8\8.3.25.1072\bin\ibcmd.exe" eventlog export -f json --skip-root -o H:\tstExportJurnal1C\ibcmd\export.json H:\tstExportJurnal1C\base

Для Vector был сформирован следующий конфиг:

 
vector.yaml

 

Файл настройки трансформации transform.vrl

 
transform.vrl

Результат ibcmd

Утилита автономного сервера справилась с задачей разбора за 6 минут, при этом создав нагрузку в 10% CPU и 64 Мб RAM.

Стоит отметить, что утилита от 1С не просто распарсила файл лога lgp, а прочитала словарь из файла lgf и заменила все идентификаторы на читаемые представления и идентификаторы. Это конечно хорошо, но как побочный эффект мы получили дублирование данных в получившемся json-файле. Размер файла составил 4,01 ГБ

Пример файла:

 
export.json

Результат Vector

Vector справился с задачей разбора файла за 3 минуты, но использовал аж 42% CPU и 130 Мб RAM.

За счет того, что не пришлось идти в словарь lgf за представлениями идентификаторов, ibcmd дала фору Vector, но выходной json-файл получился меньше по весу – 1,88 Гб

 
export.json

Итоги тестирования

 

Показатель

ibcmd

Vector

Скорость трансформации 600Мб логов

5мин 50сек

2мин 40сек

Использование CPU

10%

42%

Использование RAM

64Мб

130Мб

Размер итогового файла json

4,01ГБ

1,88Гб

 

 

Исходя из результатов тестирования можно сделать вывод, что утилита ibcmd более эффективно использует вычислительные ресурсы при преобразовании файла лога ЖР в json (при этом файл json максимально полный).

Итоги сравнения функционала

 

Показатель

ibcmd

Vector

Отслеживать изменения файлов и мониторинг их добавления по маске

Да

Да

Обработка нескольких каталогов для отслеживания изменений файлов

Нет

Да

Запоминает последние обработанные строки или файлы

?

Да

Настраиваемый алгоритм разбора файлов логов

Нет

Да

Настраиваемые схемы ротации выходного файла

Нет

Да

Число форматов выходных файлов

2

10

Сжатие выходного файла

Нет

Да

Поддержка выгрузки без учета корневых элементов json и xml - json line и xml line

Да

Нет

Выгрузка данных за необходимый период

Да

Да

Настраиваемые фильтры\условия по разобранным данным перед записью в целевой файл

Нет

Да

 

 

По функционалу Vector на голову выше ibcmd, но это не удивительно, так как у инструментов разные назначения.

Выводы

Чтобы сделать выводы, нужно определить, для какой цели вы хотите трансформировать логи журнала регистрации 1С в json.

В первую очередь это нужно для того, чтобы эти данные проанализировать, и тут будет два пути: если логов мало, то это можно сделать в самой 1С без каких либо трансформаций в json. Если же логов много, то логично это сделать в какой-то спец.системе. Это может быть ClickHouse, OpenSearch, Loki и т.п., и в таком случае полученные данные нужно будет еще чем-то отправить. Обычно для таких задачи используют FileBeat или Vector, и тут встает вопрос, а зачем тогда в этой цепочке ibcmd?

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

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

журнал регистрации ibcmd Vector логирование HighLoad системы трансформация логов JSON ClickHouse производительность анализ данных

См. также

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

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

9000 руб.

28.08.2019    34171    22    21    

75

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

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

6000 руб.

28.11.2018    20907    17    7    

42

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

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

21.10.2024    3117    leemuar    8    

23

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

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

1 стартмани

29.12.2023    2245    31    dima_gsv    3    

13

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

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

1 стартмани

19.11.2023    1508    5    AlexSTAL    0    

8

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

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

1 стартмани

13.11.2023    4891    9    AlexSTAL    0    

47

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

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

3 стартмани

26.09.2023    2909    19    doom2good    16    

14

Журнал регистрации Статистика базы данных HighLoad оптимизация Конфигурации 1cv8 Абонемент ($m)

Удобный отчет по выполнению фоновых заданий в 1С с разбивкой по разным критериям, например по срокам, в какой последовательности, выполнение дольше всех, сколько одновременно и так далее.

5 стартмани

04.09.2023    1314    15    Maxiko    0    

7
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 3092 20.11.24 18:59 Сейчас в теме
Чета я не понял: в конфиге:
file: "H:\\vector\\transform.vrl"
Это файл трансформации? При том дальше в статье сворачиваемая область с файлом с другим расширением.

С третьей стороны, 3 минуты на 2 гига - это овер дофига. У вас там пень первый?

Ну и какой-то странный файл получился:
"Data":"{\"P\",\r\n{1,\r\n{\"S\",\"Domain\\User1\"}\r\
Шо это вообще?
11. I_G_O_R 69 30.11.24 00:57 Сейчас в теме
(1)
С третьей стороны, 3 минуты на 2 гига - это овер дофига. У вас там пень первый?

скорее всего парсинг регулярками медленный, если написать обычный парсер, то 600Мб максимум за пару сек парсится, ну и на трансформацию в json пусть еще секунд 10-20 (сильно зависит от языка и полноты json)
2. Somebody1 69 21.11.24 07:30 Сейчас в теме
1С, как всегда, хотела сделать своё, жёлтое. И даже сделала. Но, как всегда, половинчатое и скудное. Классика!
user1913000; +1 1 Ответить
3. Viktor_Ermakov 369 21.11.24 09:03 Сейчас в теме
Спасибо за статью, отличная работа проделана.
Для себя не нашел в сравнительной табличке информацию о платности, бесплатности сравниваемого Vector.
Это тоже важный фактор для сравнения.
kuntashov; +1 Ответить
4. user1913000 18 21.11.24 10:10 Сейчас в теме
(3) Добрый день, Vector поставляется по лицензии MPL 2.0 https://github.com/vectordotdev/vector/blob/master/LICENSE
5. mustang_ 21.11.24 10:58 Сейчас в теме
В итогах сравнения указано, но думаю стоит отдельно отметить.

С помощью ibcmd нельзя обрабатывать каталоги нескольких БД с ЖР одновременно. Этот недостаток сводит на нет возможность ее применения.

Если мониторить нужно больше одной базы ibcmd практически бесполезна.
Tantor; leongl; +2 Ответить
9. G_115608098188276507655 25.11.24 18:36 Сейчас в теме
(5) Вполне себе запускается для нескольких баз.
На линуксе для каждого процесса ibcmd перед запуском можно задать свою директорию ${HOME}, ведь именно там лежит файл .lock, который эта утилита проверяет. Можно и просто запускать от разных пользователей.
На виндовс не пробовал, могу предположить, что как минимум можно запускать одну на пользователя.

upd. а есть ведь еще и докер :)
10. mustang_ 25.11.24 21:56 Сейчас в теме
(9) Да, можно запускать от разных пользователей.
Но если баз у меня 50, то заводить 50 пользователей, просто ради того, что бы читать лог мне кажется несколько странным. То же самое касается докеров.
Так просто можно далеко зайти... Ни на что не претендую, мое имхо.
6. Tantor 98 21.11.24 14:31 Сейчас в теме
Отличная статья!
Кстати, а вот еще один из вариантов от коллег из 1С - https://its.1c.ru/db/metod8dev#content:6019:hdoc:techlog_data
7. mustang_ 21.11.24 15:06 Сейчас в теме
(6) В статье ссылка на не рабочий python скрипт.
8. ImHunter 328 25.11.24 09:22 Сейчас в теме
(0) Есть ли статья про настройку ЖР и вектора? Которой конкретно вы пользовались или написали.
Оставьте свое сообщение