Перейти к содержимому

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

Введение

Одним из значимых преимуществ systemd является его возможность работы с логами процессов и системы в целом. При использовании остальных инструментов, отличных от systemd, логи обычно сильно децентрализованы, разбросаны по разным демонам, что затрудняет управление ими. Система, собирающая логи, и управляющая ими называется журналом. Журнал представлен демоном journald, который собирает сообщения ядра, сервисов, процессов и т.д. Мы же разберёмся, как работать с journalctl, позволяющим управлять записями, сохранёнными в журнале. Логи, собранные в systemd, сохраняются централизованно — в двоичном формате, что сильно упрощает их обработку. Например, можно выбирать произвольные форматы вывода логов, в зависимости от текущих потребностей (например, JSON). Журнал systemd может использоваться вместе с системной реализацией журнала, либо вообще заменить его.

Настройка системного времени

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

Для установки временной зоны, в свою очередь:

Для проверки правильности внесенных изменений — вывод статуса:

Пример вывода:

Обычный просмотр логов

Вывод логов, собранных демоном journald выполняется с помощью journalctl. Для примера, запуск без параметров — последние события внизу:

Вывод:

Как видите, время локальное. Для вывода UTC-времени — добавьте параметр —utc:

Если необходимы только события с момента текущей загрузки, добавьте параметр -b:

Если нужны только сообщения ядра — воспользуйтесь параметром -k:

Как Вы понимаете, если добавить -b, останутся только записи, относящиеся к последней загрузке системы:

Для вывода списка прошедших загрузок системы — выполните:

Текущая загрузка под номер 0. Предыдущие имеют отрицательные номера: -1, -2, …

Можно вывести информацию о предпоследней загрузке следующим образом:

Или же сославшись на конкретный ID загрузки:

Временные окна

Несмотря на то, что просматривать логи, распределенные по загрузкам системы — довольно удобно, бывают случаи, когда необходимо вывести события, заключенные в каких-либо других временных рамках. Для этого предназначены опции —since и —until.

Формат даты-времени — следующий: ГГГГ-ММ-ДД ЧЧ:ММ:СС К примеру, вывод всех события, начиная с 3-х часов ночи 1 декабря 2016 года:

Или показ событий между 1 и 8 декабря:

Также, имеется поддержка ключевых слов «yesterday», «today», «now» (вчера, сегодня, сейчас). К примеру, вчерашние события:

Фильтрация записей

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

По юниту Собственно, самый часто используемая возможность — фильтрация по имени юнита:

Как и всегда, можно добавлять параметры — к примеру, временные рамки. Например, вывод только сегодняшних событий с указанным юнитом:

Помните, что в параметрах можно указать более одного юнита:

По процессу, пользователю, ID группы

К примеру, если нужны события только, относящиеся к процессу с заданным PID:

Также можно узнать ID группы пользователей:

И также использовать его как параметр:

Полный список полей, по которым доступна фильтрация:

По пути запуска Допустим, нужны события, связанные с bash. Выполним:

По приоритету

Очень важна возможность фильтрации сообщений по их приоритету: Допустим, так можно вывести только те записи, которые помечены как ошибки:

Приведём полный список приоритетов (добавьте цифру после параметра p): 0: авария 1: предупреждение 2: критический 3: ошибка 4: предупреждение 5: уведомление 6: информация 7: отладка

Изменение отображения журнала

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

Ограничение или расширения вывода По умолчанию, journalctl не переносит строки по ширине экрана. Чтобы сократить вывод по ширине экрана — выполните:

Чтобы выводить даже непечатные символы:

Если вы обрабатываете вывод утилиты какими-то программными инструментами, Вам может понадобиться вывод в standard out — тогда не будет разделения на страницы:

Форматы вывода Посредством параметра -o нам доступен ряд форматов вывода. Конечно же, JSON:

Пример вывода:

Это очень удобный формата для программного парсинга внешними утилитами. Можно отформатировать вывод:

Вывод куда более удобен для чтения:

Приведём полный список форматов вывода: cat: отображает только поле сообщения export: бинарный формат вывода json: стандартный JSON, одна запись на строку json-pretty: отформатированный, человеко-читаемый JSON short: стиль вывода syslog по умолчанию short-iso: формат по-умолчанию, стандарт ISO 8601 short-monotonic: монотонные временные метки short-precise: с добавлением микросекунд verbose: принудительный вывод даже скрытых записей

Мониторинг текущих событий

Аналогично утилите tail, только соответствующая функциональность уже встроена в journalctl. Вывод последних 25 записей:

Отслеживание журнала Для обновления вывода на экрана по мере поступления записей в лог — выполните:

Управление журналом

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

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

Удаление старых записей Мы можем удалить самые старые записей, чтобы сократить размер журнала до заданного нами размера. Например:

Или к примеру, можно удалить записи старше года:

Заключение

В данном руководстве мы рассмотрели основополагающие аспекты работы с утилитой journalctl.

Опубликовано вLinux

Ваш комментарий будет первым

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *