Значение log-файлов для системного администратора

Опубликовано: 21 Июнь, 2015 в разделе: Обучение

Анализ системных логов (журнальных файлов) очень важный навык любого системного администратора. Порой, только логи помогают понять в чем кроется проблема в работе системы.

Основное вместилище логов по умолчанию (и этого правила лучше придерживаться) — каталог /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

Конфигурационный файл syslog.conf

Вот пример такого файла на моём CentOS 5.3

Получая сообщение через локальный сокет или по сети, демон syslogd проверяет совпадения источника и приоритета этого сообщения с описанными в конфиг файле. Причём, сообщение проверяется сразу по всем правилам последовательно, а не до первого совпадения, что позволяет выполнить различные действия над сообщением (фасовка в журналы и отправка по сети дальше).

Важно помнить, что сообщение считается подходящим, если его уровень равный или выше, чем уровень правила.

Возможно использование служебных конструкций типа * (любой источник или уровень), none (никакой уровень для конкретного источника), ! (отрицание), = (только этот уровень).

Возьмём к примеру строку:

authpriv.*  /var/log/secure

Если в приходящем сообщении в качестве источника будет authpriv.error (например), то это сообщение запишется в журнал /var/log/secure.

Уровни важности

0 emerg Аварийная ситуация (PANIC)
1 alert Тревожная ситуация, при которой потребуется вмешательство
2 crit Критическая ситуация
3 err Сообщение об ошибке (ERROR)
4 warning Предупреждение (WARN)
5 notice Информация о важном событии
6 info Информационное сообщение
7 debug Отладочное (подробное) сообщение

Теперь, что касается источников сообщений:

0 kern Сообщения ядра
1 user Пользовательские программы
2 mail Подсистема пересылки почты
3 daemon Сообщения прочих сервисов
4 auth Авторизация пользователя, изменение прав доступа
5 syslog Сообщения от самой системы журналирования
6 lpr Подсистема печати
7 news Устарело. Сообщения от провайдера новостей
8 uucp Устарело. Сообщения Unix-to-Unix Copy Protocol.
9 cron Сообщения от планировщика cron
10 authpriv Похоже на auth, только пишет в закрытый для прочих пользователей файл
11 ftp Действия FTP-сервиса
12 ntp Сообщения сервиса синхронизации времени
13,14 log audit, alert
15 clock daemon Сервис времени
16-23 local0-local7 Зарезервированные уровни. local7, например, для этапа загрузки системы.

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

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

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

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

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

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

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


# man logrotate

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

2 комментария

  1. Сергей:

    «1.Отправка в обычный файл — указывается путь к файлу-источнику.»

    ну какой, блин, «файл-источник» в syslog ?
    «файл-получатель» ещё куда ни шло

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.