{"id":34253654,"url":"https://github.com/rdv-team/logt","last_synced_at":"2026-04-02T19:02:49.508Z","repository":{"id":321231499,"uuid":"1066930411","full_name":"rdv-team/logt","owner":"rdv-team","description":"Парсер технологического журнала 1С (ТЖ) для анализа длительных операций: восстановление операций пользователя и фоновых заданий с загрузкой данных в ClickHouse и анализом в 1С.","archived":false,"fork":false,"pushed_at":"2026-03-30T12:01:54.000Z","size":9828,"stargazers_count":35,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-30T14:07:02.417Z","etag":null,"topics":["1c","1c-enterprise","1c-techlog","clickhouse","dbmssql","dbpostgrs","log-parser","parser","performance","ragent","rmngr","rphost","tdeadlock","tech-journal","techlog","technological-journal","tracing","ttimeout"],"latest_commit_sha":null,"homepage":"https://rdv-it.ru","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rdv-team.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-30T06:42:02.000Z","updated_at":"2026-03-30T11:58:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"d7f1805f-d7ea-4e2e-b302-8c125f0e5be1","html_url":"https://github.com/rdv-team/logt","commit_stats":null,"previous_names":["rdv-team/logt"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/rdv-team/logt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdv-team%2Flogt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdv-team%2Flogt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdv-team%2Flogt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdv-team%2Flogt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rdv-team","download_url":"https://codeload.github.com/rdv-team/logt/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdv-team%2Flogt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31313864,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["1c","1c-enterprise","1c-techlog","clickhouse","dbmssql","dbpostgrs","log-parser","parser","performance","ragent","rmngr","rphost","tdeadlock","tech-journal","techlog","technological-journal","tracing","ttimeout"],"created_at":"2025-12-16T11:49:10.498Z","updated_at":"2026-04-02T19:02:49.474Z","avatar_url":"https://github.com/rdv-team.png","language":"Python","readme":"# RDV-LogT: анализ длительных операций по технологическому журналу 1С (загрузка в ClickHouse)\n\n\u003e LogT – парсер технологического журнала 1С (ТЖ) с восстановлением хронологии операций и выгрузкой в ClickHouse: читает технологический журнал, собирает все события в отдельные пользовательские операции, отбирает проблемные по длительности и сохраняет их в ClickHouse для быстрого поиска узких мест и причин медленной работы через интерфейс обработки 1С.\n\n[![Python](https://img.shields.io/badge/Python-3.13%2B-blue.svg)]()\n[![ClickHouse](https://img.shields.io/badge/ClickHouse-supported-brightgreen.svg)]()\n[![Status](https://img.shields.io/badge/status-active-success.svg)]()\n[![OpenYellow](https://openyellow.openintegrations.dev/data/badges/1066930411.svg)](https://openyellow.org/grid?filter=top\u0026repo=1066930411)\n\n## Найдите причину тормозов за 10 минут\n### Проблема\n- Документ проводится **2 минуты**.  \n- Воспроизвести проблему сложно.  \n- Замер через конфигуратор невозможен.  \n- Проблема плавающая. \n- В технологическом журнале миллионы строк.\n\nНужно понять:\n\n- что именно тормозит  \n- запросы или код 1С  \n- ожидания на блокировках\n- вызовы к сервисам менеджера кластера\n- наличие ошибок и блокировок\n\n### Что делает RDV-LogT\n\n- Потоково читает `.log`\n- Собирает события в **одну операцию**\n  - `VRSREQUEST → VRSRESPONSE`\n  - `SESN Start → Finish`\n- Отбирает только проблемные по длительности операции\n- Загружает данные в ClickHouse:\n  - `operations`\n  - `events`\n  - `event_stats`\n  - `calls`\n- Позволяет анализировать через обработку 1С  \n  **«Трассировка длительных операций»** (из `releases_1c`)\n\n### Что вы получаете вместо гигабайтов ТЖ\n\n```text\nОперация:      Форма.Записать : Документ.СписаниеБезналичныхДенежныхСредств\nВремя:         2026-01-19 15:28:41\nПользователь:  Лука\nДлительность:  147 754 008 мкс (147 сек)\n````\n```text\nИз чего состоит операция по данным ТЖ:\n\nDBMSSQL        ████████████████████████████████ 72%\nCALL           ████████████                    18%\nTLOCK          ████                             7%\nПрочее         █                                3%\n```\n```text\nExecution trace операции:\n\n12:14:03.948  VRSREQUEST\n12:14:05.004  DBMSSQL (RowsAffected=28)\n12:14:06.800  TLOCK\n12:16:12.490  VRSRESPONSE\n12:16:12.551  CALL (CpuTime=140625)\n```\n![Панель операций](/docs/img/README-2026-02-23-18-43-05.png)\n![ТЖ](/docs/img/README-2026-02-23-18-52-10.png)\n✔ Видно, какой запрос тормозит\n✔ Видно, есть ли блокировка\n✔ Видно, сколько времени была обработка кода на CPU\n✔ Видно, где ожидание\n✔ Можно открыть любое событие полностью и посмотреть его представление в ТЖ\n\n## Содержание\n- [RDV-LogT: анализ длительных операций по технологическому журналу 1С (загрузка в ClickHouse)](#rdv-logt-анализ-длительных-операций-по-технологическому-журналу-1с-загрузка-в-clickhouse)\n  - [Найдите причину тормозов за 10 минут](#найдите-причину-тормозов-за-10-минут)\n    - [Проблема](#проблема)\n    - [Что делает RDV-LogT](#что-делает-rdv-logt)\n    - [Что вы получаете вместо гигабайтов ТЖ](#что-вы-получаете-вместо-гигабайтов-тж)\n  - [Содержание](#содержание)\n  - [Назначение](#назначение)\n  - [Архитектура](#архитектура)\n  - [Установка](#установка)\n  - [Конфигурация технологического журнала](#конфигурация-технологического-журнала)\n  - [Быстрый старт](#быстрый-старт)\n    - [Установка ClickHouse в Windows 11 через Docker Desktop](#установка-clickhouse-в-windows-11-через-docker-desktop)\n    - [Если есть сервер под управлением Linux с установленным clickhouse](#если-есть-сервер-под-управлением-linux-с-установленным-clickhouse)\n    - [Запуск обработки трассировки из расширения 1С](#запуск-обработки-трассировки-из-расширения-1с)\n  - [Руководство пользователя](#руководство-пользователя)\n  - [Конфигурация `config.json`](#конфигурация-configjson)\n  - [Новый функционал фильтров (2.3.0)](#новый-функционал-фильтров-230)\n  - [Схема таблиц ClickHouse](#схема-таблиц-clickhouse)\n  - [Минимальные системные требования для сервера ClickHouse](#минимальные-системные-требования-для-сервера-clickhouse)\n  - [Логирование](#логирование)\n  - [Ограничения](#ограничения)\n  - [Как можно помочь проекту](#как-можно-помочь-проекту)\n    - [Сообщить об ошибке или предложить идею](#сообщить-об-ошибке-или-предложить-идею)\n    - [Почему мы не принимаем pull request'ы?](#почему-мы-не-принимаем-pull-requestы)\n  - [Лицензия](#лицензия)\n\n---\n\n## Назначение\n\nИнструмент предназначен для анализа **длительных операций в системах 1С** на основе технологического журнала (ТЖ).\n\nПрименяется в ситуациях, когда необходимо:\n- найти конкретные пользовательские операции или фоновые задания, которые выполняются долго;\n- восстановить полную хронологию событий пользовательского действия от запроса клиента до ответа сервера или от старта и завершения фонового задания;\n- понять, на что реально тратится время внутри операции: БД, блокировки, вызовы кода, ожидания, исключения и т.д.;\n- стандартный анализ ТЖ показывает слишком много событий и невозможно связать их в одну операцию.\n\nИнструмент потоково читает технологический журнал, **восстанавливает границы операций (VRSREQUEST → VRSRESPONSE)** и **SESN Start → Finish**, отбирает проблемные по длительности и загружает данные в ClickHouse для детального анализа причин замедлений.\n\n---\n\n## Архитектура\n\n```\n├── main.py                     # Точка входа: загрузка конфигурации, парсин техжурнала, вставка в ClickHouse\n├── config.json                 # Конфигурация подключения и параметров обработки\n├── create_table_clickhouse.sql # SQL-схемы для ClickHouse\n├── requirements.txt            # Зависимости Python\n```\n\nКлючевые моменты:\n- Построчное чтение файлов `.log` из каталогов рабочих процессов `rphost_*` и `rmngr_*` (`utf-8`, `utf-8-sig`).\n- Для клиент-серверных вызовов события собираются в одну операцию по `clientID`. Начало операции определяется событием `VRSREQUEST`, конец — событием `VRSRESPONSE`. \n- Для фоновых заданий события собираются в одну операцию по `SessionID`. Начало операции определяется событием `SESN, Func=Start`, конец — событием `SESN, Func=Finish`. \n- Выполняется подсчёт статистики событий операции (сумма длительности, количество, % от общей длительности операции).\n- Все операции и события загружаются (`JSONEachRow`) в ClickHouse.\n- Анализ операций и событий внутри них выполняется обработкой **«Трассировка длительных операций»** на базе 1С.\n\n---\n\n## Установка\n\nДля работы инструмента необходимо обеспечить наличие следующего ПО:\n\n- **Python 3.13+**\n- **ОС**: Windows / Linux\n- **ClickHouse 25.6+**\n\nУстановка зависимостей:\n```bash\npip install -r requirements.txt\n```\n\n`requirements.txt`:\n```txt\nrequests\ntqdm\n```\n\n---\n\n## Конфигурация технологического журнала\n\nПеред трассировкой длительных операций необходимо включить полный или ограниченный технологический журнал. Но обязательно требуется собирать события `SESN`, `VRSREQUEST` и `VRSRESPONSE`.\nПримеры конфигураций технологического журнала [logcfg-full.xml](docs/example/logcfg-full.xml) или [logcfg-filter.xml](docs/example/logcfg-filter.xml)\n\n---\n\n## Быстрый старт\n\n### Установка ClickHouse в Windows 11 через Docker Desktop\n\n**Установить Docker Desktop**\n\n1. Скачать: https://www.docker.com/products/docker-desktop\n2. Установить Docker Desktop.\n3. При запуске убедиться, что включено: `Use WSL 2 based engine`\n4. Проверить установку:\n\n```powershell\ndocker version\n```\n\n---\n\n**Создать volume для хранения данных**\n\n```powershell\ndocker volume create clickhouse_data\n```\n\n---\n\n**Запустить ClickHouse**\n\n```powershell\ndocker run -d \\\n  --name clickhouse-server \\\n  -p 8123:8123 \\\n  -p 9000:9000 \\\n  -p 9009:9009 \\\n  -e CLICKHOUSE_PASSWORD=StrongP@ssw0rd \\\n  -v clickhouse_data:/var/lib/clickhouse \\\n  clickhouse/clickhouse-server\n```\n\nПосле запуска контейнер будет виден в **Docker Desktop → Containers**.\n\n---\n\n**Проверка работы ClickHouse**\n\nОткрой в браузере:\n\n```\nhttp://localhost:8123/play\n```\n\nЭто встроенный web-интерфейс ClickHouse (Query Console).  \nЕсли он загружается - сервер работает корректно.\n\n---\n\n**Создание БД и таблиц из файла `create_table_clickhouse.sql`**\n\n1. Открой файл `create_table_clickhouse.sql` в редакторе.\n2. В файле содержатся SQL-команды `CREATE DATABASE` и `CREATE TABLE`.\n3. Скопируй первую команду и вставь её в окно запроса на странице:\n\n```\nhttp://localhost:8123/play\n```\n\n4. Нажми **Run**.\n5. Повтори для всех последующих команд из файла, выполняя их по одной.\n\nПосле выполнения всех DDL-команд структура базы данных будет создана и готова к работе.\n\n### Если есть сервер под управлением Linux с установленным clickhouse\n\n1. Загрузите файл [create_table_clickhouse.sql](src/create_table_clickhouse.sql) на сервер ClickHouse.\n\n   Подготовьте таблицы в ClickHouse:\n   ```bash\n   clickhouse-client --multiquery \u003c create_table_clickhouse.sql\n   ```\n   С указанием пароля default пользователя:\n   ```bash\n   clickhouse-client --password --multiquery \u003c create_table_clickhouse.sql\n   # Пароль будет запрошен интерактивно\n   ```\n   \n   Будет создана база данных **tracelog** с необходимыми таблицами.\n\n### Запуск обработки трассировки из расширения 1С\n\n1. Скачайте последнюю версию расширения из [каталога releases_1c](releases_1c). Оно содержит все необходимые объекты конфигурации для анализа результатов трассировки технологического журнала. \n\n2. Подключите расширение в любую базу 1С. Версия платформы 1С:Предприятие от 8.3.21.\n\n3. Настройте подключение к базе данных ClickHouse в расширении.\n\n4. Откройте обработку **«Трассировка длительных операций»**. \n\n5. Укажите базу данных и набор данных. Перейдите на страницу **Операции**. Запустите обработку файлов технологического журнала и загрузку в ClickHouse командой **Обработать данные ТЖ**. Укажите пути к файлам технологического журнала и каталогу хранения логов обработки. Конфигурационный файл `config.json` будет создан автоматически и запущен скрипт Python.\n\n6. После загрузки в ClickHouse вернитесь в обработку **«Трассировка длительных операций»** на страницу **Операции** и нажмите «Загрузить».\n\n## Руководство пользователя\nПодробное руководство: [Анализ технологического журнала через обработку «Трассировка длительных операций»](docs/user_guide.md)\n\n---\n\n## Конфигурация `config.json`\n\n| Блок | Ключ | Назначение |\n|-----|------|------------|\n| `clickhouse` | `url` | HTTP-адрес ClickHouse (например, `http://127.0.0.1:8123`) |\n| | `user` | Пользователь ClickHouse |\n| | `password` | Пароль пользователя ClickHouse |\n| | `database` | Имя базы данных ClickHouse |\n| `processing` | `mode` | Режим обработки логов: `single` – чтение файлов напрямую, `multi` – предварительная сборка почасовой хронологии |\n| | `batch_size` | Размер батча при вставке в ClickHouse. По умолчанию – 1000 событий |\n| | `timeout` | Таймаут HTTP-запросов к ClickHouse (секунды). По умолчанию – 30 |\n| | `dataset_name` | Метка набора данных (используется для логического разделения данных в ClickHouse) |\n| | `cleanup_temp_dir` | Удалять ли временный каталог после обработки в режиме `multi` (`true` / `false`) |\n| | `client_server_operations` | Обрабатывать клиент-серверные операции (`VRSREQUEST` / `VRSRESPONSE`). По умолчанию – `true` |\n| | `background_jobs` | Обрабатывать фоновые задания (`rmngr_*`, события `SESN`). По умолчанию – `true` |\n| `filtering` | `min_operation_duration_ms` | Минимальная длительность операции (мс). По умолчанию – 1000 (1 секунда) |\n| | `min_operation_events` | Минимальное количество событий в операции. По умолчанию – 3 |\n| | `context_substring` | Подстрока для поиска в `Context` событий операции. Если ни одно событие не содержит подстроку, операция отбрасывается |\n| | `event_property_filters` | Фильтр по значениям свойств события/операции: `IB`, `SessionID`, `Usr` |\n| | `call_expected_window_seconds` | Ожидаемое окно появления `CALL` после `VRSRESPONSE` для диагностики \"поздних\" вызовов |\n| | `call_bind_ttl_seconds` | TTL привязки `CALL` к операции после `VRSRESPONSE`; после истечения `CALL` не привязывается |\n| `paths` | `input_dir` | Каталог с файлами технологического журнала 1С |\n| | `log_dir` | Каталог для логов выполнения Python-скрипта |\n\n---\n\n## Новый функционал фильтров (2.3.0)\n\nВ версии `2.3.0` расширен блок `filtering` в `config.json`: добавлены фильтры по контексту и свойствам событий, а также нормализация фильтруемых значений.\n\nПример настройки:\n\n```json\n\"filtering\": {\n  \"min_operation_duration_ms\": 1000,\n  \"min_operation_events\": 3,\n  \"context_substring\": \"Система.ПолучитьФорму\",\n  \"event_property_filters\": {\n    \"Usr\": [\"Иванова\", \"Петрова\"],\n    \"SessionID\": [\"123\"],\n    \"IB\": [\"test\"]\n  },\n  \"call_expected_window_seconds\": 10,\n  \"call_bind_ttl_seconds\": 30\n}\n```\n\nКак работает каскад фильтров:\n- На старте операции применяется ранняя проверка (`IB`), чтобы не создавать заведомо неподходящие операции.\n- По мере накопления свойств операции проверяются `event_property_filters` (`IB`, `SessionID`, `Usr`).\n- На завершении операции дополнительно применяются ограничения `min_operation_duration_ms`, `min_operation_events` и `context_substring`.\n\nНормализация значений:\n- Для `IB` сравнение выполняется по нормализованному имени базы.\n- Для `SessionID` учитывается нормализация форматов вида `123(456)` → `123`.\n- Пустые значения в `event_property_filters` игнорируются; для `SessionID` значение `0` трактуется как отключение фильтра по сессии.\n\nПрактический эффект:\n- Проще фокусироваться на конкретных пользователях, сессиях, ИБ и бизнес-контексте вызовов.\n- Быстрее находить целевые проблемные операции в больших массивах ТЖ.\n\n---\n\n## Схема таблиц ClickHouse\n\nСм. файл [create_table_clickhouse.sql](src/create_table_clickhouse.sql).  \nТри таблицы:\n- **operations** — список операций (`session_id`, `client_id`, `vrs_session`, время, длительность, context).\n- **events** — все события в операции.\n- **event_stats** — статистика по событиям (сумма длительностей, количество, %).\n\n---\n\n## Минимальные системные требования для сервера ClickHouse\n\n- **CPU**: Intel Core i5 или AMD Ryzen 5 и последующие модели\n- **RAM**: 8 ГБ и выше\n- **Диск**: SSD от 20 ГБ\n- **ОС**: Linux x86_64\n\n---\n\n## Логирование\n\n- Все логи пишутся в каталог `log_dir` из `config.json`.\n- Формат: `trace-vrs-YYYYMMDD_HHMMSS.log`.\n- Также выводятся в консоль.\n\n---\n\n## Ограничения\n\n- Перед каждой загрузкой выбранный набор данных (`dataset`) очищается автоматически.\n- Файлы логов должны соответствовать структуре ТЖ 1С (`rphost_*/*.log` или `rmngr_*/*.log`).\n- Работает только с кодировками `utf-8` и `utf-8-sig`.\n- Фильтрация операций выполняется по длительности и количеству событий (см. параметры в `config.json`).\n\n---\n\n## Как можно помочь проекту\n\nСпасибо, что заглянули в репозиторий!  \nМы очень ценим внимание к проекту и рады любой поддержке.\n\nПулл-реквесты в данный репозиторий **не принимаются** — код развивается внутренней командой RDV.  \nНо вы всё равно можете внести вклад:\n\n### Сообщить об ошибке или предложить идею\nЕсли вы заметили проблему или хотите предложить улучшение:\n\n1. Откройте раздел **Issues**.\n2. Опишите ситуацию простыми словами:  \n   – что произошло,  \n   – что ожидали,  \n   – как можно воспроизвести проблему (если нужно).  \n3. Можете приложить скриншоты, логи или примеры — это очень помогает.\n\nМы просматриваем все обращения и обязательно реагируем.\n\n### Почему мы не принимаем pull request'ы?\nУ проекта есть своя архитектура и внутренние процессы разработки.  \nЧтобы поддерживать стабильность и качество, изменения вносят только разработчики RDV.  \nНо мы внимательно следим за вашими Issue — они помогают нам делать инструмент лучше.\n\nСпасибо, что помогаете развивать проект.\n\n---\n\n## Лицензия\n\nПроект распространяется под лицензией **BSD 3-Clause**.  \nПодробности см. в файле [LICENSE](LICENSE).\n\n---\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frdv-team%2Flogt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frdv-team%2Flogt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frdv-team%2Flogt/lists"}