https://github.com/rdv-team/logt
Парсер технологического журнала 1С (ТЖ) для анализа длительных операций: восстановление операций пользователя и фоновых заданий с загрузкой данных в ClickHouse и анализом в 1С.
https://github.com/rdv-team/logt
1c 1c-enterprise 1c-techlog clickhouse dbmssql dbpostgrs log-parser parser performance ragent rmngr rphost tdeadlock tech-journal techlog technological-journal tracing ttimeout
Last synced: 6 days ago
JSON representation
Парсер технологического журнала 1С (ТЖ) для анализа длительных операций: восстановление операций пользователя и фоновых заданий с загрузкой данных в ClickHouse и анализом в 1С.
- Host: GitHub
- URL: https://github.com/rdv-team/logt
- Owner: rdv-team
- License: other
- Created: 2025-09-30T06:42:02.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2026-03-30T12:01:54.000Z (10 days ago)
- Last Synced: 2026-03-30T14:07:02.417Z (9 days ago)
- Topics: 1c, 1c-enterprise, 1c-techlog, clickhouse, dbmssql, dbpostgrs, log-parser, parser, performance, ragent, rmngr, rphost, tdeadlock, tech-journal, techlog, technological-journal, tracing, ttimeout
- Language: Python
- Homepage: https://rdv-it.ru
- Size: 9.37 MB
- Stars: 35
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# RDV-LogT: анализ длительных операций по технологическому журналу 1С (загрузка в ClickHouse)
> LogT – парсер технологического журнала 1С (ТЖ) с восстановлением хронологии операций и выгрузкой в ClickHouse: читает технологический журнал, собирает все события в отдельные пользовательские операции, отбирает проблемные по длительности и сохраняет их в ClickHouse для быстрого поиска узких мест и причин медленной работы через интерфейс обработки 1С.
[]()
[]()
[]()
[](https://openyellow.org/grid?filter=top&repo=1066930411)
## Найдите причину тормозов за 10 минут
### Проблема
- Документ проводится **2 минуты**.
- Воспроизвести проблему сложно.
- Замер через конфигуратор невозможен.
- Проблема плавающая.
- В технологическом журнале миллионы строк.
Нужно понять:
- что именно тормозит
- запросы или код 1С
- ожидания на блокировках
- вызовы к сервисам менеджера кластера
- наличие ошибок и блокировок
### Что делает RDV-LogT
- Потоково читает `.log`
- Собирает события в **одну операцию**
- `VRSREQUEST → VRSRESPONSE`
- `SESN Start → Finish`
- Отбирает только проблемные по длительности операции
- Загружает данные в ClickHouse:
- `operations`
- `events`
- `event_stats`
- `calls`
- Позволяет анализировать через обработку 1С
**«Трассировка длительных операций»** (из `releases_1c`)
### Что вы получаете вместо гигабайтов ТЖ
```text
Операция: Форма.Записать : Документ.СписаниеБезналичныхДенежныхСредств
Время: 2026-01-19 15:28:41
Пользователь: Лука
Длительность: 147 754 008 мкс (147 сек)
````
```text
Из чего состоит операция по данным ТЖ:
DBMSSQL ████████████████████████████████ 72%
CALL ████████████ 18%
TLOCK ████ 7%
Прочее █ 3%
```
```text
Execution trace операции:
12:14:03.948 VRSREQUEST
12:14:05.004 DBMSSQL (RowsAffected=28)
12:14:06.800 TLOCK
12:16:12.490 VRSRESPONSE
12:16:12.551 CALL (CpuTime=140625)
```


✔ Видно, какой запрос тормозит
✔ Видно, есть ли блокировка
✔ Видно, сколько времени была обработка кода на CPU
✔ Видно, где ожидание
✔ Можно открыть любое событие полностью и посмотреть его представление в ТЖ
## Содержание
- [RDV-LogT: анализ длительных операций по технологическому журналу 1С (загрузка в ClickHouse)](#rdv-logt-анализ-длительных-операций-по-технологическому-журналу-1с-загрузка-в-clickhouse)
- [Найдите причину тормозов за 10 минут](#найдите-причину-тормозов-за-10-минут)
- [Проблема](#проблема)
- [Что делает RDV-LogT](#что-делает-rdv-logt)
- [Что вы получаете вместо гигабайтов ТЖ](#что-вы-получаете-вместо-гигабайтов-тж)
- [Содержание](#содержание)
- [Назначение](#назначение)
- [Архитектура](#архитектура)
- [Установка](#установка)
- [Конфигурация технологического журнала](#конфигурация-технологического-журнала)
- [Быстрый старт](#быстрый-старт)
- [Установка ClickHouse в Windows 11 через Docker Desktop](#установка-clickhouse-в-windows-11-через-docker-desktop)
- [Если есть сервер под управлением Linux с установленным clickhouse](#если-есть-сервер-под-управлением-linux-с-установленным-clickhouse)
- [Запуск обработки трассировки из расширения 1С](#запуск-обработки-трассировки-из-расширения-1с)
- [Руководство пользователя](#руководство-пользователя)
- [Конфигурация `config.json`](#конфигурация-configjson)
- [Новый функционал фильтров (2.3.0)](#новый-функционал-фильтров-230)
- [Схема таблиц ClickHouse](#схема-таблиц-clickhouse)
- [Минимальные системные требования для сервера ClickHouse](#минимальные-системные-требования-для-сервера-clickhouse)
- [Логирование](#логирование)
- [Ограничения](#ограничения)
- [Как можно помочь проекту](#как-можно-помочь-проекту)
- [Сообщить об ошибке или предложить идею](#сообщить-об-ошибке-или-предложить-идею)
- [Почему мы не принимаем pull request'ы?](#почему-мы-не-принимаем-pull-requestы)
- [Лицензия](#лицензия)
---
## Назначение
Инструмент предназначен для анализа **длительных операций в системах 1С** на основе технологического журнала (ТЖ).
Применяется в ситуациях, когда необходимо:
- найти конкретные пользовательские операции или фоновые задания, которые выполняются долго;
- восстановить полную хронологию событий пользовательского действия от запроса клиента до ответа сервера или от старта и завершения фонового задания;
- понять, на что реально тратится время внутри операции: БД, блокировки, вызовы кода, ожидания, исключения и т.д.;
- стандартный анализ ТЖ показывает слишком много событий и невозможно связать их в одну операцию.
Инструмент потоково читает технологический журнал, **восстанавливает границы операций (VRSREQUEST → VRSRESPONSE)** и **SESN Start → Finish**, отбирает проблемные по длительности и загружает данные в ClickHouse для детального анализа причин замедлений.
---
## Архитектура
```
├── main.py # Точка входа: загрузка конфигурации, парсин техжурнала, вставка в ClickHouse
├── config.json # Конфигурация подключения и параметров обработки
├── create_table_clickhouse.sql # SQL-схемы для ClickHouse
├── requirements.txt # Зависимости Python
```
Ключевые моменты:
- Построчное чтение файлов `.log` из каталогов рабочих процессов `rphost_*` и `rmngr_*` (`utf-8`, `utf-8-sig`).
- Для клиент-серверных вызовов события собираются в одну операцию по `clientID`. Начало операции определяется событием `VRSREQUEST`, конец — событием `VRSRESPONSE`.
- Для фоновых заданий события собираются в одну операцию по `SessionID`. Начало операции определяется событием `SESN, Func=Start`, конец — событием `SESN, Func=Finish`.
- Выполняется подсчёт статистики событий операции (сумма длительности, количество, % от общей длительности операции).
- Все операции и события загружаются (`JSONEachRow`) в ClickHouse.
- Анализ операций и событий внутри них выполняется обработкой **«Трассировка длительных операций»** на базе 1С.
---
## Установка
Для работы инструмента необходимо обеспечить наличие следующего ПО:
- **Python 3.13+**
- **ОС**: Windows / Linux
- **ClickHouse 25.6+**
Установка зависимостей:
```bash
pip install -r requirements.txt
```
`requirements.txt`:
```txt
requests
tqdm
```
---
## Конфигурация технологического журнала
Перед трассировкой длительных операций необходимо включить полный или ограниченный технологический журнал. Но обязательно требуется собирать события `SESN`, `VRSREQUEST` и `VRSRESPONSE`.
Примеры конфигураций технологического журнала [logcfg-full.xml](docs/example/logcfg-full.xml) или [logcfg-filter.xml](docs/example/logcfg-filter.xml)
---
## Быстрый старт
### Установка ClickHouse в Windows 11 через Docker Desktop
**Установить Docker Desktop**
1. Скачать: https://www.docker.com/products/docker-desktop
2. Установить Docker Desktop.
3. При запуске убедиться, что включено: `Use WSL 2 based engine`
4. Проверить установку:
```powershell
docker version
```
---
**Создать volume для хранения данных**
```powershell
docker volume create clickhouse_data
```
---
**Запустить ClickHouse**
```powershell
docker run -d \
--name clickhouse-server \
-p 8123:8123 \
-p 9000:9000 \
-p 9009:9009 \
-e CLICKHOUSE_PASSWORD=StrongP@ssw0rd \
-v clickhouse_data:/var/lib/clickhouse \
clickhouse/clickhouse-server
```
После запуска контейнер будет виден в **Docker Desktop → Containers**.
---
**Проверка работы ClickHouse**
Открой в браузере:
```
http://localhost:8123/play
```
Это встроенный web-интерфейс ClickHouse (Query Console).
Если он загружается - сервер работает корректно.
---
**Создание БД и таблиц из файла `create_table_clickhouse.sql`**
1. Открой файл `create_table_clickhouse.sql` в редакторе.
2. В файле содержатся SQL-команды `CREATE DATABASE` и `CREATE TABLE`.
3. Скопируй первую команду и вставь её в окно запроса на странице:
```
http://localhost:8123/play
```
4. Нажми **Run**.
5. Повтори для всех последующих команд из файла, выполняя их по одной.
После выполнения всех DDL-команд структура базы данных будет создана и готова к работе.
### Если есть сервер под управлением Linux с установленным clickhouse
1. Загрузите файл [create_table_clickhouse.sql](src/create_table_clickhouse.sql) на сервер ClickHouse.
Подготовьте таблицы в ClickHouse:
```bash
clickhouse-client --multiquery < create_table_clickhouse.sql
```
С указанием пароля default пользователя:
```bash
clickhouse-client --password --multiquery < create_table_clickhouse.sql
# Пароль будет запрошен интерактивно
```
Будет создана база данных **tracelog** с необходимыми таблицами.
### Запуск обработки трассировки из расширения 1С
1. Скачайте последнюю версию расширения из [каталога releases_1c](releases_1c). Оно содержит все необходимые объекты конфигурации для анализа результатов трассировки технологического журнала.
2. Подключите расширение в любую базу 1С. Версия платформы 1С:Предприятие от 8.3.21.
3. Настройте подключение к базе данных ClickHouse в расширении.
4. Откройте обработку **«Трассировка длительных операций»**.
5. Укажите базу данных и набор данных. Перейдите на страницу **Операции**. Запустите обработку файлов технологического журнала и загрузку в ClickHouse командой **Обработать данные ТЖ**. Укажите пути к файлам технологического журнала и каталогу хранения логов обработки. Конфигурационный файл `config.json` будет создан автоматически и запущен скрипт Python.
6. После загрузки в ClickHouse вернитесь в обработку **«Трассировка длительных операций»** на страницу **Операции** и нажмите «Загрузить».
## Руководство пользователя
Подробное руководство: [Анализ технологического журнала через обработку «Трассировка длительных операций»](docs/user_guide.md)
---
## Конфигурация `config.json`
| Блок | Ключ | Назначение |
|-----|------|------------|
| `clickhouse` | `url` | HTTP-адрес ClickHouse (например, `http://127.0.0.1:8123`) |
| | `user` | Пользователь ClickHouse |
| | `password` | Пароль пользователя ClickHouse |
| | `database` | Имя базы данных ClickHouse |
| `processing` | `mode` | Режим обработки логов: `single` – чтение файлов напрямую, `multi` – предварительная сборка почасовой хронологии |
| | `batch_size` | Размер батча при вставке в ClickHouse. По умолчанию – 1000 событий |
| | `timeout` | Таймаут HTTP-запросов к ClickHouse (секунды). По умолчанию – 30 |
| | `dataset_name` | Метка набора данных (используется для логического разделения данных в ClickHouse) |
| | `cleanup_temp_dir` | Удалять ли временный каталог после обработки в режиме `multi` (`true` / `false`) |
| | `client_server_operations` | Обрабатывать клиент-серверные операции (`VRSREQUEST` / `VRSRESPONSE`). По умолчанию – `true` |
| | `background_jobs` | Обрабатывать фоновые задания (`rmngr_*`, события `SESN`). По умолчанию – `true` |
| `filtering` | `min_operation_duration_ms` | Минимальная длительность операции (мс). По умолчанию – 1000 (1 секунда) |
| | `min_operation_events` | Минимальное количество событий в операции. По умолчанию – 3 |
| | `context_substring` | Подстрока для поиска в `Context` событий операции. Если ни одно событие не содержит подстроку, операция отбрасывается |
| | `event_property_filters` | Фильтр по значениям свойств события/операции: `IB`, `SessionID`, `Usr` |
| | `call_expected_window_seconds` | Ожидаемое окно появления `CALL` после `VRSRESPONSE` для диагностики "поздних" вызовов |
| | `call_bind_ttl_seconds` | TTL привязки `CALL` к операции после `VRSRESPONSE`; после истечения `CALL` не привязывается |
| `paths` | `input_dir` | Каталог с файлами технологического журнала 1С |
| | `log_dir` | Каталог для логов выполнения Python-скрипта |
---
## Новый функционал фильтров (2.3.0)
В версии `2.3.0` расширен блок `filtering` в `config.json`: добавлены фильтры по контексту и свойствам событий, а также нормализация фильтруемых значений.
Пример настройки:
```json
"filtering": {
"min_operation_duration_ms": 1000,
"min_operation_events": 3,
"context_substring": "Система.ПолучитьФорму",
"event_property_filters": {
"Usr": ["Иванова", "Петрова"],
"SessionID": ["123"],
"IB": ["test"]
},
"call_expected_window_seconds": 10,
"call_bind_ttl_seconds": 30
}
```
Как работает каскад фильтров:
- На старте операции применяется ранняя проверка (`IB`), чтобы не создавать заведомо неподходящие операции.
- По мере накопления свойств операции проверяются `event_property_filters` (`IB`, `SessionID`, `Usr`).
- На завершении операции дополнительно применяются ограничения `min_operation_duration_ms`, `min_operation_events` и `context_substring`.
Нормализация значений:
- Для `IB` сравнение выполняется по нормализованному имени базы.
- Для `SessionID` учитывается нормализация форматов вида `123(456)` → `123`.
- Пустые значения в `event_property_filters` игнорируются; для `SessionID` значение `0` трактуется как отключение фильтра по сессии.
Практический эффект:
- Проще фокусироваться на конкретных пользователях, сессиях, ИБ и бизнес-контексте вызовов.
- Быстрее находить целевые проблемные операции в больших массивах ТЖ.
---
## Схема таблиц ClickHouse
См. файл [create_table_clickhouse.sql](src/create_table_clickhouse.sql).
Три таблицы:
- **operations** — список операций (`session_id`, `client_id`, `vrs_session`, время, длительность, context).
- **events** — все события в операции.
- **event_stats** — статистика по событиям (сумма длительностей, количество, %).
---
## Минимальные системные требования для сервера ClickHouse
- **CPU**: Intel Core i5 или AMD Ryzen 5 и последующие модели
- **RAM**: 8 ГБ и выше
- **Диск**: SSD от 20 ГБ
- **ОС**: Linux x86_64
---
## Логирование
- Все логи пишутся в каталог `log_dir` из `config.json`.
- Формат: `trace-vrs-YYYYMMDD_HHMMSS.log`.
- Также выводятся в консоль.
---
## Ограничения
- Перед каждой загрузкой выбранный набор данных (`dataset`) очищается автоматически.
- Файлы логов должны соответствовать структуре ТЖ 1С (`rphost_*/*.log` или `rmngr_*/*.log`).
- Работает только с кодировками `utf-8` и `utf-8-sig`.
- Фильтрация операций выполняется по длительности и количеству событий (см. параметры в `config.json`).
---
## Как можно помочь проекту
Спасибо, что заглянули в репозиторий!
Мы очень ценим внимание к проекту и рады любой поддержке.
Пулл-реквесты в данный репозиторий **не принимаются** — код развивается внутренней командой RDV.
Но вы всё равно можете внести вклад:
### Сообщить об ошибке или предложить идею
Если вы заметили проблему или хотите предложить улучшение:
1. Откройте раздел **Issues**.
2. Опишите ситуацию простыми словами:
– что произошло,
– что ожидали,
– как можно воспроизвести проблему (если нужно).
3. Можете приложить скриншоты, логи или примеры — это очень помогает.
Мы просматриваем все обращения и обязательно реагируем.
### Почему мы не принимаем pull request'ы?
У проекта есть своя архитектура и внутренние процессы разработки.
Чтобы поддерживать стабильность и качество, изменения вносят только разработчики RDV.
Но мы внимательно следим за вашими Issue — они помогают нам делать инструмент лучше.
Спасибо, что помогаете развивать проект.
---
## Лицензия
Проект распространяется под лицензией **BSD 3-Clause**.
Подробности см. в файле [LICENSE](LICENSE).
---