ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Руководство для начинающих по системным журналам в Linux

Руководство для начинающих по системным журналам в Linux

Старые добрые системные журналы по-прежнему актуальны в эпоху системных журналов. Изучите основы ведения журнала с помощью syslogd в этом руководстве.

Десятилетиями журналирование в Linux управлялось демоном syslogd.

Syslogd будет собирать сообщения журнала, которые системные процессы и приложения отправляли на псевдоустройство /dev/log. Затем он будет направлять сообщения в соответствующие текстовые файлы журнала в каталоге /var/log/.

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

Руководство для начинающих по системным журналам в Linux

 

Вслед за неумолимой, завоевавшей мир силой systemd журналирование Linux теперь также обрабатывается journald. Мы говорим еще и потому, что syslogd никуда не делся, и вы по-прежнему можете найти большинство его традиционных лог-файлов в /var/log/. Но вы должны знать, что в городе появился новый шериф, имя которого (в командной строке) — journalctl.

Но эта статья не о журнале. Основное внимание здесь уделяется systemd, так что давайте углубимся в него.

 

Ведение журнала с помощью syslogd

Все журналы, созданные событиями в системе syslogd, добавляются в файл /var/log/syslog. Но, в зависимости от их идентифицирующих характеристик, они также могут быть отправлены в один или несколько других файлов в том же каталоге.

В syslogd способ распространения сообщений определяется содержимым файла 50-default.conf, находящегося в каталоге /etc/rsyslog.d/.

В этом примере 50-default.conf показано, как сообщения журнала, помеченные как относящиеся к cron, будут записываться в файл cron.log. В этом случае звездочка (*) указывает syslogd отправлять записи с любым уровнем приоритета (в отличие от одного уровня, такого как emerg или err):

cron.*     /var/log/cron.log

 

Работа с лог-файлами syslogd не требует специальных инструментов, таких как journalctl. Но если вы хотите в этом преуспеть, вам необходимо знать, какая информация хранится в каждом из стандартных файлов журналов.

В таблице ниже перечислены наиболее распространенные файлы журналов syslogd и их назначение.

Имя файла Цель
auth.log Системная аутентификация и события безопасности
boot.log Запись событий, связанных с загрузкой
dmesg События кольцевого буфера ядра, связанные с драйверами устройств
dpkg.log События управления пакетами программного обеспечения
kern.log События ядра Linux
syslog Сбор всех журналов
wtmp Отслеживает сеансы пользователей (доступ через команды who и last)

 

Кроме того, отдельные приложения иногда записывают в свои собственные файлы журналов. Вы также часто будете видеть целые каталоги, такие как /var/log/apache2/ или /var/log/mysql/, созданные для получения данных приложения.

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

Уровень Описание
debug Полезно для отладки
info Информационный
notice Нормальные условия
warn Условия, требующие предупреждений
err Условия ошибки
crit Критические условия
alert Требуются немедленные действия
emerg Система непригодна для использования

Управление файлами журналов с помощью sysglogd

По умолчанию syslogd обрабатывает ротацию, сжатие и удаление журналов за кулисами без какой-либо помощи с вашей стороны. Но вы должны знать, как это делается, если у вас когда-нибудь появятся бревна, нуждающиеся в специальной обработке.

Какой особой обработки может потребовать простое бревно? Что ж, предположим, что ваша компания должна соответствовать правилам отчетности о транзакциях, связанным с нормативными или отраслевыми стандартами, такими как Сарбейнс-Оксли или PCI-DSS. Если записи вашей ИТ-инфраструктуры должны оставаться доступными в течение более длительного периода времени, вам определенно нужно знать, как найти путь к ключевым файлам.

Чтобы увидеть систему logrotate в действии, перечислите часть содержимого каталога /var/log/. Например, файл auth.log представлен в трех разных форматах:

 

Через семь дней, когда наступит следующая дата ротации, auth.log.2.gz будет переименован в auth.log.3.gz, auth.log.1 будет сжат и переименован в auth.log.2.gz, auth.log. станет auth.log.1, и будет создан новый файл с именем auth.log.

Цикл ротации журнала по умолчанию управляется в файле /etc/logrotate.conf. Значения, показанные в этом списке, заменяют файлы после одной активной недели и удаляют старые файлы через четыре недели.

# еженедельно чередуйте файлы журналов
weekly
# сохраняйте отставание на 4 недели
rotate 4
# создавайте новые (пустые) файлы журналов после поворота старых
create
# пакеты помещают информацию о ротации журналов в этот каталог
include /etc/logrotate.

 

Каталог /etc/logrotate.d/ также содержит настроенные файлы конфигурации для управления ротацией журналов отдельных служб или приложений. Перечисляя содержимое этого каталога, вы видите эти файлы конфигурации:

$ ls /etc/logrotate.d/
apache2 apt dpkg mysql-server
rsyslog
samba
unattended-upgrade

 

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

Многие администраторы предпочитают перенаправлять записи журналов на специально созданные удаленные серверы журналов, где данным может быть уделено все внимание, которого они заслуживают. Это может высвободить серверы приложений для их непосредственных задач и консолидировать данные журналов в одном легкодоступном центральном месте.

Как читать файлы системного журнала

Вы знаете, что у вас есть дела поважнее, чем чтение миллионов строк записей в журнале.

Здесь следует полностью избегать использования команду cat. Он просто выведет тысячи строк на ваш экран.

Мы предлагаем использовать команду grep для фильтрации текста через файлы.

Использование команды tail -f позволяет вам читать текущий файл журнала в режиме реального времени. Вы можете комбинировать его с grep для фильтрации нужного текста.

В некоторых случаях может потребоваться доступ к сжатым старым журналам. Вы всегда можете сначала извлечь файл, а затем использовать grep, less и другие команды для чтения его содержимого, однако есть вариант получше. Существуют z-команды, такие как zcat, zless и т. д., которые позволяют работать со сжатыми файлами без их явного извлечения.

 

Практический пример анализа журнала

Вот очевидный пример, который будет искать в файле auth.log доказательства неудачных попыток входа в систему. Поиск слова «failure»
вернет любую строку, содержащую фразу «Authentication failure».

Проверяя это время от времени, вы можете обнаружить попытки компрометации учетной записи, угадывая правильный пароль. Любой может испортить пароль один или два раза, но слишком много неудачных попыток должны вызвать у вас подозрения:

$ cat /var/log/auth.log | grep 'Authentication failure'
Sep 6 09:22:21 workstation su[21153]: pam_authenticate: Authentication failure

 

Если вы из тех администраторов, которые никогда не ошибаются, то этот поиск может оказаться пустым. Вы можете гарантировать себе по крайней мере один результат, вручную сгенерировав запись в журнале с помощью программы под названием logger. Попробуйте сделать что-то вроде этого:

logger "Authentication failure"

 

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

Как видите, grep сделал всю работу за вас, но все, что вы видите по результатам, это то, что произошла ошибка аутентификации. Разве не было бы полезно знать, чей счет был задействован? Вы можете расширить результаты, возвращаемые grep, сказав ей включить строки непосредственно до и после совпадения.

В этом примере совпадение печатается вместе с линиями вокруг него. Это говорит вам, что кто-то, использующий учетную запись andrey, безуспешно пытался использовать su (сменить пользователя) для входа в учетную запись студии:

$ cat /var/log/auth.log | grep -C1 failure
Sep 6 09:22:19 workstation su[21153]: pam_unix(su:auth): authentication
failure; logname= uid=1000 euid=0 tty=/dev/pts/4 ruser=andrey rhost=
user=studio
Sep 6 09:22:21 workstation su[21153]: pam_authenticate:
Authentication failure
Sep 6 09:22:21 workstation su[21153]: FAILED su for studio by andrey

Что дальше?

Знать основы — это одно, а применять эти знания — совсем другое. Однако знание основ помогает в различных ситуациях.

Теперь, когда вы знаете основы системных журналов в Linux, вам может быть немного легче работать с журналами.

Exit mobile version