Отчёт по логам сервераРазработка и доработка

Скрипт на Python, который прочитает журналы доступа веб-сервера и сделает понятный отчёт о страницах и ошибках

Обычно готово за 15 минутДоработки включеныКонтроль качества
Пакеты
Защита оплатыПодробнее
  • Доработки в рамках пакета бесплатны.
  • Если вы не ответите в течение 3 дней после сдачи, работа будет принята автоматически.

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

Скрипт на Python, который прочитает журналы доступа веб-сервера и сделает понятный отчёт о страницах и ошибках

Пример результата

Пример по пакету «Стандарт»

Сводный отчёт в Excel из ежемесячных продаж 9 магазинов

Как его запускают

python merge_sales.py --month 2026-10
2026-11-02 09:14:03 INFO  Папка: sales/2026-10, найдено файлов: 9
2026-11-02 09:14:03 INFO  shop-01.csv: 1284 строки
2026-11-02 09:14:04 INFO  shop-02.xlsx: 967 строк
2026-11-02 09:14:04 WARN  shop-07.csv: пропущены 3 строки без цены (строки 88, 412, 913)
2026-11-02 09:14:05 INFO  Готово: 10 412 строк -> report-2026-10.xlsx (листы «Продажи» и «Итоги»)

Настройки, а не код

Названия столбцов каждого магазина лежат в settings.ini. Новый магазин или переименованный столбец — это одна строка там:

[columns]
date = Дата, Дата продажи, День
product = Товар, Наименование, Название
quantity = Кол-во, Количество, Шт
price = Цена, Цена за шт

Фрагмент кода

def read_shop_file(path: Path, columns: dict[str, list[str]]) -> pd.DataFrame:
    """Читает файл одного магазина и даёт столбцам названия из отчёта."""
    table = pd.read_excel(path) if path.suffix == ".xlsx" else pd.read_csv(path, encoding="utf-8-sig")
    renamed = {}
    for name, variants in columns.items():
        found = next((c for c in table.columns if c.strip() in variants), None)
        if found is None:
            raise ReportError(f"{path.name}: нет столбца «{name}» (искали: {', '.join(variants)})")
        renamed[found] = name
    table = table.rename(columns=renamed)[list(columns)]
    table["shop"] = path.stem
    return table

Файлы: ZIP-архив с merge_sales.py (310 строк), settings.ini, requirements.txt и README: как установить Python, как запустить скрипт и что значит каждое сообщение в журнале. Клиент запускает скрипт на своём компьютере.

Клиент: небольшая сеть из 9 магазинов канцтоваров. Каждый магазин присылает продажи за месяц в CSV или Excel, и названия столбцов у всех немного разные. Задача: скрипт, который читает все файлы из папки, приводит столбцы к одному виду и сохраняет один отчёт в Excel: все продажи и отдельный лист с итогами по магазинам.

Клиент и все данные вымышлены.

Об услуге

Веб-сервер записывает каждый запрос в журнал доступа, но файл на миллионы строк мало что говорит, пока его не посчитать. Этот скрипт на Python читает журналы доступа Nginx или Apache, включая старые сжатые, и делает отчёт: запросы по дням и часам, самые посещаемые страницы, коды ответа, страницы с ошибками 404 и 500 и откуда пришли посетители. В «Премиуме» он считает заходы поисковых систем отдельно от людей и сохраняет книгу Excel с листом на каждый раздел. IP-адреса посетителей по умолчанию в отчёт не попадают или сокращаются, если они вам нужны. Пришлите строку формата журнала из настроек сервера и 20-30 строк с изменёнными адресами. Запускаете скрипт вы на своём сервере или компьютере; он читает журналы и никаких настроек не меняет.

