diff --git a/content/Journalctl.rst b/content/Journalctl.rst new file mode 100644 index 0000000..a4d9fc8 --- /dev/null +++ b/content/Journalctl.rst @@ -0,0 +1,397 @@ +Работа с journalctl +##################### + +:Тема: Работа с journalctl +:Дата: 2023-05-11 +:Авторы: Клестова Л. А., Куленкамп Д. К. + +.. default-role:: code +.. contents:: Содержание + +Описание библиотеки +==================== +Утилита логирования journalctl является частью systemd - системного демона, являющегося подсистемой инициализации Linux. Библиотека предназначена для управления системным журналом, что позволяет просматривать и анализировать различные процессы и события, происходящие в ОС. Journalctl поддерживает централизованное хранение журнала, фильтрацию, поиск и многое другое. Все это может использоваться для диагностики и устранения неполадок, обеспечения безопасности, отслеживания производительности и контроля соответствия внутренним стандартам. + +Структура журнала логов +==================== +Журнал логов, с которым работает утилита, имеет определенную структуру. Каждая запись в журнале представляет из себя сообщения от системы, состоящие из временных отметок, типа события и его уровня важности, источника сообщения, текста сообщения и метаданных. Логи в systemd записываются в соответствии с стандартным протоколом syslog. Рассмотрим перечисленные пункты подробнее. + +Временные отметки +------------------ + +Время записывается в формате YYYY-MM-DD HH:MM:SS, например: “2023-04-12 12:34:56”. +По умолчанию systemd записывает в логах время с аппаратных часов (RTC, Real Time Clock), однако его можно настроить на универсальное координированное время UTC в соответствии с нужным часовым поясом. + +Уровни важности (приоритет) +---------------------------- + + +----------+--------------------------------+---------------+------------------------------+ + | | | | | + | Значение | Важность | Кодовое слово | Описание | + | | | | | + +==========+================================+===============+==============================+ + | 0 | Emergency (Экстренная ситуация)| emerg | Системой нельзя пользоваться | + +----------+--------------------------------+---------------+------------------------------+ + | 1 | Alert (Тревога) | alert | Нужно исправить немедленно | + +----------+--------------------------------+---------------+------------------------------+ + | 2 | Critical (Критический) | crit | Критические состояния | + +----------+--------------------------------+---------------+------------------------------+ + | 3 | Error (Ошибка) | err | Ошибка | + +----------+--------------------------------+---------------+------------------------------+ + | 4 | Warning (Предупреждение) | warning | Далее может произойти ошибка | + +----------+--------------------------------+---------------+------------------------------+ + | 5 | Notice (Замечание) | notice | Необычные события, не ошибки | + +----------+--------------------------------+---------------+------------------------------+ + | | | | Обычные операционные | + | 6 | Informational (Информационный) | info | сообщения, не требуют | + | | | | действий | + +----------+--------------------------------+---------------+------------------------------+ + | | | | Сообщения, которые могут | + | 7 | Debug (Отладка) | debug | быть полезны только | + | | | | при отладке | + +----------+--------------------------------+---------------+------------------------------+ + + + +Источники сообщения +--------------------- +Источники сообщения обозначаются с помощью кодов источников (Facility code) и лежат в диапазоне от 0 до 23. + + +-----------------------+-----------------------+-----------------------+ + | Значение | Кодовое слово | Описание | + +=======================+=======================+=======================+ + | 0 | kern | Сообщения от ядра | + +-----------------------+-----------------------+-----------------------+ + | 1 | user | Сообщения уровня | + | | | пользователя | + +-----------------------+-----------------------+-----------------------+ + | 2 | mail | Почтовая система | + +-----------------------+-----------------------+-----------------------+ + | 3 | daemon | Системные демоны | + +-----------------------+-----------------------+-----------------------+ + | 4 | auth | Сообщения о | + | | | безопасности | + | | | или авторизации | + +-----------------------+-----------------------+-----------------------+ + | 5 | syslog | Сообщения | + | | | генерируемые | + | | | syslog | + +-----------------------+-----------------------+-----------------------+ + | 6 | lpr | Протокол демона | + | | | построчной печати | + | | | (Line printer | + | | | subsystem), | + | | | архаична | + +-----------------------+-----------------------+-----------------------+ + | 7 | news | Подсистема | + | | | новостной сети | + | | | (архаична) | + +-----------------------+-----------------------+-----------------------+ + | 8 | uucp | Unix-to-Unix copy | + | | | protocol, система | + | | | копирования между | + | | | компьютерами | + +-----------------------+-----------------------+-----------------------+ + | 9 | | Демон часов | + +-----------------------+-----------------------+-----------------------+ + | 10 | authpriv | Сообщения о | + | | | безопасности | + | | | или авторизации | + +-----------------------+-----------------------+-----------------------+ + | 11 | ftp | Сообщения от | + | | | FTP-демона | + | | | (протокол передачи | + | | | файлов) | + +-----------------------+-----------------------+-----------------------+ + | 12 | | Сообщения NTP | + | | | демона, регулирует | + | | | системное время | + +-----------------------+-----------------------+-----------------------+ + | 13 | | Аудит логов | + +-----------------------+-----------------------+-----------------------+ + | 14 | | Предупреждения | + | | | логов | + +-----------------------+-----------------------+-----------------------+ + | 15 | cron | Демон расписания | + +-----------------------+-----------------------+-----------------------+ + | 16 | local0 | локальное | + | | | использование 0 | + +-----------------------+-----------------------+-----------------------+ + | 17 | local1 | локальное | + | | | использование 1 | + +-----------------------+-----------------------+-----------------------+ + | 18 | local2 | локальное | + | | | использование 2 | + +-----------------------+-----------------------+-----------------------+ + | 19 | local3 | локальное | + | | | использование 3 | + +-----------------------+-----------------------+-----------------------+ + | 20 | local4 | локальное | + | | | использование 4 | + +-----------------------+-----------------------+-----------------------+ + | 21 | local5 | локальное | + | | | использование 5 | + +-----------------------+-----------------------+-----------------------+ + | 22 | local6 | локальное | + | | | использование 6 | + +-----------------------+-----------------------+-----------------------+ + | 23 | local7 | локальное | + | | | использование 7 | + +-----------------------+-----------------------+-----------------------+ + +Текст сообщения +------------------- + +Текст сообщения содержит описание процессов, происходящих в системе, например, когда сервис запущен или остановлен, ошибки возникшие при выполнении, название сервисов и детали произошедших событий. + +Метаданные +--------------------- + +Метаданные могут иметь различное содержание в зависимости от их настроек, часто включают в себя пользовательский идентификатор, идентификатор устройства, имя хоста, идентификатор загрузки (boot_id) и т.д. + +Установка утилиты +==================== + +Как уже было ранее сказано, journalctl является частью systemd, а потому его не нужно устанавливать отдельно. Установка systemd осуществляется через пакетный менеджер используемого дистрибутива. + +Например, для дистрибутивов Ubuntu и Debian используется команда: + +.. code-block:: bash + + sudo art-get install systemd + +Для CentOS, Fedora и RHEL: + +.. code-block:: bash + + sudo yum install systemd + +А для Arch Linux: + +.. code-block:: bash + + sudo pacman -S systemd + +Вместе с установкой пакета systemd теперь можно использовать и его часть - journalctl. Перейдем к изучению основных команд. + +Основные команды +================= +Просмотр журнала логов +--------------------- +journalctl – базовая команда, при вводе в командную строку без дополнений выводит все доступные вызывающему пользователю логи в системе. Рассмотрим различные вариации данной команды, ориентирующиеся на нужды пользователя: + +1. Просмотр журнала событий: + + .. code-block:: bash + + journalctl +2. Просмотр журнала с конца: + + .. code-block:: bash + + journalctl -r +3. Просмотр журнала в формате, более удобном для чтения: + + .. code-block:: bash + + journalctl -o cat + + При использовании данной команды выводится полный текст сообщений журнала вместо сокращенного формата, используемого по умолчанию. + +4. Просмотр журнала с последними записями: + + .. code-block:: bash + + journalctl -n + + Опция “-n” указывает, сколько последних записей хочет получить на выход пользователь. Например, при вводе команды + + .. code-block:: bash + + journalctl -n 10 + + будет показано 10 последних записей системного журнала. + +5. Просмотр журнала с записями, созданными после указанного времени: + + .. code-block:: bash + + journalctl –since + + После опции “–since” нужно указать начальное время просмотра журнала. Время в данной команде может быть задано в различных командах: + + .. code-block:: bash + + journalctl –since today - показ всех записей для сегодняшнего дня + journalctl –since 2023-06-10 - показ всех записей с 10 июня 2023 года + journalctl –since “n days/hours/minutes ago” - показ всех записей, которые были созданы в течение последних n дней/часов/минут + +6. Просмотр журнала с записями, созданными до указанного времени: + + .. code-block:: bash + + journalctl –until + +7. Просмотр журнала с записями за определенное время: + + .. code-block:: bash + + journalctl –since “2023-06-10 10:00:00” –until “2023-06-10 12:00:00” + + Данная команда выводит записи, сделанные в журнале в выбранном промежутке времени. Journalctl предоставляет возможность выбирать таким же образом отдельно только дату или только время. Если не введено время, то по умолчанию ставится 00:00:00. При последнем варианте по умолчанию выбирается текущий день. Для выбора другого дня работают слова “yesterday”, “today”, “tomorrow”. + +8. Просмотр журнала в режиме реального времени: + + .. code-block:: bash + + journalctl -f + + Вывод журнала осуществляется с непрерывным обновлением. + + +Поиск определенных логов +--------------------- +1. Поиск событий: + + .. code-block:: bash + + journalctl -u + + Команда выводит события, связанные с выбранной службой. + +2. Поиск событий с выбранным приоритетом: + + .. code-block:: bash + + journalctl -p + + Например, следующая команда выводит события с ошибками: + + .. code-block:: bash + + journalctl -p err + +3. Поиск событий с определенным словом или фразой: + + .. code-block:: bash + + journalctl /message/ + + Команда выведет события, которые содержат данное слово или фразу. + +4. Поиск логов с определенным номером процесса: + + .. code-block:: bash + + journalctl -b 0 + + Например, команда выше выведет нам журнал последней загрузки системы. + +Настройки вывода журнала +--------------------- +Так как логи подчиняются единой структуре, то journalctl может вывести их в различных форматах. +Следующие настройки изменяют то, как отображается вывод данных: + + .. code-block:: bash + + journalctl --output= или journalctl -o + +Выше уже был пример использования команды journalctl -o cat. Базовая команда принимает следующие значения: + + +-----------------------------------+-----------------------------------+ + | short | Стандартный вывод логов в | + | | формате syslog | + +-----------------------------------+-----------------------------------+ + | verbose | Отображает информацию в более | + | | подробном, пользовательском | + | | формате | + +-----------------------------------+-----------------------------------+ + | json | Отображает логи в формате | + | | JSON, один лог за раз | + +-----------------------------------+-----------------------------------+ + | json-pretty | Отображает логи в формате | + | | JSON, но в нескольких строках, | + | | для лучшей читаемости | + +-----------------------------------+-----------------------------------+ + | cat | Отображает только сообщение | + | | каждого лога без заголовка | + +-----------------------------------+-----------------------------------+ + | export | Переводит журнал в поток | + | | сообщений в бинарной записи, | + | | удобной для бэкапов и передачи | + | | данных | + +-----------------------------------+-----------------------------------+ + +*Short имеет несколько дополнительных родственных форматов с небольшими отличиями друг от друга, подробнее см. документацию Output Options.* + +Некоторые другие команды +--------------------- + +1. Просмотр журнала из выбранного файла: + + .. code-block:: bash + + journalctl –file /var/log/syslog + + В данном примере мы вывели журнал из файла syslog. + +2. Сохранение логов в файл: + + .. code-block:: bash + + journalctl > file_name + +3. Просмотр записей журнала ядра: + + .. code-block:: bash + + journalctl -k + + Команда выведет последние сообщения ядра, что поможет идентифицировать проблемы на системном уровне, связанные с оборудованием или драйверами. + +4. Просмотр использования дискового пространства журнала: + + .. code-block:: bash + + journalctl –disk-usage + + Данная команда выводит информацию о размере журналов, размере свободного места на диске и максимальном размере журнала. Используя опцию -t, мы дополнительно сможем вывести список журналов с их размерами. + +5. Очистка журнала: + + .. code-block:: bash + + journalctl –vacuum-size= + + Команда удаляет более старые записи из журнала для экономии места на диске. После вышеуказанного устанавливается лимит размера журнала. Например, для удаления прошлых записей и устаровления лимита в 10 Мб напишем: + + .. code-block:: bash + + journalctl –vacuum-size=10M + +6. Следует помнить, что все описанные команды можно комбинировать. Например, следующая команда позволит просмотреть все ошибки, произошедших в указанное время: + + .. code-block:: bash + + journalctl –since -p err + +Практические задания +======================== +1. Убедитесь, что на вашем ПК установлена система инициализации systemd. В противном случае проведите ее установку, используя инструкцию из данной методички. + +2. Отобразите все ошибки, связанные с SSH-сервером, которые произошли за последний месяц. + +4. Сделайте фильтрацию отображенных логов по любому выбранному вами пользователю. + +3. Сохраните полученную информацию в файл с названием "user-name_errs_ssh" + +Дополнительная информация +=========================== + +1. https://www.freedesktop.org/software/systemd/man/journalctl.html - официальная документация + +2. https://wiki.archlinux.org/title/Systemd/Journal - Archlinux wiki + +3. https://www.digitalocean.com/community/tutorials/how-to-use-journalctl-to-view-and-manipulate-systemd-logs - небольшая статья на английском по работе с утилитой +4. https://gpt-chatbot.ru/chat-gpt-ot-openai-dlya-generacii-teksta - Chat GPT-4 +