Gymterview
middle

Как устроено логирование в Linux?

В Linux несколько подсистем логирования дополняют друг друга: systemd-journald собирает структурированные логи в бинарном формате, а rsyslog пишет текстовые файлы в /var/log/.

systemd-journald (основная система в Ubuntu 24.04)

Собирает логи от:

  • Сервисов, управляемых systemd
  • Ядра (kernel messages)
  • Syslog-сообщений
  • stdout/stderr процессов

Логи хранятся в бинарном формате в /var/log/journal/. Просмотр — через journalctl.

rsyslog (syslog)

Традиционный демон логирования. Конфигурация: /etc/rsyslog.conf и /etc/rsyslog.d/. Записывает текстовые файлы в /var/log/.

Основные лог-файлы в /var/log/

Файл Содержимое
/var/log/syslog Основной системный лог (в Ubuntu)
/var/log/auth.log Аутентификация: логины, sudo, ssh
/var/log/kern.log Сообщения ядра
/var/log/dpkg.log Операции с пакетами (dpkg/apt)
/var/log/nginx/ Логи Nginx (access.log, error.log)

logrotate — ротация логов

Предотвращает бесконтрольный рост лог-файлов. Конфигурация: /etc/logrotate.conf и /etc/logrotate.d/.

Пример конфигурации logrotate
# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    daily           # Ротация ежедневно
    rotate 14       # Хранить 14 файлов
    compress        # Сжимать старые логи
    delaycompress   # Не сжимать текущий файл
    missingok       # Не выдавать ошибку, если файл отсутствует
    notifempty      # Не ротировать пустые файлы
    create 0640 appuser appuser  # Создать новый файл с правами
    postrotate
        systemctl reload myapp  # Действие после ротации
    endscript
}

Полезные команды для работы с логами

Пример
# Последние записи syslog
tail -f /var/log/syslog

# Поиск ошибок в логах
grep -i error /var/log/syslog

# Логи сервиса через journalctl
journalctl -u myapp.service -f

# Логи ядра
dmesg -T    # С человекочитаемыми временными метками

# Объём логов journald
journalctl --disk-usage

# Очистка старых логов journald
sudo journalctl --vacuum-time=7d     # Удалить старше 7 дней
sudo journalctl --vacuum-size=500M   # Ограничить объём 500 МБ

На собеседовании: интервьюер хочет убедиться, что вы умеете находить логи на сервере. Ключевое — знать /var/log/syslog и journalctl -u <service> -f. Частая ошибка — не упомянуть logrotate, из-за отсутствия которого логи могут заполнить весь диск.