мета-данные страницы
  •  

Это старая версия документа!


Глава 7: Настройка системы: журналирование, системное время, пакетные задачи и пользователи

7.1 Ведение системного журнала

Системные программы записывают логи через syslogd (традиционный) или journald (современный, поставляется с systemd). Сообщение содержит: имя процесса, PID, метку времени, facility и severity.

Компонент Назначение
syslogd Традиционная служба логирования
journald Современная служба (systemd)
/var/log Директория с логами
/var/log/journal Двоичные логи journald

7.1.1 Проверка настроек журнала

Определить тип логирования в системе:

  • journald: команда `journalctl` (работает, если journald активна)
  • rsyslogd: процесс в списке или `/etc/rsyslog.conf`
  • syslog-ng: директория `/etc/syslog-ng`

Дополнительные логи: `/var/log/wtmp`, `/var/log/lastlog` (утилиты `last`, `lastlog`)

7.1.2 Поиск и мониторинг журналов

Фильтрация по времени

journalctl -S -4h              # последние 4 часа
journalctl -S 06:00:00         # с 6:00 сегодня
journalctl -S 2020-01-14       # с определённой даты
journalctl -S '2020-01-14 14:30:00'
journalctl -U <время>          # до указанного времени

Фильтрация по юнитам

journalctl -u cron.service     # логи конкретного сервиса
journalctl -F _SYSTEMD_UNIT    # все юниты в журнале

Поиск полей

journalctl -N                  # список всех полей
journalctl _PID=8792           # поиск по PID

Примечание: полный доступ требует прав суперпользователя или членства в группах `adm` или `systemd-journal`.

Фильтрация по тексту

journalctl -g 'kernel.*memory'  # поиск по regex

Часто важная информация находится рядом по времени — используйте метку времени совпадений и `journalctl -S`.

Примечание: параметр `-g` требует специальной библиотеки (есть не во всех дистрибутивах).

Фильтрация по загрузке системы

journalctl -b              # текущая загрузка
journalctl -b -1           # предыдущая загрузка
journalctl --list-boots    # список всех загрузок с ID и временем
journalctl -k              # только сообщения ядра
journalctl -r -b -1        # проверка корректного выключения

Фильтрация по важности

journalctl -p 3            # от уровня 0 (важное) до 3
journalctl -p 2..3         # уровни 2 и 3

Уровни: 0 (emergency) → 7 (debug). Фильтрация редко бывает полезной.

Простой мониторинг журнала

journalctl -f              # следить за новыми сообщениями (как tail -f)

Можно комбинировать с другими параметрами фильтрации (`-u`, `-S`, `-p` и т.д.).

7.1.3 Ротация файлов журнала

Логротация — удаление старых сообщений с помощью logrotate. Вместо удаления из файла старые логи разделяются на блоки:

  • `auth.log` (новые)
  • `auth.log.1`, `auth.log.2`, `auth.log.3` (старые)

Процесс ротации:

1. Удалить `auth.log.3`
2. `auth.log.2` → `auth.log.3`
3. `auth.log.1` → `auth.log.2`
4. `auth.log` → `auth.log.1`

Варианты в разных дистрибутивах:

  • Ubuntu: сжатие (`.gz`) при переносе с позиции 1 на 2
  • Другие: суффикс даты (`-20200529`)

Конфликты ротации: если logrotate ротирует файл, пока демон его пишет — сообщение запишется в переименованный файл благодаря тому, как Linux работает с открытыми файлами.

7.1.4 Обслуживание журналов journald

Логи в `/var/log/journal` не требуют ротации — journald самостоятельно удаляет старые сообщения.

Критерии удаления:

  • Свободное место на ФС
  • Процент от размера ФС
  • Максимальный размер журнала
  • Максимальный возраст сообщения

Настройка: страница `journald.conf(5)`.

7.1.5 Детали системного журналирования

История и архитектура

syslog развился в 1980-х годах с sendmail (RFC 3164, затем RFC 5424). Классическая архитектура «клиент — сервер».

Механизм: syslogd слушает Unix-сокет `/dev/log` и сетевые сокеты. Позволяет централизовать логи всей сети на одном сервере.

Объекты и важность

Параметр Назначение
Facility (объект) Категория службы (ядро, почта, принтер)
Severity (важность) Уровни 0–7 (emerg до debug)
Priority (приоритет) Комбинация facility + severity

Уровни: 0 (emerg) / 1 (alert) / 2 (crit) / 3 (err) / 4 (warning) / 5 (notice) / 6 (info) / 7 (debug)

Ограничения: объекты жёстко определены (нет новых), но есть слоты `local0–local7` для пользовательских служб.

RFC 5424 поддерживает структурированные данные — пары ключ-значение для произвольных полей.

syslog vs journald

syslog остаётся нужен:

  • Чёткое объединение логов на нескольких машинах
  • rsyslogd модульна, может писать в разные форматы и БД

journald:

  • Фокус на логирование одной машины в едином формате
  • Может передавать логи в другие регистраторы
  • systemd собирает выход серверов → journald

Тренды журналирования

Журналирование эволюционирует:

  • Централизованное хранение → интернет-сервисы и БД
  • Назначение: не только для чтения админом, но и для поиска, анализа, интеграции с приложениями
  • Безопасность: добавлена шифрование, аутентификация (RFC 5424), но остаются проблемы с доверием и проверкой подлинности источников