Product SiteDocumentation Site

Глава 49. Что происходит в системе

Человеку, отвечающему за работоспособность системы, очень важно всегда отчётливо представлять происходящие в ней события. Теоретически, никакое происшествие не должно ускользнуть от его внимания. Однако компьютерные системы настолько сложны, что отслеживать все события в них — выше человеческих возможностей. Для того чтобы довести поток служебной информации до разумного объёма, её надо просеять (выкинуть незначащие данные), классифицировать (разделить на несколько групп сообразно тематике) и журнализировать (сохранить в доступном виде для дальнейшего анализа).
В Linux эта задача решается с помощью механизма централизованной журнализации, который реализован системной службой syslogd. Все части системы (включая ядро и системные службы) рапортуют syslogd о происходящих в них событиях. В этот рапорт включается имя службы, категория (facility) и важность (priority) произошедшего события. Служба, сообразно настройкам, классифицирует все эти рапорты в несколько выходных потоков. Классификация и отсев данных всякого выходного потока происходит так: для каждой категории событий определяется наименьшая важность, которой событие должно обладать, чтобы попасть в этот выходной поток. Например, легко определить поток «ошибки», в который будут попадать только важные рапорты любых категорий или поток «безопасность», в который будут попадать все рапорты категории «безопасность» и те рапорты других категорий, важность которых заставляет подозревать угрозу безопасности системы (например, рапорт категории «daemon» об аварийном завершении работы системной службы).
Главное место хранения уже классифицированного 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.1.bz2 (предыдущая копия) до alert.5.bz2 (самая старая копия). Очередь alert в нашем примере состоит из пяти упакованных с помощью bzip2 файлов. В момент устаревания alert.4.bz2 переименовывается в alert.5.bz2 (старые данные теряются), копия с номером 3 превращается в четвёртую, вторая — в третью, первая во вторую. Наконец, сам журнал упаковывается и переименовывается в alert.1.bz2, а на его месте заводится новый — пустой. Таким образом, администратор всегда имеет доступ к свежему журналу и к нескольким его копиям за определённое время.
Некоторые файлы в /var/log/ — не текстовые, они являются неполноценными журналами и представляют собой «свалку событий» для служб авторизации и учёта. Текстовую информацию о входе пользователей в систему и выходе оттуда можно получить по команде last, а узнать о тех, кто в данный момент пользуется системой помогут команды w и who.
Множество важной информации может дать анализ загруженности системы — сведения о процессорном времени и потреблении оперативной памяти (ps, top, vmstat), сведения об использовании дискового пространства (du, df, lsof) и сведения о работе сетевых устройств (netstat).