🐹 CentOS 7: Логирование в systemd.

Содержание:

1. Введение.
2. Настройка системного времени.
3. Обычный просмотр логов.
4. Временные окна.
5. Фильтрация записей.

5.1. По юниту.
5.2. По процессу, пользователю, ID группы.
5.3. По пути запуска.
5.4. По приоритету.

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

6.1. Ограничение или расширения вывода.
6.2. Форматы вывода.

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

7.1. Крайние записи.
7.2. Отслеживание журнала.

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

8.1. Вычисление занятого дискового пространства.
8.2. Удаление старых записей.

9. Оригиналы источников информации.


1. Введение.

Одним из значимых преимуществ systemd является его возможность работы с логами процессов и системы в целом. При использовании остальных инструментов, отличных от systemd, логи обычно сильно децентрализованы, разбросаны по разным демонам, что затрудняет управление ими.

Система, собирающая логи, и управляющая ими называется журналом.

Журнал представлен демоном journald, который собирает сообщения ядра, сервисов, процессов и так далее. Разберёмся, как работать с journalctl, позволяющим управлять записями, сохранёнными в журнале.

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

Журнал systemd может использоваться вместе с системной реализацией журнала, либо вообще заменить его.

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

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

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

# timedatectl list-timezones

Ответ:

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

# timedatectl set-timezone Asia/Yekaterinburg

Ответ: ничего.

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

# timedatectl status

Ответ:

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

Вывод логов, собранных демоном journald выполняется с помощью journalctl.

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

# journalctl

Ответ:

Как видите, время локальное.

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

# journalctl --utc

Ответ: тоже самое, как на примере выше.

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

# journalctl -b

Ответ: тоже самое, как на примере выше.

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

# journalctl -k

Ответ: тоже самое, как на примере выше.

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

# journalctl -k -b

Ответ: тоже самое, как на примере выше.

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

# journalctl --list-boots

Ответ:

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

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

# journalctl -b -1

Ответ: если напись не найдена.

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

# journalctl -b 28ed3b9d1fa44799927e41dedc875764

Ответ: если напись не найдена.

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

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

Для этого предназначены опции --since и --until.

Формат даты-времени — следующий:

ГГГГ-ММ-ДД ЧЧ:ММ:СС

К примеру, вывод всех события, начиная с 3-х часов ночи 1 декабря 2016 года:

# journalctl --since "2016-12-01 03:00:00"

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

# journalctl --since "2016-12-01 03:00:00" --until "2016-12-08 00:03:00"

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

К примеру, вчерашние события:

# journalctl --since yesterday

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

Есть и другие способы фильтрации.

5.1. По юниту.

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

# journalctl -u nginx.service

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

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

# journalctl -u nginx.service --since today

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

# journalctl -u nginx.service -u php-fpm.service --since today

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

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

# journalctl _PID=8125

Ответ:

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

# id -u nginx

Ответ:

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

# journalctl _UID=997 --since today

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

# man systemd.journal-fields

Ответ:

5.3. По пути запуска.

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

Выполним:

# journalctl /usr/bin/bash

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

Очень важна возможность фильтрации сообщений по их приоритету.

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

# journalctl -p ERROR -b

Приведём полный список приоритетов (добавьте цифру после параметра -p) ERROR:

  • 0 — авария,
  • 1 — предупреждение,
  • 2 — критический,
  • 3 — ошибка,
  • 4 — предупреждение,
  • 5 — уведомление,
  • 6 — информация,
  • 7 — отладка.

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

6.1. Ограничение или расширения вывода.

По умолчанию, journalctl не переносит строки по ширине экрана.

Чтобы сократить вывод по ширине экрана — выполните:

# journalctl --no-full

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

# journalctl -a

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

# journalctl --no-pager

6.2. Форматы вывода.

Посредством параметра -o нам доступен ряд форматов вывода.

Конечно же, JSON:

# journalctl -b -u nginx -o json-pretty

Ответ:

Полный список форматов вывода:

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

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

Аналогично утилите tail, только соответствующая функциональность уже встроена в journalctl.

7.1. Крайние записи.

Вывод последних 25 записей:

# journalctl -n 25

7.2. Отслеживание журнала.

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

# journalctl -f

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

Некоторые вопросы администрирования журнала.

8.1. Вычисление занятого дискового пространства.

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

# journalctl --disk-usage

8.2. Удаление старых записей.

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

Например:

# journalctl --vacuum-size=1G

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

# journalctl --vacuum-time=1years

9. Оригиналы источников информации.

  1. community.vscale.io «Логирование в systemd».

Читайте также: