Глава 69. Что происходит в системе
Человеку, отвечающему за работоспособность системы, очень важно всегда отчётливо представлять происходящие в ней события. Теоретически, никакое происшествие не должно ускользнуть от его внимания. Однако компьютерные системы настолько сложны, что отслеживать все события в них — выше человеческих возможностей. Для того чтобы довести поток служебной информации до разумного объёма, её надо просеять (выкинуть незначащие данные), классифицировать (разделить на несколько групп сообразно тематике) и журнализировать (сохранить в доступном виде для дальнейшего анализа).
В ОС Альт Сервер функция записи информации о системных событиях и событиях безопасности обеспечивается с помощью системной службы systemd-journald. Она создает и поддерживает структурированные, индексированные журналы, на основе регистрируемой информации, полученной от ядра, от пользовательских процессов через вызов Libc syslog, от потоков STDOUT/STDERR системных служб через собственный API. Журналы данного инструмента хранятся в бинарном виде в /var/log/journal
, что исключает возможность просмотра содержимого данных файлов стандартными утилитами обработки текстовых данных. Для просмотра логов используется утилита journalctl.
Можно запускать
journalctl
с разными ключами:
Можно посмотреть сообщения определенного процесса:
Для ознакомления с прочими возможностями читайте руководство по journalctl. Для этого используйте команду man journalctl
.
Стоит заметить, что некоторые службы (например, веб-сервер apache) самостоятельно ведут журнализацию своих событий, поэтому информацию о количестве и местоположении их журналов можно почерпнуть из их файлов настроек (обычно журналы хранятся в /var/log/
).
Файл настройки journald находится в /etc/systemd/journald.conf
. Справку по этому файлу можно получить, выполнив команду man journald.conf
.
Новые рапорты, поступающие в системный журнал, наиболее актуальны, а предыдущие, по мере их устаревания, эту актуальность утрачивают. Если самые старые данные в журнале не удалять, файловая система рано или поздно окажется переполненной. Узнать объем имеющихся на текущий момент логов можно с помощью команды:
# journalctl
--disk-usage
Ротация журналов:
для удаления старых файлов журналов с помощью указания размера используется опция
--vacuum-size
. Например, удалить журналы, оставив только последние 200 Мб:
# journalctl
--vacuum-size=200M
для удаления старых записей по времени используется опция
--vacuum-time
. Например, удалить журналы, оставив только журналы за последний месяц:
# journalctl
--vacuum-time=1months
Следует обратить внимание, что запуск --vacuum-size=
оказывает лишь косвенное влияние на вывод, показанный --disk-usage
, поскольку последний включает активные файлы журнала, в то время как операция очистки работает только с архивными файлами журнала. Аналогично, --vacuum-time=
может фактически не уменьшить количество файлов журнала ниже указанного числа, так как не удалит активные файлы журнала.
Настройки ротации файлов журнала можно прописать в конфигурационном файле
/etc/systemd/journald.conf
, например:
установить ограничения на размер хранимых файлов журнала:
SystemMaxUse=1G
ограничить размер отдельных файлов журнала:
SystemMaxFileSize=200M
установить максимальное время хранения записей в одном файле журнала перед ротацией в следующий:
MaxFileSec=20day
ограничить время хранения файлов журнала (удалять файлы журнала, содержащие записи старше указанного промежутка времени):
MaxRetentionSec=1months
После внесения изменений в файл
/etc/systemd/journald.conf
необходимо перезапустить службу
systemd-journald:
# systemctl restart systemd-journald
Некоторые файлы в /var/log/
— не текстовые, они являются неполноценными журналами и представляют собой «свалку событий» для служб авторизации и учёта. Текстовую информацию о входе пользователей в систему и выходе оттуда можно получить по команде last
, а узнать о тех, кто в данный момент пользуется системой, помогут команды w
и who
.
Множество важной информации может дать анализ загруженности системы — сведения о процессорном времени и потреблении оперативной памяти (ps
, top
, vmstat
), сведения об использовании дискового пространства (du
, df
) и сведения о работе сетевых устройств (netstat
).