мета-данные страницы
Это старая версия документа!
Глава 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), но остаются проблемы с доверием и проверкой подлинности источников