Thanks to visit codestin.com
Credit goes to github.com

Skip to content
/ loga Public

Потоковый парсинг ТЖ 1С, фильтрация, агрегации и экспорт результатов в Excel

License

Notifications You must be signed in to change notification settings

rdv-team/loga

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RDV-LogA: гибкий инструмент обработки технологического журнала 1С с готовыми правилами анализа (Log Analyzer)

Потоковый парсинг ТЖ 1С, фильтрация, агрегации и экспорт результатов в Excel.

Python Polars Status

Версия движка: 1.0.0 (см. main.py)


Содержание


Кратко

Основное назначение — выполнить анализ событий технологического журнала за длительный период времени (от 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:
    • polars
    • numpy
    • tqdm (опционально — для прогресс-бара)
    • xlsxwriter (для экспорта Excel через polars.write_excel)

Установка зависимостей:

pip install polars numpy xlsxwriter tqdm

Быстрый старт

Для быстрого старта не требуется скачивать исходные файлы скрипта. Достаточно скачать выгрузку информационной базы "Анализ технологического журнала" из каталога releases_1c📂. Информационная база уже включает в себя исходный код скрипта python, а также готовые шаблоны для формирования конфигурационного файла config.json. По шаблону анализа автоматически сформируется config.json и выполнится запуск скрипта python. Результаты анализа сразу будут доступны в каталоге с результатами.

Ручной запуск:

  1. Подготовьте config.json в корне рядом с main.py.
  2. Запустите:
python main.py
  1. Итоговый файл будет сохранён в <output_directory>/<output_file>.

Подробное руководство: Запуск через информационную базу "Анализ технологического журнала"


Конфигурация config.json

Обязательные ключи

Ключ Тип Назначение
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). Применяется к колонкам с типом «время».

Как это работает

  1. Поиск файлов в каталогах.
  2. Фильтр по дате/размеру.
  3. Определение кодировки.
  4. Построчный парсинг событий.
  5. Применение фильтров.
  6. Сборка чанков → Parquet.
  7. Агрегации и формулы.
  8. Экспорт в 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.


About

Потоковый парсинг ТЖ 1С, фильтрация, агрегации и экспорт результатов в Excel

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages