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

Установка, настройка, эксплуатация.

Модератор: ROOT

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

Сообщение ROOT » 28 янв 2018, 00:35

Оглавление


Темы
 Просмотреть логи последней загрузки системы 
 Просмотр логов предыдущих сессий 
 Фильтрация по дате и времени 
 Фильтрация по приложениям и службам 
 Фильтрация по процессам, пользователям и группам 
 Просмотр сообщений ядра 
 Фильтрация сообщений по уровню ошибки 
 Просмотр информации о недавних событиях 
 Определение текущего объёма логов 
 Чистка логов 
 Настройка ротации логов в конфигурационном файле 
 Централизованное хранение логов 


 Просмотреть логи последней загрузки системы 
С помощью опции -b можно просмотреть все логи, собранные с момента последней загрузки системы:
Код: выделить все
journalctl -b

 Просмотр логов предыдущих сессий 
Просмотреть список предыдущих загрузок можно с помощью команды:
Код: выделить все
journalctl --list-boots

Её вывод состоит из четырёх колонок. В первой из них указывается порядковый номер загрузки, во второй — её ID, в третьей— дата и время. Чтобы просмотреть лог для конкретной загрузки, можно использовать идентификаторы как из первой, так и из второй колонки:
Код: выделить все
journalctl -b 0
или
journalctl -b 9346310348bc4edea250555dc046b30c

 Фильтрация по дате и времени 
В journalctl имеется также возможность просмотра логов за определённые периоды времени. Для этого используются опции —since и —until. Предположим, нам нужно просмотреть логи начиная с 17 часов 15 минут 20 июля 2015 года. Для этого потребуется будет выполнить команду:
Код: выделить все
journalctl --since "2015-07-20 17:15:00"

Если с опцией since не будет указано никакой даты, на консоль будут выведены логи начиная с текущей даты. Если дата указана, но при этом не указано время, будет применено значение времени по умолчанию — «00:00:00». Секунды также указывать не обязательно (в этом случае применяется значение по умолчанию — 00).
Можно воспользоваться и вот такими человекопонятными конструкциями:
Код: выделить все
journalctl ---since yesterday
journalctl --since 09:00 --until now
journalctl --since 10:00 --until "1 hour ago"

 Фильтрация по приложениям и службам 
Для просмотра логов конкретного приложения или службы используется опция -u, например:
Код: выделить все
journalctl -u nginx.service

Приведённая команда выведет на консоль логи веб-сервера nginx.
Нередко возникает необходимость просмотреть логи какой-либо службы за определённый период времени. Это можно сделать при помощи команды вида:
Код: выделить все
journalctl -u nginx.service --since yesterday

C опцией -u также используется фильтрация по дате и времени, например:
Код: выделить все
journalctl -u nginx.service -u php-fpm.service —since today

Благодаря этому можно отслеживать взаимодействие различных служб и получать информацию, которую нельзя было бы получить при отслеживании соответствующих процессов по отдельности.
 Фильтрация по процессам, пользователям и группам 
Просмотреть логи для какого-либо процесса можно, указав в команде journalctl его идентификационный номер (PID), например:
Код: выделить все
journalctl _PID=381

Для просмотра логов процессов, запущенных от имени определённого пользователя или группы, используются фильтры _UID и _GID соответственно. Предположим, у нас имеется веб-сервер, запущенный от имени пользователя www-data. Определим сначала ID этого пользователя:
Код: выделить все
id -u www-data
33

Теперь можно просмотреть логи всех процессов, запущенных от имени этого пользователя:
Код: выделить все
journalctl _UID=33

Вывести на консоль список пользователей, о которых имеются записи в логах, можно так:
Код: выделить все
journalctl -F _UID

Для просмотра аналогичного списка пользовательских групп используется команда:
Код: выделить все
journalctl -F _GUID

С командной journalctl можно использовать и другие фильтры. Просмотреть список всех доступных фильтров можно, выполнив команду
Код: выделить все
man systemd.journal-fields

 Просмотр сообщений ядра 
Для просмотра сообщений ядра используется опция -k или −−dmesg:
Код: выделить все
journalctl -k

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

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

