Логи: что это, зачем нужны, уровни и виды логирования

Логи: что это, зачем нужны, уровни и виды логирования Полезное

Лог — это файл, в который программа или система автоматически записывает события своей работы в хронологическом порядке: когда, что произошло и с каким результатом. Логирование (logging) — это сам процесс такой записи, а лог-файл — его итог на диске.

Ниже разберу, чем лог отличается от журнала событий, зачем логи нужны, какими бывают уровни и виды логов, где они лежат в Linux и как их читать командами tail и grep. Примеры даю на Ubuntu 24.04/26.04 LTS.

Что такое лог и как разложить термины

Чтобы не путаться, разведу три близких понятия по цепочке:

  • событие — факт в работе программы (пришел запрос, случилась ошибка);
  • запись лога (log record, строка лога) — одна строка с описанием события: обычно метка времени, уровень важности и текст;
  • лог-файл — файл на диске (часто с расширением .log), куда эти строки дописываются подряд, каждая с новой строки.

Логирование — не то же самое, что мониторинг. Логирование пишет сырые события. Мониторинг и алертинг — это уже надстройка, которая читает логи и метрики и сообщает о проблемах. Трассировка (tracing) — частный случай: детальный след одного запроса через несколько сервисов.

Важно: лог не «зашифрован», он просто плотный и технический. Формат строки задает тот, кто настраивал логирование, поэтому одну и ту же строку человек и парсер читают по-разному.

Зачем нужны логи

У логов четыре основных сценария применения. Обычно они работают вместе.

  • Отладка (debugging). По логам видно, в какой момент и на каком шаге программа повела себя не так. Это главный инструмент, когда «на проде воспроизвести не получается».
  • Мониторинг и эксплуатация. Логи показывают, жива ли система, растет ли число ошибок, не деградирует ли ответ. На них строят дашборды и алерты.
  • Аудит безопасности. По журналам входов, доступа и изменений находят подозрительную активность: перебор паролей, доступ из необычного места, попытки эксплуатации.
  • Аналитика. Из логов доступа веб-сервера собирают статистику: откуда пришли пользователи, какие страницы популярны, какие запросы падают в 404 или 5xx.

Граница: логи отвечают на вопрос «что произошло», но не заменяют метрики (числовые ряды вроде нагрузки CPU) и не гарантируют полноту сами по себе — если событие не залогировано, в логах его нет.

Уровни логирования

Уровень (log level, severity) — это пометка важности записи. Она позволяет писать подробно, а показывать только нужное: например, в разработке видеть все от DEBUG, а на проде — только от WARN и выше.

Ниже — распространенная в прикладных фреймворках (Log4j, Logback, Python logging, Serilog) шкала от самого подробного к самому критичному.

Уровень Когда пишут Пример записи
TRACE Максимально детально, пошаговый след внутри функции Вход в метод parse(), значение переменной
DEBUG Отладочные детали для разработчика SQL-запрос и его параметры
INFO Штатные значимые события «Сервис запущен на порту 8080»
WARN Подозрительно, но работа продолжается «Повтор запроса, попытка 2 из 3»
ERROR Операция не выполнена, но процесс жив «Не удалось сохранить заказ»
FATAL Критический сбой, приложение останавливается «Нет подключения к БД, выход»

Граница и различие терминов. Эта шестиуровневая шкала — соглашение прикладных библиотек, а не стандарт ОС. В системном логировании Linux (syslog, RFC 5424) уровней восемь и они другие: emerg, alert, crit, err, warning, notice, info, debug (приоритеты 0-7). В systemd/journald фильтр идет именно по этим приоритетам, а TRACE/FATAL там нет — их эмулируют через debug и crit. Поэтому «уровень ERROR» из кода приложения и «priority err» в journalctl — близкие, но не тождественные вещи.

Виды логов

По содержанию логи делят на несколько типовых видов. На одном сервере они лежат в разных файлах.

  • Системные логи — события ядра и служб ОС: загрузка, работа демонов, ошибки драйверов. В Linux это syslog/journald.
  • Логи приложения — то, что пишет ваша программа своим логером: бизнес-события, диагностика.
  • Логи доступа (access log) — обращения к сервису: кто, когда и какой ресурс запросил, с каким кодом ответа. Основа веб-аналитики.
  • Логи ошибок (error log) — отдельный поток сбоев сервиса, чтобы не искать ошибки среди сотен обычных запросов.
  • Логи аудита/безопасности — входы в систему, изменения прав, действия администратора (/var/log/auth.log).

Разбор строки access-лога полезно увидеть целиком. Вот запись nginx в combined-формате:

127.0.0.1 - - [21/Sep/2026:10:15:32 +0300] "GET /journal/ HTTP/1.1" 200 4523 "-" "Mozilla/5.0"

