Ну и теперь, что касается действия.

Практическая работа №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 Пользовательские программы
mail Подсистема пересылки почты
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, например, для этапа загрузки системы.

Ну и теперь, что касается действия.

  1. Отправка в обычный файл — указывается путь к файлу-источнику. Если необходимо отключить синхронизацию файла после дозаписи, перед путём ставится дефис. Отключенная синхронизация повышает производительность на нагруженных логах, но может потерять данные.
  2. Отправка в именованный канал, указывается символ пайпа | и путь к каналу.
  3. Отправка в терминал /dev/console.
  4. Отправка на удалённый сервер, указывается символ @ и имя-порт хоста.

Сейчас уже существуют и более гибкие продукты вроде syslog-ng (next generation), позволяющие сортировать по регулярным выражениям и многое другое.

Ротация логов

Ротация — периодическое обновление файлов журналов, при этом старые журналы сохраняются и сжимаются, а для записи событий создается новый файл. Именно этим и занимается программа logrotate, которая, как правило, запускается планировщиком.

Конфигурация содержится в файле /etc/logrotate.conf

Информацию по настройке этого сервиса можно найти так:


# man logrotate

Ротацию логов можно совершать в определённый период времени или когда файл достигнет определённого размера. Кроме того, можно указать произвольные лог-файлы не системных служб.

Наши рекомендации