Приведённая команда покажет все сообщения об ошибках, имевших место в системе.
Эти сообщения можно фильтровать по уровню. В journal используется такая же классификация уровней ошибок, как и в syslog:
0 — EMERG (система неработоспособна);
1 — ALERT (требуется немедленное вмешательство);
2 — CRIT (критическое состояние);
3 — ERR (ошибка);
4 — WARNING (предупреждение);
5 — NOTICE (всё нормально, но следует обратить внимание);
6 — INFO (информационное сообщение);
7 —DEBUG (отложенная печать).
Коды уровней ошибок указываются после опции -p.
 Просмотр информации о недавних событиях 
Опция -n используется для просмотра информации о недавних событиях в системе:
Код: выделить все
journalctl -n

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

Просмотр логов в режиме реального времени
Сообщения из логов можно просматривать не только в виде сохранённых файлов, но и в режиме реального времени. Для этого используется опция -f:
Код: выделить все
journalctl -f

 Определение текущего объёма логов 
Со временем объём логов растёт, и они занимают всё больше места на жёстком диске. Узнать объём имеющихся на текущий момент логов можно с помощью команды:
Код: выделить все
journalctl --disk-usage
Archived and active journals take up 608.0M in the file system.

 Чистка логов 
Настройка ротации логов осуществляется с помощью опций −−vacuum-size и −−vacuum-time.
Первая из них устанавливает предельно допустимый размер для хранимых на диске логов (в нашем примере — 1 ГБ):
Код: выделить все
journalctl --vacuum-size=1G

Как только объём логов превысит указанную цифру, лишние файлы будут автоматические удалены.
Аналогичным образом работает опция −−vacuum-time. Она устанавливает для логов срок хранения, по истечении которого они будут автоматически удалены:
Код: выделить все
journalctl --vacuum-time=1years

Чистка логов перед архивацией системы
Код: выделить все
find /var/log -regextype posix-egrep -regex '.*([0-9]{8}|old)$' -type f  -print0 | xargs -0 rm -f
journalctl --vacuum-time=1d
sync && sync

 Настройка ротации логов в конфигурационном файле 
Настройки ротации логов можно также прописать в конфигурационном файле /etc/systemd/journald.conf, который включает в числе прочих следующие параметры:
  • SystemMaxUse= максимальный объём, который логи могут занимать на диске;
  • SystemKeepFree= объём свободного места, которое должно оставаться на диске после сохранения логов;
  • SystemMaxFileSize= объём файла лога, по достижении которого он должен быть удален с диска;
  • RuntimeMaxUse= максимальный объём, который логи могут занимать в файловой системе /run;
  • RuntimeKeepFree= объём свободного места, которое должно оставаться в файловой системе /run после сохранения логов;
  • RuntimeMaxFileSize= объём файла лога, по достижении которого он должен быть удален из файловой системы /run.

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

С помощью команды systemd-journal-remote можно принимать логи с удалённых хостов и сохранять их (на каждом их этих$ хостов должен быть запущен демон systemd-journal-gatewayd), например:
Код: выделить все
systemd-journal-remote −−url https://some.host:19531/

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

С помощью команды systemd-journal-remote можно также складывать имеющиеся на локальной машине логи в отдельную директорию, например:
Код: выделить все
journalctl -o export | systemd-journal-remote -o /tmp/dir -

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

Как видно из приведённых примеров, «родные» утилиты systemd для поддержки централизованного логирования просты и удобны в работе. Но они, к сожалению, пока что включены далеко не во все дистрибутивы, а только в Fedora и ArchLinux.

Пользователи других дистрибутивов пока что приходится передавать логи в syslog или rsyslog, которые затем пересылают их по сети. Ещё одно решение проблемы централизованного логирования было предложено разработчиками утилиты journal2gelf, включённой в официальный репозиторий systemd: вывод journalсtl в формате JSON конвертируется в формат GELF, а затем передаётся приложению для сбора и анализа логов Graylog. Решение не очень удобное, но ничего лучше в текущей ситуации придумать нельзя. Остаётся только ждать, когда «родные» компоненты будут добавлены во все дистрибутивы.
Для желающих отблагодарить
SB: 4274320029755744
QIWI: +79175241450
Аватар пользователя
ROOT
Администратор
 
Сообщений: 137
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Вернуться в Fedora

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron