Сведения о документе

Что происходит в системе?

Георгий Курячий, Дмитрий Левин


Человеку, отвечающему за работоспособность системы, очень важно всегда отчётливо представлять, что с нею творится. Теоретически, никакое происшествие не должно ускользнуть от его внимания. Однако компьютерные системы столь сложны, что отслеживать все события в них — выше человеческих возможностей. Для того, чтобы довести поток служебной информации до разумного объёма, её надо просеять (выкинуть незначащие данные), классифицировать (разделить на несколько групп сообразно тематике) и журнализировать (сохранить в доступном виде для дальнейшего анализа).

В Linux эта задача решается с помощью механизма централизованной журнализации, который реализован демоном (системной службой) syslogd. Все части системы (включая ядро и системные службы) рапортуют syslogd о происходящих в них событиях. В этот рапорт включается имя службы, категория (facility) и важность (priority) произошедшего события. Демон, сообразно настройкам, классифицирует все эти рапорты в несколько выходных потоков. Классификация и отсев данных всякого выходного потока происходит так: для каждой категории событий определяется наименьшая важность, которой событие должно обладать, чтобы попасть в этот выходной поток. Например, легко определить поток «ошибки», в который будут попадать только важные рапорты любых категорий, или поток «безопасность», в который будут попадать все рапорты категории «безопасность» и те рапорты других категорий, важность которых заставляет подозревать угрозу безопасности системы (например, рапорт категории «демон» об аварийном завершении работы системной службы).

Главное место хранения уже классифицированного syslogd потока событий — системный журнал (т. н. log-файл). Системный журнал — текстовый файл, содержащий рапорты одного потока. Обычно syslogd хранит системные журналы в каталоге /var/log и его подкаталогах. Именно в системные журналы, прежде всего в /var/log/messages, /var/log/maillog и /var/log/dmesg, необходимо заглядывать администратору, который хочет знать, что происходит в системе. Поток рапортов о важных событиях syslogd направляет и на системную консоль — выделенное терминальное устройство. В ALT Linux роль системной консоли выполняет 12-я виртуальная консоль, доступная по сочетанию клавиш Alt+F12 или Alt+Ctrl+F12. Стоит заметить, что некоторые службы (например, WWW-сервер apache) самостоятельно, в обход syslogd, ведут журнализацию своих событий, поэтому информацию о количестве и местоположении их журналов можно почерпнуть из их файлов настроек (обычно, тем не менее, журналы хранятся в /var/log).

Новые рапорты, поступающие в системный журнал, наиболее актуальны, а предыдущие, по мере их устаревания, эту актуальность утрачивают. Если самые старые данные в журнале не удалять, файловая система, рано или поздно, окажется переполненной. В Linux организован механизм устаревания журналов, которым занимается служба logrotate. Запускаясь раз в день, logrotate проверяет, какие из файлов следует признать устаревшими. Файл объявляется устаревшим раз в определённый промежуток времени (например, раз в неделю), или если он достиг определённого размера.

Процедура устаревания такова. Для каждого журнала, как, например, для /var/log/syslog/alert, logrotate держит в том же каталоге очередь устаревших копий — файлы с именами от alert.0.bz2 (предыдущая копия) до alert.4.bz2 (самая старая копия). Очередь alert в нашем примере состоит из пяти упакованных с помощью bzip2 файлов. В момент устаревания alert.3.bz2 переименовывается в alert.4.bz2 (старые данные теряются), копия с номером 2 превращается в третью, первая — во вторую, нулевая в первую. Наконец, сам журнал упаковывается и переименовывается в alert.0.bz2, а на его месте заводится новый — пустой. Таким образом, администратор всегда имеет доступ к свежему журналу и к нескольким его копиям за определённое время.

Некоторые файлы в /var/log — нетекстовые, они не являются полноценными журналами, а представляются собой «свалку событий» для служб авторизации и учёта. Текстовую информацию о входе пользователей в систему и выходе оттуда можно получить по команде last, а узнать о тех, кто в данный момент пользуется системой, помогут команды w и who.

Множество важной информации может дать анализ загруженности системы — в плане процессорного времени и потребления оперативной памяти (ps, top, vmstat), в плане использования дискового пространства (du, df, lsof) и в плане работы сетевых устройств (netstat).

Сведения о документе