ProCloud Yandex
06.07.2023
читать 8 минут

Управление логированием в systemd

/upload/iblock/d73/tusy2njktd0lz8kay2n8gitdeoonbtwx/systemd.jpg

Systemd считается незаменимым для многих софтом в OS Linux. Здесь используется нестандартный подход к сохранению логов. Основная фишка заключается в централизации. То есть, специальный сервис собирает все сообщения системы из ядра, приложений и служб. Преимущество Systemd Service - в том, что нет необходимости выполнять сложные настройки.

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

Journal работает вместе с systemd log и может заменить его. Просмотреть сведения, которые находятся в логах, можно с помощью journalctl service. Стоит подробнее рассмотреть функциональные возможности данного софта для управления логами.

Установка времени

Запись логов без привязки к часовому поясу – это основной недостаток syslog. Однако в Journal этот минус был доработан. В нем пользователь может указывать местное время или делать привязку к основному часовому поясу (по Гринвичу). Для того чтобы задать нужные настройки, требуется использовать утилиту timedatectl. Установив ее, удастся увидеть доступные часовые пояса через специализированную команду. В строке Local Time всегда указывается текущее время.

Journalctl: просмотр логов

Чтобы просматривать логи systemd требуется софт Journalctl. Если использовать соответствующую команду без дополнительных параметров, то на экране появится большое количество информации. Большая часть не представляет для пользователя интереса. Чтобы сэкономить время на поиск нужных сведений требуется использовать фильтры.

Фильтрация логов

Благодаря использованию фильтров удается настроить systemd в соответствии с текущими потребностями. Как результат, пользователь может сосредоточиться на изучении нужных в данный момент логов, отсекая все лишнее.

Просмотр логов с момента текущей загрузки

Для этого используется команда --b. Она позволяет проверить, что именно делал пользователь с момента последнего включения компьютера. Указываются все его действия от имени пользователя и администратора.

Просмотр логов предыдущих сессий

Часто бывает недостаточно изучить логи текущей сессии, чтобы обнаружить проблему или найти желаемую информацию.

Важно. Не во всех версиях Linux сохранение логов предыдущих сессий происходит по умолчанию. Если данная опция не активирована, то это нужно сделать вручную. В файле journald.conf требуется изменить параметр storage на persistent.

Задав нужные настройки, необходимо использовать соответствующую команду для получения доступа к информации о деятельности пользователя при предыдущих запусках ОС. Информация выводится понятным для программистов и системных администраторов способом, она состоит из четырех типов данных:

  • номер загрузки;
  • ID;
  • дата;
  • время.

Для получения лога интересующей загрузки необходимо обращать внимание на первые два.

Фильтрация по дате и времени

Это полезная функция, которая позволяет задать интересующий временной интервал, чтобы изучить, что именно делал пользователь в это время. Для получения сведений при написании команды нужно использовать --since и --until.

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

Если в команде не указывается точное время, то по умолчанию оно будет 00:00:00.

Также допускается использование понятных для человека конструкций, где будут фигурировать слова yesterday, 2 days ago и так далее.

Фильтрация по приложениям и службам

Для реализации этой функции необходимо использовать --u. Она позволяет изучить логи от определенного сервиса. Если интересует еще и конкретный временной промежуток, то достаточно добавить в команду опции, указанные выше.

Фильтрация по процессам, пользователям и группам

Для получения этой информации нужно указать в команде PID (идентификационный номер) интересующего процесса. Еще допустимо применять фильтры _UID и _GID. Они позволяют детально изучить процессы, которые были запущены от имени определенного пользователя или группы соответственно. Однако требуется знать ID процесса/пользователя/группы, чтобы реализовать данный фильтр на практике.

Увидеть список всех пользователей можно через команду

$ journalctl --F _UID 

Аналогично нужно действовать с группами пользователей.

Фильтрация по пути

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

Просмотр сообщений ядра

В этом случае требуется использовать --k или --dmesg. Администратор получает доступ к логам только текущей сессии. Для более глубокого изучения сведений требуется использовать в команде опции времени, рассмотренные выше.

Фильтрация по уровню ошибки

Если администратор занимается исправлением ошибок, то ему необходимо понимать, какие именно проблемы существуют в данном случае. Тогда он использует опцию --p, которая позволяет рассмотреть логи, в которых имеются системные ошибки. Изучив их, удастся предпринять необходимые меры для их устранения.

Важно. Опция --p выдает информацию обо всех ошибках, но есть возможность использовать числовой код от 0 до 7, который покажет конкретно взятые типы ошибок. Чем меньше цифра, тем критичнее ошибка. Ноль означает, что система не работает.

Запись логов в стандартный вывод

По умолчанию используется утилита less, но для обработки текстовых файлов необходимо использовать опцию --no-pager. Это позволит показать информацию в привычном виде и передавать ее другим программам, чтобы они проводили дальнейшую обработку.

Выбор формата вывода

Администратор может использовать различные форматы при работе с логами. За преобразование отвечает опция --o.

Изменение информации актуально при работе с файлами json и не только.

Просмотр информации о недавних событиях

Следует воспользоваться --n, чтобы изучить, что недавно было занесено в логи. При стандартных настройках администратор увидит только последние 10 действий, но в конфигурационном файле это значение можно изменить вручную.

Просмотр логов в real-time

Если необходимо просматривать логи в режиме онлайн (например, для проверки, что программа работает стабильно и правильно), то нужно использовать --f.

Управление логированием

Стоит рассмотреть основные вопросы, чтобы понимать все возможности данного софта.

Определение текущего объема логов

С помощью команды

$ journalctl --disk-usage  

удается узнать, сколько места на диске занимает данная информация.

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

Эта функция позволяет определять предельно допустимый объем логов. Когда выделенное место заполняется, то система начинает работать по аналогии с записью на жесткий диск с камер наблюдения. То есть, происходит стирание наиболее поздней информации в пользу новой. Для этого используется команда:

$ sudo journalctl --vacuum-size=<size>

Еще можно задать срок хранения сведений. Например, чтобы по истечению месяца они автоматически удалялись. Это позволит сэкономить место на жестком диске. Команда:

$ sudo journalctl --vacuum-time=1month

Настройка в конфигурационном файле

Все настройки можно задать через командную строку или с использованием файла journald.conf. Не принципиально, какой метод использовать, чтобы задать нужные настройки, в обоих случаях результат будет одинаковым.

Централизованное хранение логов

Для сбора информации с двух и более устройств и ее размещения на электронном носителе необходимо использовать следующие компоненты:

  • systemd-journal-remote;
  • systemd-journal-upload;
  • systemd-journal-gatewayd.

В команде требуется прописать, откуда именно будут собираться сведения с помощью указания IP адреса. Процесс централизованного сбора информации считается максимально простым и понятным, если использовать родные утилиты. Однако они есть не во всех дистрибутивах. Для решения проблемы можно использовать другой софт, который поддерживает те же форматы.

Заключение

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

Новости
5 апреля 202405.04.2024
читать 1 минутучитать 1 мин
ProCloud CPO Диана Беда в рейтинге ИТ-лидеров от Global CIO
28 марта 202428.03.2024
читать 1 минутучитать 1 мин
Запуск новой локации: Казахстан
6 марта 202406.03.2024
читать 1 минутучитать 1 мин
ProCloud №1 в Рейтинге облачных провайдеров 2023