Кейс · CLI-утилита · Python
logslice: анализ логов без зависимостей
CLI на Python 3.11+ только на стандартной библиотеке: потоково разбирает логи nginx/apache (combined), JSON-lines, logfmt и syslog (gz, bz2, xz тоже), считает статистику и топы, кластеризует похожие ошибки, ищет скачки нагрузки по z-score и EWMA и собирает один HTML-отчёт с SVG-графиками и тепловой картой. Пет-проект.
- Python
- stdlib only
- CLI
- SVG
- pytest
- ruff
- mypy
- GitHub Actions
- Docker
01 · Как выглядит
Скриншоты


02 · О проекте
Что это и зачем
logslice — консольная утилита на Python для разбора логов: читает nginx/apache combined, JSON-lines, logfmt и syslog, в том числе сжатые gz, bz2 и xz, и показывает статистику, топы, кластеры похожих ошибок и скачки нагрузки. Пет-проект.
Только стандартная библиотека Python 3.11+: установка ничего не скачивает. Файл читается потоком, в памяти живут счётчики, а не строки; ошибки группируются по шаблону с нормализацией чисел и идентификаторов, аномалии ищутся статистическим порогом (z-score или EWMA). Результат один и тот же для терминала, JSON и HTML.
Ограничения
Живой версии нет: это консольная утилита. Скриншоты сняты на синтетических логах с вымышленными адресами из документационных диапазонов.
Времена показываются в UTC. Автоопределение смотрит только первые 300 строк и один формат на вход. Аномалии это статистический порог без сезонности: на шумных данных бывают слабые срабатывания.
Разбор идёт в одном потоке. Замер скорости один, на одной машине: на другом железе и системе цифры будут другими.
serve не предназначен для публикации в интернет: HTTP без TLS и аутентификации, только loopback.
Что внутри
- Команды stats, top, errors, slice, anomalies, report и serve; общие флаги --format, --from/--to (ISO, epoch или -90m), --json, --color, коды возврата 0/1/2/3/4/130
- Форматы: nginx/apache combined, JSON-lines, logfmt, syslog (RFC 3164 и 5424) с автоопределением по первым 300 строкам; gz, bz2 и xz по magic-байтам, с лимитами строки, объёма и степени сжатия
- Кластеры похожих ошибок по шаблону: счёт, доля, интервал и примеры
- Аномалии: скачки и провалы RPS, скачки ошибок, методы zscore и ewma с настраиваемыми окном и порогом
- HTML-отчёт одним файлом без внешних запросов: запросы по времени, тепловая карта день недели × час, топы, распределение задержек, кластеры ошибок; строгий CSP, светлая и тёмная темы, у графиков есть табличная альтернатива
- serve показывает тот же отчёт на 127.0.0.1 с проверкой Host и Origin; по умолчанию страница закрыта от индексации
- 53 теста, ruff, mypy --strict; property-тесты hypothesis, «ядовитые» строки, gzip-бомба, XSS и ANSI-инъекции в выводе; axe на 390 и 1280 px: 0 нарушений
- Один прогон на 1 млн строк combined (Windows 11, CPython 3.12.10): 8,2 с (около 122 тыс. строк/с), пик памяти 64 МБ
03 · Как запустить
Запуск одной командой
git clone <репозиторий по запросу> logslice
cd logslice
python -m venv .venv && .venv/bin/pip install .
logslice report access.log -o report.html04 · Код
Репозиторий приватный
Исходники лежат в приватном репозитории. Напишите в Telegram, открою доступ.
Запросить код