Skip to content

Latest commit

 

History

History
113 lines (67 loc) · 13.5 KB

File metadata and controls

113 lines (67 loc) · 13.5 KB

Основы логирования в Linux

Источник: Linux Logging Basics

Ultimate Guide to Logging — ваш открытый ресурс для понимания, анализа и устранения неполадок по системным журналам · Обновлено: 2022

Основы логирования в Linux

Журналы операционной системы содержат массу диагностической информации о ваших компьютерах, и Linux здесь не исключение. Всё — от событий ядра до действий пользователей — записывается Linux в журналы, что позволяет увидеть практически любое действие, выполненное на ваших серверах. В этом руководстве мы объясним, что такое журналы Linux, где они находятся и как их интерпретировать.

Системные журналы Linux

В Linux есть специальный каталог для хранения журналов — /var/log. Этот каталог содержит журналы самой операционной системы, служб и различных приложений, запущенных в системе. Вот как выглядит этот каталог на типичной системе Ubuntu.

Терминал с системным журналом Linux

Некоторые из самых важных системных журналов Linux:

  • /var/log/syslog и /var/log/messages хранят все данные о глобальной системной активности, включая сообщения загрузки. Системы на базе Debian, такие как Ubuntu, хранят это в /var/log/syslog, тогда как системы на базе Red Hat, такие как RHEL или CentOS, используют /var/log/messages.
  • /var/log/auth.log и /var/log/secure хранят все события, связанные с безопасностью: входы в систему, действия пользователя root и вывод подключаемых модулей аутентификации (PAM). Ubuntu и Debian используют /var/log/auth.log, а Red Hat и CentOS — /var/log/secure.
  • /var/log/kern.log хранит события ядра, ошибки и предупреждения, что особенно полезно при отладке проблем со специально собранными ядрами.
  • /var/log/cron хранит информацию о запланированных задачах (cron jobs). Используйте эти данные, чтобы убедиться, что ваши задачи cron выполняются успешно.

Некоторые приложения также пишут файлы журналов в этот каталог. Например, веб-сервер Apache пишет журналы в каталог /var/log/apache2 (в Debian), а MySQL — в каталог /var/log/mysql. Некоторые приложения также ведут журналы через Syslog, о чём мы расскажем в следующем разделе.

Что такое Syslog?

Syslog — это стандарт создания и передачи журналов. Слово «syslog» может относиться к любому из следующего:

  1. Служба syslog принимает и обрабатывает сообщения syslog и слушает события, создавая сокет, расположенный в /dev/log, в который приложения могут писать. Она может записывать сообщения в локальный файл или пересылать их на удалённый сервер. Существуют разные реализации syslog, включая rsyslogd и syslog-ng.
  2. Протокол Syslog (RFC 5424) — это транспортный протокол, определяющий, как передавать журналы по сети. Это также формат данных, определяющий структуру сообщений. По умолчанию он использует порт 514 для сообщений открытым текстом и порт 6514 для шифрованных сообщений.
  3. Сообщение syslog — это любой журнал, отформатированный в формате сообщений syslog, состоящий из стандартизированного заголовка и сообщения с содержимым журнала.

Поскольку Syslog может пересылать сообщения на удалённые серверы, его часто используют для пересылки системных журналов в решения для управления журналами, такие как SolarWinds® Loggly® и SolarWinds Papertrail™.

RFC 3164 против RFC 5424

Хотя RFC 5424 — это текущий протокол Syslog, это не единственный стандарт, который вы встретите на практике. RFC 3164 (также известный как «BSD syslog» или «старый syslog») — это более старый формат syslog, который всё ещё используется многими устройствами. На практике администраторы, скорее всего, увидят сообщения syslog как в формате RFC 3164, так и в формате RFC 5424.

Хорошими признаками сообщения syslog RFC 3164 являются отсутствие структурированных данных и метки времени в формате «Mmm dd hh:mm:ss».

Вот несколько примеров того, как выглядят сообщения BSD, используя раздел 5.4 RFC 3164 в качестве справки:

<34>Nov 11 11:11:11 pepeggserver su: 'su admin' failed for user1 on /dev/pts/0
<13>Nov 11 11:11:11 198.51.100.11 Read the docs!

Здесь мы сосредоточимся на более новом протоколе RFC 5424, но помните о RFC 3164, если встретите сообщения, не соответствующие RFC 5424.

Формат и поля Syslog

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

Вот пример сообщения журнала в формате по умолчанию. Оно от демона SSH (sshd), который управляет удалёнными входами в систему. Это сообщение описывает неудачную попытку входа:

Jun 4 22:14:15 server1 sshd[41458] : Failed password for root from 10.0.2.2 port 22 ssh2

Вы также можете добавить дополнительные поля в свои сообщения syslog. Повторим последнее событие, добавив несколько новых полей. Мы будем использовать следующий шаблон rsyslog, который добавляет приоритет (<%pri%>), версию протокола (%protocol-version%) и дату в формате RFC 3339 (%timestamp:::date-rfc3339%):

<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% %msg%n

Это создаёт следующий журнал:

<34>1 2019-06-05T22:14:15.003Z server1 sshd - - pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.0.2.2

Ниже вы найдёте описания некоторых наиболее часто используемых полей syslog при поиске или устранении неполадок.

Поле приоритета, или сокращённо pri («<34>» в примере), говорит о том, насколько срочным или серьёзным является событие. Это комбинация двух числовых полей: средства (facility) и серьёзности (severity). Средство указывает тип процесса, создавшего событие, — от 0 для сообщений ядра до 23 для локальных приложений. Серьёзность варьируется от 0 до 7, где 0 означает аварийную ситуацию, а 7 — событие отладки.

Pri может выводиться двумя способами. Первый — как одно число prival, которое вычисляется как значение поля средства, умноженное на восемь, после чего к результату прибавляется значение поля серьёзности: (facility)(8) + (severity). Второй — pri-text, который выводится в строковом формате «facility.severity». Последний формат часто легче читать и искать, но он занимает больше места при хранении.

Метка времени

Поле метки времени («2019-06-05T22:14:15.003Z» в примере выше) указывает время и дату, когда сообщение было сгенерировано в системе, отправляющей сообщение. Метка времени из примера раскладывается так:

  • «2019-06-05» — год, месяц и день.
  • «T» — обязательный элемент поля метки времени, разделяющий дату и время.
  • «22:14:15.003» — время в 24-часовом формате, включая количество миллисекунд (003).
  • «Z» указывает время UTC. Вместо Z в примере мог быть указан сдвиг, например -08:00, который означает, что время сдвинуто от UTC на восемь часов.

Поле имени хоста («server1» в примере) указывает имя хоста или системы, которая изначально отправила сообщение.

Поле app-name («sshd:auth» в примере) указывает имя приложения, отправившего сообщение.

Логирование с systemd

Многие дистрибутивы Linux поставляются с systemd — менеджером процессов и служб. Systemd реализует собственную службу логирования под названием journald, которая может заменять Syslog или дополнять его. Journald ведёт журналы значительно иначе, чем Syslog, поэтому у него есть свой раздел в Ultimate Guide to Logging. Подробнее о логировании через systemd можно узнать в разделе Systemd Logging.

Дополнительные ресурсы

How to View and Configure Linux Logs on Ubuntu and CentOS (DigitalOcean)


логи logger linux