Практическая работа №4
Тема: Значение log-файлов для системного администратора
Анализ системных логов (журнальных файлов) очень важный навык любого системного администратора. Порой, только логи помогают понять в чем кроется проблема в работе системы.
Основное вместилище логов по умолчанию (и этого правила лучше придерживаться) — каталог /var/log/.
Как нетрудно понять из анализа содержимого каталога, большинство сервисов имеют журнальный файл с соответствующим названием.
- /var/log/messages — основной журнал событий. Включает в себя события всего системного ПО, этапы загрузки не связанные с ядром.
- /var/log/dmesg — журнал событий загрузки, включает в себя события ядра, инициализацию аппаратной части и подключения дополнительных устройств.
- /var/log/secure — события системы безопасности. Включает в себя журналы аутентификации. Если вы подозреваете, что к системе был осуществлен несанкционированный доступ, этот файл нужно проверить в первую очередь.
- /var/log/audit/audit.log — журнальный файл SELinux подсистемы.
- /var/log/yum.log — журнал установщика yum.
- /var/log/boot.log — журнал загрузки системы.
- /var/log/httpd/ — каталог с логами веб-сервера и т.д.
Просматривать логи можно как обычным текстовым редактором, так и при помощи специальных программ выводить нужные фрагменты.
# tail /var/log/messages
выведет последние 10 записей файла. Если нужно изменить число выводимых строк, указывается параметр -n <число>.
Кстати, отобразить последние записи и обновляться по мере появления новых записей можно с использованием ключа -f:
# tail -f /var/log/messages
Когда в файл поступит новое событие, оно тут же отобразится на экране в терминале. Выход из этого режиме — Ctrl+C.
В редких случаях, но всё-таки бывает, нужно вывести не последние, а первые записи. Для этого служит команда head, имеющая похожий синтаксис, что и tail.
Стоит сказать, что логи в системе могут порождаться как локальными процессами или ядром, так и приходит с других узлов. Приходят они соответственно через сокет /dev/log, либо на 514/udp порт/
Syslog и его конфигурация
Конфигурационный файл syslog.conf (rsyslog.conf) расположен в каталоге /etc/ и представляет собой список правил, по которым демон будет фильтровать приходящие сообщения и раскидывать их по местам.
Каждое правило представляет собой сочетание источника, приоритета и действия. Источник и приоритет разделены точкой. Кроме того, позволительно указывать в одном правиле несколько источников, отделяя их через запятую, а источники с уровнями — через точку с запятой.
Конфигурационный файл syslog.conf
Вот пример такого файла на моём CentOS 5.3
Получая сообщение через локальный сокет или по сети, демон syslogd проверяет совпадения источника и приоритета этого сообщения с описанными в конфиг файле. Причём, сообщение проверяется сразу по всем правилам последовательно, а не до первого совпадения, что позволяет выполнить различные действия над сообщением (фасовка в журналы и отправка по сети дальше).
Важно помнить, что сообщение считается подходящим, если его уровень равный или выше, чем уровень правила.
Возможно использование служебных конструкций типа * (любой источник или уровень), none (никакой уровень для конкретного источника),! (отрицание), = (только этот уровень).
Возьмём к примеру строку:
authpriv.* /var/log/secure
Если в приходящем сообщении в качестве источника будет authpriv.error (например), то это сообщение запишется в журнал /var/log/secure.
Уровни важности
emerg | Аварийная ситуация (PANIC) | |
alert | Тревожная ситуация, при которой потребуется вмешательство | |
crit | Критическая ситуация | |
err | Сообщение об ошибке (ERROR) | |
warning | Предупреждение (WARN) | |
notice | Информация о важном событии | |
info | Информационное сообщение | |
debug | Отладочное (подробное) сообщение |
Теперь, что касается источников сообщений:
kern | Сообщения ядра | |
user | Пользовательские программы | |
Подсистема пересылки почты | ||
daemon | Сообщения прочих сервисов | |
auth | Авторизация пользователя, изменение прав доступа | |
syslog | Сообщения от самой системы журналирования | |
lpr | Подсистема печати | |
news | Устарело. Сообщения от провайдера новостей | |
uucp | Устарело. Сообщения Unix-to-Unix Copy Protocol. | |
cron | Сообщения от планировщика cron | |
authpriv | Похоже на auth, только пишет в закрытый для прочих пользователей файл | |
ftp | Действия FTP-сервиса | |
ntp | Сообщения сервиса синхронизации времени | |
13,14 | log audit, alert | |
clock daemon | Сервис времени | |
16-23 | local0-local7 | Зарезервированные уровни. local7, например, для этапа загрузки системы. |
Ну и теперь, что касается действия.
- Отправка в обычный файл — указывается путь к файлу-источнику. Если необходимо отключить синхронизацию файла после дозаписи, перед путём ставится дефис. Отключенная синхронизация повышает производительность на нагруженных логах, но может потерять данные.
- Отправка в именованный канал, указывается символ пайпа | и путь к каналу.
- Отправка в терминал /dev/console.
- Отправка на удалённый сервер, указывается символ @ и имя-порт хоста.
Сейчас уже существуют и более гибкие продукты вроде syslog-ng (next generation), позволяющие сортировать по регулярным выражениям и многое другое.
Ротация логов
Ротация — периодическое обновление файлов журналов, при этом старые журналы сохраняются и сжимаются, а для записи событий создается новый файл. Именно этим и занимается программа logrotate, которая, как правило, запускается планировщиком.
Конфигурация содержится в файле /etc/logrotate.conf
Информацию по настройке этого сервиса можно найти так:
# man logrotate
Ротацию логов можно совершать в определённый период времени или когда файл достигнет определённого размера. Кроме того, можно указать произвольные лог-файлы не системных служб.