Разложу по полям: 127.0.0.1 — IP клиента; [21/Sep/2026:10:15:32 +0300] — время; "GET /journal/ HTTP/1.1" — строка запроса; 200 — код ответа; 4523 — размер тела в байтах; последнее поле — User-Agent. По коду 200 видно, что запрос успешен; будь там 404 или 500, строка сразу попала бы в разбор инцидента.

Где лежат логи в Linux

Исторически текстовые логи лежат в каталоге /var/log. Типичные файлы:

  • /var/log/syslog — общий системный лог (в Debian/Ubuntu);
  • /var/log/auth.log — аутентификация и sudo;
  • /var/log/nginx/access.log и /var/log/nginx/error.log — веб-сервер;
  • /var/log/dpkg.log — установка пакетов.

Посмотреть, что есть, можно так:

ls -lh /var/log

Ожидаемый вывод — список файлов с размерами; часть будет сжата в .gz (это работа ротации, о ней ниже).

Современные дистрибутивы с systemd дублируют многое в бинарный журнал journald, который читают командой journalctl. Показать последние сообщения службы nginx за 10 минут:

journalctl -u nginx.service --since "10 min ago"

Флаг -u фильтрует по конкретному сервису (unit), --since — по времени. Без прав root вы увидите только доступные вам записи; для системных журналов обычно нужен sudo.

Практика чтения: tail и grep

Два базовых инструмента закрывают большинство задач. Начну с минимального рабочего сценария: наблюдать за логом в реальном времени.

tail -f /var/log/nginx/access.log

tail -f (follow) печатает конец файла и дальше дописывает каждую новую строку, пока вы не нажмете Ctrl+C. Так удобно смотреть, что происходит прямо сейчас, во время воспроизведения проблемы.

Найти в логе только ошибки помогает grep:

grep -i error /var/log/nginx/error.log | tail -n 5

Здесь -i делает поиск без учета регистра, а tail -n 5 оставляет пять последних совпадений. Частая ошибка — искать по несуществующему пути:

grep -i error /var/log/nginx/eror.log

Результат — grep: /var/log/nginx/eror.log: No such file or directory. Причина — опечатка в имени файла. Исправление — проверить путь через ls /var/log/nginx/ и повторить с верным именем error.log.

Связку удобно комбинировать — следить за потоком и фильтровать на лету:

tail -f /var/log/nginx/access.log | grep " 500 "

Команда покажет только строки с кодом ответа 500 по мере их появления. Пробелы вокруг 500 не случайны: без них совпадет и 1500, и 500 в других полях.

Про рост файлов. Логи не растут бесконечно — за ротацию отвечает logrotate: он периодически переименовывает текущий файл, сжимает старые и удаляет самые древние по расписанию из /etc/logrotate.d/. Поэтому за вчерашними записями часто идут в файл access.log.1 или access.log.2.gz, а не в текущий access.log.

Выводы

  • Лог — это файл автоматических записей о событиях; логирование — процесс записи, лог-файл — его результат.
  • Логи нужны для четырех задач: отладка, мониторинг, аудит безопасности и аналитика.
  • Уровни (TRACE, DEBUG, INFO, WARN, ERROR, FATAL) — соглашение прикладных фреймворков; у системного syslog своя шкала из восьми приоритетов, это разные вещи.
  • Виды логов различают по содержанию: системные, приложения, доступа, ошибок, аудита.
  • В Linux логи лежат в /var/log и в журнале journald; читают их командами tail -f, grep и journalctl.

Где применяется / связь с практикой

Чтение логов — базовый навык для администратора, DevOps-инженера и backend-разработчика: без него не разобрать инцидент на проде и не отличить редкий сбой от массового. На практике к tail и grep быстро добавляются less, awk для полей access-лога и journalctl с фильтрами по приоритету и времени.

Освойте тему на практике

Если хочется освоить работу в Linux системно — от файловой системы и прав до служб, systemd и разбора логов — это дает курс Linux для начинающих. Посмотреть формат и попробовать вопросы преподавателю можно на открытых уроках Otus.

FAQ

Чем лог отличается от метрики?
Лог — это дискретное текстовое событие («пришел запрос X, ответ 500»). Метрика — числовой ряд во времени (нагрузка CPU, число запросов в секунду). Логи отвечают «что именно случилось», метрики — «сколько и как быстро»; в диагностике их используют вместе.

Можно ли открыть журнал journald обычным текстовым редактором?
Нет, journald хранит записи в бинарном формате, а не в .log-файле. Читать его нужно командой journalctl. При этом многие службы дополнительно пишут и обычные текстовые логи в /var/log.

Какой уровень логирования включать на проде?
Обычно INFO и выше, чтобы не переполнять диск отладочными строками. DEBUG/TRACE включают точечно и временно при разборе конкретной проблемы, а затем возвращают обратно.

OTUS Журнал
Скидка 5% 12-19 октября на курсы (popup)
Бесплатные открытые уроки (поп-ап)