Использование journalctl для управления журналированием в systemd

В systemd используется принципиально иной (по сравнению с традиционным инструментом syslog) подход к логгированию.
В его основе лежит централизация: специализированный компонент journal cобирает все системные сообщения (сообщения ядра, различных служб и приложений). При этом специально настраивать отправку логов не нужно: приложения могут просто писать в stdout и stderr, a journal сохранит эти сообщения автоматически. Работа в таком режиме возможна и с Upstart, но он сохраняет все логи в отдельный файл, тогда как systemd сохраняет их в бинарной базе, что существенно упрощает систематизацию и поиск.

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

Для просмотра логов используется утилита journalctl.

Одним из существенных недостатков syslog является сохранение записей без учёта часового пояса. В journal этот недостаток устранён: для логгируемых событий можно указывать как местное время, так и универсальное координированное время (UTC). Установка времени осуществляется с помощью утилиты timedatectl.

Просмотр списка доступных временных зон

Установка нужной временной зоны

Проверяем установленные параметры:

 

Просмотр логов

По умолчанию эта команда выведет записи текущей и предыдущих загрузок (если инструмент journald настроен для сохранения записей от предыдущих загрузок). Некоторые дистрибутивы включают это поведение по умолчанию, а некоторые – нет. Чтобы включить сохранение записей от предыдущих загрузок, необходимо:

1.Отредактировать файл /etc/systemd/journald.conf. Измените значение параметра Storage=, указав persistent.

2.Создать постоянный каталог при помощи команды:

Просмотр логов с выводом времени в формате UTC(по умолчанию используется локальное время)

 

Фильтрация логов
Отображать логи только с момента последней загрузки системы

 

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

Просмотреть список предыдущих загрузок

Первая колонка – порядковый номер загрузки
Вторая колонка — уникальный идентификатор (ID) загрузки
Третья колонка – дата и время загрузки
Для отображения логов для нужной загрузки можно использовать как первую, так и вторую колонку

Либо

 

Фильтрация по дате и времени
Для ограничения просмотра логов определенными временными отрезками используются опции

Временные значения зависят от формата
Например, можно использовать такой формат времени

Вывести все логи начиная с указанной даты и времени

Если не указана дата, то по умолчанию используется текущая дата
Если не указывается время, то по умолчанию используется полночь – 00:00:00
Например, отобразить логи начиная с даты 2016-10-09 и до сегодняшней даты до времени 15:40:00

Также можно использовать относительные имена
«yesterday», «today», «tomorrow», «now»

Например,отобразить логи со вчерашнего дня

Отобразить логии начиная с 10 утра сегодняшнего дня и заканчивая тремя часами назад

 

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

Просмотр всех записей в журнале, сделанных службой ntpd

Просмотр всех записей в журнале, сделанных службой ntpd и только в текущей загрузке системы

Просмотр всех записей в журнале, сделанных службой ntpd только за сегодня

 

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

Фильтрация по номеру/идентификатору процесса(PID)

Фильтрация по UID/GID-пользователя
Для просмотра логов процессов, запущенных от имени определённого пользователя или группы, используются фильтры _UID и _GID соответственно
Узнаем от какого пользователя запущена наша служба и узнаем идентификатор этого пользователя

Отобразить список пользователей, о которых имеется записи в логах

Отобразить список групп, о которых имеется записи в логах

 

Фильтрация по пути
Просмотреть логи для какого-либо процесса также можно, указав путь к нему

С командной journalctl можно использовать и другие фильтры
Просмотреть список всех доступных фильтров

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

Либо

Если совместить флаги -k и -b, можно получить записи ядра только для текущей загрузки

Чтобы просмотреть сообщения ядра для предыдущих сессий, нужно воспользоваться опцией -b и указать один из идентификаторов сессии (порядковый номер в списке или ID):

 

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

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

Показать все записи приоритетом err и выше(будут выведены все записи с приоритетом error,critical,alert,emergency)

Эти сообщения можно фильтровать по уровню. В journal используется такая же классификация уровней ошибок, как и в syslog:
Список всех приоритетов,начиная с самого высокого

Вместо имени приоритета можно указывать номер приоритета согласно указанному выше списку
Например, вместо имени err укажим его номер 3

Запись логов на стандартный вывод
По умолчанию journalctl использует для вывода сообщений логов внешнюю утилиту less. В этом случае к ним невозможно применять стандартные утилиты для обработки текстовых данных (например, grep). Эта проблема легко решается: достаточно воспользоваться опцией −−no-pager, и все сообщения будут записываться в стандартный вывод:

После этого их можно будет передать другим утилитам для дальнейшей обработки или сохранить в текстовом файле

Выходной формат вывода логов
Формат вывода логов утилиты journalctl может быть изменен благодаря использованию опции -o
C помощью опции -o можно преобразовывать данные логов в различные форматы, что облегчает их парсинг и дальнейшую обработку
Вывод journalctl в json-формате

Вывод journalctl в json-pretty формате

Помимо JSON данные логов могут быть преобразованы в следующие форматы:

 

Просмотр информации о недавних событиях
Просмотр последних 30 записей(по умолчанию используется 10 последних записей)
(аналог tail -n 30)

Просмотр логов в режиме реального времени (аналог tail -f)

 

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

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

 

Ротация лог-файлов

1.Удаление с помощью указания размера (—vacuum-size)
Устанавливаем предельно допустимый размер для хранимых на диске логов
Как только объём логов превысит указанную цифру, лишние файлы будут автоматические удалены.

2.Удаление старых записей по времени (—vacuum-time)
Устанавливаем для логов срок хранения, по истечении которого они будут автоматически удалены
Удалить все логии старше последнего месяца

 

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

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

который включает в числе прочих следующие параметры:

максимальный объём, который логи могут занимать на диске;

объём свободного места, которое должно оставаться на диске после сохранения логов;

объём файла лога, по достижении которого он должен быть удален с диска;

максимальный объём, который логи могут занимать в файловой системе /run;

объём свободного места, которое должно оставаться в файловой системе /run после сохранения логов;

объём файла лога, по достижении которого он должен быть удален из файловой системы /run.

 

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

Одной из самых распространённых задач в работе системного администратора является настройка сбора логов с нескольких машин с последующим помещением в централизованное хранилище.
В systemd предусмотрены специальные компоненты для решения этой задачи: systemd-journal-remote, systemd-journal-upload и systemd-journal-gatewayd.

С помощью команды systemd-journal-remote можно принимать логи с удалённых хостов и сохранять их (на каждом их этих хостов должен быть запущен демон systemd-journal-gatewayd), например:

В результате выполнения приведённой команды логи с хоста some.host будут сохранены в директории var/log/journal/some.host/remote-some~host.journal.

С помощью команды systemd-journal-remote можно также складывать имеющиеся на локальной машине логи в отдельную директорию, например:

Команда systemd-journal-upload используется для загрузки логов с локальной машины в удалённое хранилище:

Источник:

https://habrahabr.ru/company/selectel/blog/264731/
https://www.digitalocean.com/community/tutorials/how-to-use-journalctl-to-view-and-manipulate-systemd-logs

Комментирование и размещение ссылок запрещено.

Комментарии закрыты.

Яндекс.Метрика