RDV-LogA: гибкий инструмент обработки технологического журнала 1С с готовыми правилами анализа (Log Analyzer)
Потоковый парсинг ТЖ 1С, фильтрация, агрегации и экспорт результатов в Excel.
Версия движка: 1.0.0 (см. main.py)
- Кратко
- Архитектура
- Установка
- Быстрый старт
- Конфигурация
config.json - Как это работает
- Запуск через информационную базу "RDV-LogA: Анализ технологического журнала"
- Производительность
- Логирование
- Ограничения и ожидания по данным
- Лицензия
Основное назначение — выполнить анализ событий технологического журнала за длительный период времени (от 1 дня до нескольких месяцев). Инструмент анализа технологического журнала позволяет сгруппировать события по свойствам события (Context, processName, SessionID и т.д.) и вывести различную агрегацию по значениям ключей. Например, вывести общую длительность в разрезе контекста выполнения кода или топ пользователей, потребляющих наибольшее количество памяти, самые длительные запросы, самые длительные серверные вызовы, отчет по взаимоблокировкам и таймаутам на ожиданиях блокировок. Это помогает выявить узкие места в системе, построить отчеты по технологическому журналу, приоритизировать операции и приступить к оптимизации производительности системы.
Особенности:
- Рассчитан на большое количество файлов и большой объём каждого файла (10–50 ГБ на файл).
- Может работать и с небольшими технологическими журналами.
- Построчно читает файлы технологического журнала 1С, извлекает события заданного типа, применяет фильтры и агрегации.
- Итог сохраняется в Excel (
.xlsx). - Использует библиотеку
polarsдля высокопроизводительной обработки и умеет работать в несколько потоков.
├── main.py # Точка входа: загрузка конфигурации, настройка логов, запуск пайплайна
├── config.py # Загрузка и валидация config.json
├── logger.py # Настройка корневого логгера (файл + консоль)
├── data_processing.py # Конвейер: чтение → parquet-чанки при чтении файлов → lazy concat (объединение parquet в большой dataframe) → агрегации → Excel
├── file_processing.py # Построчный разбор логов, детектор событий, извлечение ключей и значений из события
├── filters.py # Реализация фильтров (eq, gt, regex, filled/empty и т.п.)
├── aggregation_registry.py # Реестр агрегаций (sum, min, max, mean, median, p95, stddev, percent, intervals)
└── config.json # Конфигурация запуска (создается из 1С, но можно и вручную)
Ключевые моменты:
- Потоковая обработка: большие логи разбиваются на чанки и временно сохраняются как Parquet для бережного потребления оперативной памяти
- Ленивые операции Polars: объединение чанков и финальные расчеты выполняются лениво и оптимально, опять же для бережного потребления памяти.
- Параллелизм: количество потоков контролируется параметром
cpu_usage_percent.
Требования:
- Python 3.10+
- ОС: Windows / Linux (проверено чтение кодировок
utf-8(-sig)иcp1251) - Пакеты Python:
polarsnumpytqdm(опционально — для прогресс-бара)xlsxwriter(для экспорта Excel черезpolars.write_excel)
Установка зависимостей:
pip install polars numpy xlsxwriter tqdmДля быстрого старта не требуется скачивать исходные файлы скрипта. Достаточно скачать выгрузку информационной базы "Анализ технологического журнала" из каталога releases_1c📂.
Информационная база уже включает в себя исходный код скрипта python, а также готовые шаблоны для формирования конфигурационного файла config.json.
По шаблону анализа автоматически сформируется config.json и выполнится запуск скрипта python. Результаты анализа сразу будут доступны в каталоге с результатами.
Ручной запуск:
- Подготовьте
config.jsonв корне рядом сmain.py. - Запустите:
python main.py- Итоговый файл будет сохранён в
<output_directory>/<output_file>.
Подробное руководство: Запуск через информационную базу "Анализ технологического журнала"
| Ключ | Тип | Назначение |
|---|---|---|
logger_directory |
string |
Папка для логов приложения |
logger_file |
string |
Имя файла лога |
base_directories |
string[] |
Базовые каталоги, где искать каталоги технологического журнала |
base_subdirectories |
string[] |
Подкаталоги, которые необходимо анализировать, если вы группируете события по каталогам. |
output_directory |
string |
Куда сохранять Excel |
output_file |
string |
Имя итогового .xlsx |
start_period |
string |
Начало периода анализа событий в log файлах: YYMMDDhhmmss |
end_period |
string |
Конец периода анализа событий в log файлах: YYMMDDhhmmss |
event_name |
string |
Имя события ТЖ для анализа |
event_limit |
number |
Максимум строк в отчете (0 — без ограничения) |
keys_result |
object[] |
Описание столбцов/агрегаций/формул |
keys_aggregate |
string |
Ключи группировки через запятую (или пусто) |
keys_sort |
string |
Сортировка, напр.: col1 asc, col2 desc |
cpu_usage_percent |
number |
0 — один процесс; >0 — размер пула от CPU% |
Дополнительно:
keys_filters: массив фильтров.
Фильтры задаются в массиве keys_filters.
Каждый фильтр описывается как объект:
{ "key": "<имя поля>", "operation": "<операция>", "value": <значение> }Поддерживаются следующие операции:
| Операция | Назначение |
|---|---|
eq |
равно |
ne |
не равно |
gt |
больше |
ge |
больше или равно |
lt |
меньше |
le |
меньше или равно |
contains |
содержит подстроку (для строк) |
regex |
соответствует регулярному выражению (Python re) |
filled |
значение заполнено (не null, не пустая строка) |
empty |
значение пустое (отсутствует, null или пустая строка) |
Агрегации задаются в массиве aggregation для каждого ключа из keys_result.
Поддерживаются следующие операции:
| Агрегация | Назначение |
|---|---|
sum |
сумма значений |
min |
минимальное значение |
max |
максимальное значение |
mean |
среднее арифметическое |
median |
медиана |
p95 |
95-й перцентиль (значение, меньше которого 95% выборки) |
stddev |
стандартное отклонение |
percent |
доля длительности в процентах относительно суммы общей длительности |
intervals_X_Y |
интервальное распределение значений по диапазонам (X — шаг, Y — число интервалов). Автоматически добавляется «≥ X*Y». |
roundtime_Nu |
округление времени (N — число, u — единица: s, m, h, d). Применяется к колонкам с типом «время». |
- Поиск файлов в каталогах.
- Фильтр по дате/размеру.
- Определение кодировки.
- Построчный парсинг событий.
- Применение фильтров.
- Сборка чанков → Parquet.
- Агрегации и формулы.
- Экспорт в Excel.
👉 Подробное руководство пользователя см. в Руководство пользователя RDV-LogA
cpu_usage_percent: 0 = один поток, >0 = пропорция CPU.- Потоковая обработка → Parquet → объединение.
- LazyFrame оптимизирует память.
- Файл:
<logger_directory>/<logger_file> - Консольный вывод.
- Диагностика по шагам: поиск файлов, агрегации, формулы, кодировки.
- Файл должен начинаться с префикса даты
YYMMDDhh. - Минимальный размер: > 20 байт.
event_nameдолжен реально встречаться.- Excel требует пакет
xlsxwriter.
Проект распространяется под лицензией BSD 3-Clause.
Подробности см. в файле LICENSE.