Что входит

  • Что вы получитеАрхив ZIP со скриптом на Python, README с пошаговой инструкцией и, начиная со «Стандарта», файл настроек с путями к журналам и параметрами отчёта; код также виден на странице заказа.
  • Nginx и ApacheРаспространённые форматы журналов или ваш, если он другой
  • Ошибки со страницамиКакие адреса отдают 404 или 500 и как часто
  • И старые журналыНачиная со «Стандарта», сжатые файлы .gz читаются как есть
  • Без личных данныхIP-адреса убираются или сокращаются
  • Понятный кодС комментариями, раздел легко добавить потом

Порядок работы

  1. 1
    ЗадачаВы присылаете формат журнала и несколько строк с изменёнными адресами
  2. 2
    КодМы пишем скрипт и инструкцию по запуску
  3. 3
    ПроверкаВы запускаете его на копии журнала за один день и смотрите отчёт
  4. 4
    ПравкиВы просите правки в рамках пакета и присылаете текст ошибки, если она есть

Что нужно от вас

Ваш веб-сервер (Nginx или Apache), строка log_format или LogFormat из его настроек, если её меняли, и 20-30 строк журнала доступа с IP-адресами, заменёнными на выдуманные. Где лежат журналы и как они ротируются, сколько весит журнал за день, что должно быть в отчёте и в каком виде (CSV или Excel) и где он будет работать: на самом сервере (и какая там система) или на вашем компьютере.

В брифе мы спросим:

  • Какой веб-сервер и формат журнала?
  • Что должно быть в отчёте?
  • Как часто он нужен?
  • Где он будет работать?

Сравнение пакетов

ПакетыЭкономОдин журнал, один отчёт16 $СтандартОтчёт с настройками33 $БизнесПрограмма отчётов67 $
Срок1 день2 дня3 дня
Доработки123
Коддо 150 строкдо 400 строкдо 1000 строк
Файлов кода1до 3до 8
Файл настроекНетДаДа
Понятные ошибки и журнал работыНетДаДа
Параметры запуска и инструкция для запуска по расписаниюНетНетДа
Инструкция по установке и запуску (README)ДаДаДа
ЯзыкPythonPythonPython
Заказать ЭкономЗаказать СтандартЗаказать Бизнес

Защита оплаты

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

  • Фиксированная ценаЦена пакета не меняется после оплаты.
  • Деньги резервируютсяПри оплате сумма только резервируется. Сервису она переходит, когда вы примете работу.
  • Проверка перед сдачейКаждый результат проходит проверку качества, прежде чем попасть к вам, и вы видите его на странице заказа до приёмки.
  • Бесплатные доработкиПросите изменения в рамках брифа столько раз, сколько предусмотрено пакетом.
  • Приёмка через 3 дняЕсли в течение 3 дней после сдачи вы не примете работу и не попросите изменений, она будет принята автоматически. Если после сдачи вы напишете в чат заказа, заказ подождёт; ответив, мы можем начать отсчёт 3 дней заново и сообщим об этом в чате.
  • Переделка или полный возвратЕсли результат не соответствует брифу и доработки не помогли или срок превышен больше чем вдвое, напишите в чат заказа: мы переделаем работу или полностью вернём деньги.
Как это работает →

Вопросы и ответы

Это то же самое, что веб-аналитика?

Нет. Он считает то, что видел сервер: каждый запрос, включая запросы поисковых систем и скриптов, без cookies и кода отслеживания. Цифры будут отличаться от сервиса аналитики, и полезны оба взгляда.

А IP-адреса посетителей?

Во многих странах они считаются личными данными, поэтому по умолчанию отчёт их не показывает. Если нужны, например чтобы увидеть один адрес, который заваливает сайт запросами, их можно сокращать.

Он может блокировать вредных посетителей?

Нет. Он только читает журналы и делает отчёт, настроек сервера и файрвола не меняет.

Вы будете читать мои журналы?

Нет. Скрипт запускаете вы у себя. Нам нужны только строка формата и несколько строк с изменёнными адресами.

Не нашли ответ?

Пакеты