Лог — это файл, в который программа или система автоматически записывает события своей работы в хронологическом порядке: когда, что произошло и с каким результатом. Логирование (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 включают точечно и временно при разборе конкретной проблемы, а затем возвращают обратно.



