Skip to main content

Cервис, формирующий статистический отчет на основании парсинга логов

Project description

log_analyzer

PyPI version Python versions License CI Publish to PyPI

Cервис для формирования статистических отчетов на основе парсинга логов NGINX.

Функции

  • Парсинг access-логов NGINX
  • Расчет ключевых метрик
  • Выявление «подозрительных» URL по времени ответа
  • CLI-интерфейс на Typer
  • Формирует отчёт в виде таблицы HTML в директории report с сортировкой столбцов
  • (TODO) Экспорт в JSON / CSV
  • (TODO) Фильтрация по временному диапазону

Установка

pip install log-analyzer-cli

Использование

Опции

log_analyzer --help

С конфигом по-умолчанию

log_analyzer

Файл конфига, как пример (config.toml):

REPORT_SIZE = 10
REPORT_DIR = "./reports"
LOG_DIR = "/Path to the config file/logs"
LOG_PATTERN = 'nginx_access_ui\.log_(\d{8})-\d{6}-[a-f0-9]+(?:\.gz)?$'

С конфигом при запуске в консоли

log_analyzer --config /путь/к/файлу.toml

Файл лога

Пример входных строк NGINX-лог файла

1.138.198.128 -  - [30/Jun/2017:03:28:23 +0300] "GET /api/v2/banner/25020539/statistic/?date_from=2016-10-20&date_to=2017-06-30 HTTP/1.1" 200 9134 "-" "python-requests/2.8.1" "-" "1498782503-440360380-4707-10488743" "4e9627334" 0.054
1.169.137.128 -  - [30/Jun/2017:03:28:23 +0300] "GET /api/v2/group/1240146/banners HTTP/1.1" 200 994 "-" "Configovod" "-" "1498782502-2118016444-4707-10488733" "712e90144abee9" 0.643
1.159.236.144 -  - [30/Jun/2017:03:28:23 +0300] "GET /api/v2/banner/3118447/statistic/conversion/?date_from=2007-01-01&date_to=2017-06-29 HTTP/1.1" 200 328 "-" "Mozilla/5.0" "-" "1498782497-708638932-4707-10488660" "0ae935e4e7a96" 5.246
1.195.44.0 -  - [30/Jun/2017:03:28:23 +0300] "GET /api/v2/internal/revenue_share/service/276/partner/77624766/statistic/v2?date_from=2017-06-24&date_to=2017-06-30&date_type=day HTTP/1.0" 200 2615 "-" "-" "-" "1498782502-1775774396-4707-10488742" "0d9e6ca2ba" 0.329
1.138.198.128 -  - [30/Jun/2017:03:28:23 +0300] "GET /api/v2/banner/25187824/statistic/?date_from=2016-10-20&date_to=2017-06-30 HTTP/1.1" 200 8237 "-" "python-requests/2.8.1" "-" "1498782503-440360380-4707-10488745" "4e9627334" 0.059
1.169.137.128 -  - [30/Jun/2017:03:28:23 +0300] "GET /api/v2/banner/5960595 HTTP/1.1" 200 992 "-" "Configovod" "-" "1498782503-2118016444-4707-10488744" "712e90144abee9" 0.147
1.199.4.96 -  - [30/Jun/2017:03:28:23 +0300] "GET /api/v2/banner/17572305/statistic/?date_from=2017-06-30&date_to=2017-06-30 HTTP/1.1" 200 115 "-" "Lynx/2.8.8dev.9 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.10.5" "-" "1498782503-3800516057-4707-10488747" "c5d7e306f36c" 0.083
1.138.198.128 -  - [30/Jun/2017:03:28:23 +0300] "GET /api/v2/banner/25187824 HTTP/1.1" 200 1260 "-" "python-requests/2.8.1" "-" "1498782503-440360380-4707-10488749" "4e9627334" 0.203
1.195.44.0 -  - [30/Jun/2017:03:28:23 +0300] "GET /api/v2/internal/revenue_share/service/276/partner/77757278/statistic/v2?date_from=2017-06-24&date_to=2017-06-30&date_type=day HTTP/1.0" 200 12 "-" "-" "-" "1498782503-1775774396-4707-10488750" "0d9e6ca2ba" 0.144
1.138.198.128 -  - [30/Jun/2017:03:28:23 +0300] "GET /api/v2/banner/25949683 HTTP/1.1" 200 1261 "-" "python-requests/2.8.1" "-" "1498782502-440360380-4707-10488740" "4e9627334" 0.863

Таблицы отчёта

  • URL - запроса
  • Count - сколько раз встречается URL, абсолютное значение
  • Count Perc - сколько раз встречается URL, в процентах относительно общего числа запросов
  • Time Avg - среднее время запроса для данного URL
  • Time Max - максимальное время запроса для данного URL
  • Time Med - медианное время запроса для данного URL
  • Time Perc - суммарное время запроса для данного URL, в процентах относительно общего времени запросов
  • Time Sum - суммарное время запроса для данного URL, абсолютное значение
URL Count Count Perc Time Avg Time Max Time Med Time Perc Time Sum
/api/v2/internal/html5/phantomjs/queue/?wait=1m 2767 0.106 62.995 9843.569 60.073 9.043 174306.352
/api/v2/internal/gpmd_plan_report/queue/?wait=1m&worker=5 1410 0.054 67.106 9853.373 60.124 4.909 94618.864
/api/v2/internal/gpmd_plan_report/queue/?wait=1m&worker=2 1409 0.054 67.096 9826.572 60.125 4.905 94537.857
/api/v2/internal/gpmd_plan_report/queue/?wait=1m&worker=3 1393 0.053 67.189 9853.242 60.125 4.856 93594.358
/api/v2/internal/gpmd_plan_report/queue/?wait=1m&worker=4 1392 0.053 67.133 9826.209 60.124 4.848 93448.983
/api/v2/internal/gpmd_plan_report/queue/?wait=1m&worker=1 1414 0.054 60.166 71.291 60.123 4.414 85075.406

Документация

Документация собирается с помощью Zensical и автоматически публикуется на GitHub Pages.

Локальный предпросмотр: just docs-serve (http://localhost:8000)

Сборка: just docs-build

API-документация генерируется автоматически из docstring-функций с помощью mkdocstrings.

Примечание для maintainer'а: Для автоматической публикации документации перейдите в Settings → Pages вашего репозитория и установите источник GitHub Actions.

Разработка

Подготовка окружения

Клонируйте репозиторий

git clone git@github.com:rustruber/log_analyzer.git
cd log_analyzer

Синхронизируйте зависимости

uv sync

Поднять виртуальное окружение

Если работаете в PyCharm не забудьте переключить интерпретатор на нужную версию python в директории .venv/bin

source .venv/bin/activate

Установка в режиме разработки (editable)

После этого команда log_analyzer станет доступна глобально, а любые изменения в коде будут подхватываться сразу.

uv pip install -e .

Проверка качества кода

Эта команда запускает форматирование (ruff format), линтинг (ruff check), проверку типов (ty) и тесты (pytest).

just qa

Команды для разработки

Команда Что делает
just qa Полная проверка (форматирование, линтинг, типы, тесты)
just test Запустить тесты
just docs-serve Посмотреть документацию локально
just build Собрать пакет
just type-check Проверить типы

Запуск тестов

uv run pytest

Лицензия

MIT License

Проект создан в 2026 году.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

log_analyzer_cli-0.3.0.tar.gz (142.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

log_analyzer_cli-0.3.0-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

Details for the file log_analyzer_cli-0.3.0.tar.gz.

File metadata

  • Download URL: log_analyzer_cli-0.3.0.tar.gz
  • Upload date:
  • Size: 142.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for log_analyzer_cli-0.3.0.tar.gz
Algorithm Hash digest
SHA256 61bd57b4797aef04615a219b47e6a0ef8bb49964a04c6183976c5c1ee0148185
MD5 f1b00827d19fa02dc04c292bf786fefa
BLAKE2b-256 0991ec7eb23b7f9ead02c67a1f60c5d2a7662a9544899d9032c5878247c4e978

See more details on using hashes here.

Provenance

The following attestation bundles were made for log_analyzer_cli-0.3.0.tar.gz:

Publisher: publish.yml on rustruber/log_analyzer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file log_analyzer_cli-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for log_analyzer_cli-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4a22d7f5d8e1ca21e024885a15e839cf9013153212a97bd9e9c8e80eda93e360
MD5 30ff5abf24ff40885e2b7b9dfff9ef57
BLAKE2b-256 05297c08e9ceda9c5b5a100263eb62ff1f562f4cbb2b6bdab12ac91807d2df66

See more details on using hashes here.

Provenance

The following attestation bundles were made for log_analyzer_cli-0.3.0-py3-none-any.whl:

Publisher: publish.yml on rustruber/log_analyzer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page