Какие бывают логи: от системных до прикладных
Друзья, мы уже столько всего написали про логи, что пора остановиться и задаться фундаментальным вопросом: а какие вообще бывают логи? Чем отличается лог ядра от лога веб-сервера? Где искать проблемы с железом, а где — ошибки в коде?
Сегодня я разложу всё по полочкам. Это будет такая "типология логов" — от самого низа (железо) до самого верха (ваше приложение). Поехали.
Зачем вообще классифицировать логи
Представьте, что вы заходите в комнату, где на полу разбросаны тысячи бумажек. На одних написано "температура процессора 85°C", на других — "пользователь Иванов вошёл в систему", на третьих — "не удалось открыть файл config.json".
Если вы не понимаете, какие бумажки откуда взялись, вы никогда не восстановите картину. А если знаете, что "температура" — от демона терморегуляции, "вход пользователя" — от PAM, а "ошибка файла" — от вашего приложения, вы сразу понимаете, куда копать.
Поэтому давайте классифицировать.
1. Аппаратные логи (Hardware Logs)
Самый низкий уровень. Здесь железо сообщает о своём состоянии.
Что сюда входит
- Логи SMART жёстких дисков и SSD — атрибуты: количество перераспределённых секторов, время работы, температура, ошибки чтения .
- Логи температуры и напряжения — от процессора, материнской платы, блока питания (обычно через IPMI или ACPI)
- Логи встроенных контроллеров — например, BMC (Baseboard Management Controller) в серверах
- Логи RAID-контроллеров — состояние массива, деградация дисков
Где искать
В Linux: ```bash
SMART-атрибуты дисков
smartctl -a /dev/sda
Логи IPMI (если есть)
ipmitool sel list
Информация от ядра о железе
dmesg | grep -i "temperature\|error" ```
В Windows: - Просмотр событий → Журналы приложений и служб → Hardware Events
Типичные сообщения
[Hardware] CPU temperature exceeded threshold (85°C)
[Hardware] Disk reallocated sector count: 15
[Hardware] Power supply 1 failed
Аппаратные логи — это первая ласточка надвигающейся беды. Диск сыплется, блок питания дымит, процессор перегревается. Если не следить, железо умрёт внезапно.
2. Логи ядра (Kernel Logs)
Выше железа — ядро операционной системы. Оно управляет памятью, процессами, драйверами, файловыми системами.
Что сюда входит
- События драйверов — подключение/отключение устройств, ошибки инициализации
- Проблемы с памятью — OOM (Out Of Memory) killer, сбои страниц
- Файловые системы — ошибки монтирования, проблемы с суперблоком, переполнение inode
- Сетевой стек — проблемы с сетевыми картами, маршрутизацией
- Безопасность — SELinux/AppArmor блокировки
Где искать
Linux: ```bash
Просмотр кольцевого буфера ядра
dmesg
Логи ядра также попадают в /var/log/kern.log
tail -f /var/log/kern.log
Через journalctl
journalctl -k ```
Windows: - Просмотр событий → Журналы Windows → Система (с фильтром по источнику "kernel")
Типичные сообщения
kernel: usb 1-1: new high-speed USB device number 4
kernel: EXT4-fs error (device sda1): ext4_lookup: deleted inode referenced
kernel: Out of memory: Kill process 1234 (httpd) score 456 or sacrifice child
Логи ядра — это пульс системы. Если здесь появились ошибки, значит, проблемы глубже, чем приложение. Иногда ядро может "молчать" даже при умирающем железе — но если железо совсем плохо, ядро начнёт сыпать ошибками ввода-вывода.
3. Системные логи (System Logs)
Следующий уровень — службы и демоны, которые работают в пространстве пользователя, но обеспечивают работу системы в целом.
Что сюда входит
- Системный журнал (syslog) — обощение всех логов в одном месте (традиционно)
- systemd journal — современная замена syslog в Linux
- Логи инициализации — загрузка системы, запуск/остановка сервисов
- Логи авторизации — входы/выходы пользователей, sudo, ssh
- Логи cron/at — запланированные задачи
- Логи сетевых служб — DHCP, DNS, NTP
Где искать
Linux (традиционный syslog):
bash
/var/log/syslog # основной лог
/var/log/messages # альтернативный системный лог
/var/log/auth.log # авторизация
/var/log/cron.log # планировщик
Linux (systemd):
bash
journalctl # все логи
journalctl -u ssh.service # логи конкретного сервиса
journalctl --since "2026-03-03 10:00" # за период
Windows: - Просмотр событий → Журналы Windows → Система, Безопасность
Типичные сообщения
sshd[1234]: Accepted password for root from 192.168.1.100 port 54321
cron[5678]: (root) CMD (cd / && run-parts --report /etc/cron.hourly)
systemd[1]: Stopping MySQL Community Server...
sudo[9012]: user : TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/bin/bash
Системные логи — это первое, куда вы смотрите при подозрениях на проблемы с авторизацией, запуском сервисов или планировщиком.
4. Сервисные логи (Service Logs)
Отдельные сервисы — веб-серверы, базы данных, почтовые серверы — ведут свои собственные логи. Обычно в своих форматах и своих файлах.
Что сюда входит
- Веб-серверы (nginx, Apache, IIS) — логи доступа (access log) и ошибок (error log)
- Базы данных (MySQL, PostgreSQL, MongoDB) — медленные запросы, ошибки подключения, логи репликации
- Почтовые серверы (postfix, sendmail) — логи отправки/доставки
- DNS-серверы (bind, unbound) — запросы и ошибки
- Прокси и балансировщики (haproxy, squid)
Где искать
По традиции Unix — в /var/log/ в подкаталогах или файлах с именем сервиса:
bash
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/mysql/error.log
/var/log/postgresql/postgresql-13-main.log
/var/log/maillog
/var/log/httpd/
В Windows — обычно в собственных каталогах программы или в Event Log с определёнными источниками.
Типичные сообщения
Nginx access.log:
192.168.1.100 - - [03/Mar/2026:14:23:45 +0300] "GET /index.html HTTP/1.1" 200 1234
Nginx error.log:
2026/03/03 14:23:46 [error] 1234#1234: *5678 connect() failed (111: Connection refused)
MySQL error.log:
2026-03-03T14:23:47.123456Z 3 [ERROR] InnoDB: Unable to lock ./ibdata1, error: 11
PostgreSQL log:
2026-03-03 14:23:48 UTC [12345] LOG: checkpoint starting: time
2026-03-03 14:23:49 UTC [12346] ERROR: duplicate key value violates unique constraint "users_pkey"
Сервисные логи — ваше основное оружие при отладке приложений, которые зависят от этих сервисов. Если сайт тормозит — смотрите логи базы данных. Если не грузятся картинки — логи веб-сервера.
5. Прикладные логи (Application Logs)
Самый верхний уровень — ваше собственное приложение. Здесь вы пишете то, что считаете нужным.
Что сюда входит
- Бизнес-события — пользователь зарегистрировался, купил товар, отправил сообщение
- Ошибки бизнес-логики — недостаточно средств, товар закончился, неверный формат
- Технические ошибки — не удалось подключиться к API, таймаут, невалидные данные
- Отладочная информация (debug) — входы в функции, промежуточные значения
- Метрики производительности — время выполнения запросов
Где искать
Куда скажете. Может быть:
- В файлах (обычно logs/ в директории приложения)
- В стандартном выводе (stdout/stderr), который потом собирает systemd или Docker
- В централизованной системе сбора логов
- В базе данных (для бизнес-событий)
Типичные сообщения
Плохо (бесполезно):
Error: something went wrong
Хорошо (полезно):
2026-03-03 14:23:45 ERROR [payment-service] Failed to charge user 12345: insufficient funds (balance=10.50, amount=25.00)
Отлично (структурированно):
json
{
"timestamp": "2026-03-03T14:23:45Z",
"level": "ERROR",
"service": "payment-service",
"user_id": 12345,
"error": "insufficient_funds",
"balance": 10.50,
"amount": 25.00,
"request_id": "req-abc-123"
}
Важное замечание про логи приложений
Вы сами решаете, что писать. И от этого зависит, сможете ли вы потом найти ошибку.
Золотое правило: пишите контекст. "Ошибка подключения к базе данных" — плохо. "Ошибка подключения к базе данных по адресу 192.168.1.100:3306, таймаут 5 секунд, попытка 3 из 5" — хорошо.
6. Логи безопасности (Security Logs)
Отдельная категория, которая может собираться из разных источников, но имеет свою специфику.
Что сюда входит
- События аутентификации — успешные и неуспешные попытки входа
- Изменения прав доступа — смена владельцев файлов, прав sudo
- События межсетевого экрана — разрешённые и заблокированные соединения
- Детекшены IDS/IPS — обнаружения атак
- Аудит доступа к конфиденциальным данным
Где искать
- В Linux:
/var/log/auth.log,/var/log/secure, auditd логи - В Windows: Журналы Windows → Безопасность
- В специализированных SIEM-системах
Типичные сообщения
sshd[1234]: Failed password for root from 192.168.1.100 port 54321 ssh2
sudo[5678]: user : 3 incorrect password attempts ; TTY=pts/0 ; PWD=/home/user ; USER=root
auditd[9012]: type=USER_LOGIN msg=audit(1648993425.123:456): pid=1234 uid=0 auid=1000 ses=1
Логи безопасности нужно хранить особенно тщательно и защищать от изменений. Они — улики при расследовании инцидентов.
7. Логи доступа (Access Logs)
Частный случай, но важный. Это записи о том, кто, когда и к чему обращался.
Что сюда входит
- Веб-логи — каждый HTTP-запрос
- FTP-логи — загрузка/скачивание файлов
- Логи файловых серверов — кто открывал какие файлы
- Логи печати — кто и что распечатал
Где искать
Обычно в /var/log/ с соответствующими именами, либо в специализированных системах.
Типичные сообщения
192.168.1.100 - - [03/Mar/2026:14:23:45 +0300] "GET /wp-admin HTTP/1.1" 404 1234
Логи доступа нужны для обнаружения атак (например, сканирования уязвимостей) и для расследования утечек.
8. Логи аудита (Audit Logs)
Отдельная категория, часто требуемая регуляторами. Отличается тем, что логи нельзя изменить или удалить.
Что сюда входит
- Все действия администраторов (кто, когда, что сделал)
- Изменения конфигурации
- Доступ к персональным данным
- Финансовые транзакции
Где искать
В специально защищённых хранилищах, часто с WORM-принципом (write once, read many) — записал и нельзя стереть.
Сравнительная таблица
| Тип логов | Что логирует | Где искать | Типичные проблемы | |-----------|--------------|------------|-------------------| | Аппаратные | Железо: диски, температура, БП | SMART, IPMI, dmesg | Перегрев, умирающие диски | | Ядра | Драйверы, память, ФС, сеть | dmesg, kern.log | Ошибки драйверов, OOM | | Системные | Сервисы ОС, авторизация, cron | syslog, journalctl | Проблемы с запуском, взломы | | Сервисные | Веб-серверы, БД, почта | /var/log/имя_сервиса | 500-е ошибки, медленные запросы | | Прикладные | Ваше приложение | Куда настроили | Баги, бизнес-ошибки | | Безопасности | Входы, sudo, firewall | auth.log, Windows Security | Атаки, подбор паролей | | Доступа | HTTP, FTP, файлы | access.log | Сканирование, утечки | | Аудита | Действия админов, изменения | Защищённое хранилище | Compliance, расследования |
Как не запутаться в этом зоопарке
Совет 1: Централизуйте
Когда у вас 10 серверов, бегать по файлам бессмысленно. Ставьте систему сбора логов (ELK, Graylog, Loki) и свозите всё туда.
Совет 2: Добавляйте теги
В централизованной системе помечайте, откуда лог:
- host: server1
- type: kernel
- service: nginx
- environment: prod
Тогда сможете фильтровать: "покажи мне все kernel-логи с server1 за последний час".
Совет 3: Знайте, где чьё
Запомните (или запишите) соответствие: проблема с сетью — смотрим логи ядра и сетевых сервисов; сайт тормозит — логи веб-сервера и базы данных; кто-то ломится — логи безопасности.
Совет 4: Не смешивайте
Не пишите логи своего приложения в системный syslog без префиксов — потом не отделите. Или используйте facility (в syslog) или свой тег.
Коротко: шпаргалка
| Если проблема... | Смотрим в... | |-----------------|--------------| | Комплекс не включается | Аппаратные логи (BMC, IPMI) | | Синий экран/ядро падает | Логи ядра (dmesg, kern.log) | | Сервис не стартует | Системные логи (journalctl -u сервис) | | Сайт не отвечает | Сервисные логи (nginx error.log) | | База данных тормозит | Сервисные логи (mysql slow.log) | | Кто-то взламывает | Логи безопасности (auth.log) | | Приложение выдаёт ошибку | Прикладные логи (ваш app.log) | | Нарушили compliance | Логи аудита |
Вместо заключения
Логи — это слоёный пирог. Внизу железо, выше ядро, ещё выше сервисы, и на самом верху — ваше приложение. Когда случается проблема, она редко ограничивается одним слоем. Ошибка в приложении может быть вызвана проблемой с диском, которую мы увидим только в аппаратных логах.
Поэтому не зацикливайтесь на одном типе. Учитесь смотреть на систему целиком, связывать события из разных источников. Тогда логи станут не просто файлами, а настоящей картиной мира вашего проекта.
А если вы только начинаете — освойте сначала системные логи и логи вашего приложения. Это 90% повседневных задач. Остальное придёт с опытом.