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

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

 

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

$ journalctl -b

все логи с нужной даты(или до неё --until):

$ journalctl --since "2015-07-20 17:15:00"    

$ journalctl ---since yesterday
$ journalctl --since 09:00 --until now
$ journalctl --since 10:00 --until "1 hour ago"

 

Для просмотра логов конкретного приложения или службы используется опция -u, например:

$ journalctl -u nginx.service
$ journalctl -u nginx.service --since yesterday

$ 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

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

$ journalctl /usr/bin/docker

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

$ journalctl -k



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

$ journalctl -k -b -2

 

Просмотреть сообщения обо всех ошибках, имевших место в системе, можно с помощью опции -p:

$ journalctl -p err -b

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

 

  • 0 — EMERG (система неработоспособна);
  • 1 — ALERT (требуется немедленное вмешательство);
  • 2 — CRIT (критическое состояние);
  • 3 — ERR (ошибка);
  • 4 — WARNING (предупреждение);
  • 5 — NOTICE (всё нормально, но следует обратить внимание);
  • 6 — INFO (информационное сообщение);
  • 7 —DEBUG (отложенная печать).

 

Коды уровней ошибок указываются после опции -p.

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

$ journalctl --no-pager

Опция -n используется для просмотра информации о недавних событиях в системе:

$ journalctl -n

Размер логов:

$ journalctl --disk-usage

 

Ротация логов, максимальное место(1G):

$ sudo journalctl --vacuum-size=1G

 

Ротация логов, срок хранения:

$ sudo journalctl --vacuum-time=1years

 

Настройки ротации логов можно также прописать в конфигурационном файле /еtc/systemd/journald.conf

++++++++++++++++++++++++++++++++++++++++++++++++++-

 

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

В 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/

https://habrahabr.ru/company/selectel/blog/264731/  -описание

https://habrahabr.ru/company/southbridge/blog/317182/  -дело

 

++++++++++++++++++++++++++-

 

  1. systemd-journal-gatewayd — http-демон, открывающий порт для просмотра (или скачивания) записей журнала
  2. systemd-journal-remote — демон, скачивающий или принимающий записи журналов на центральном сервере
  3. systemd-journal-upload — демон, дублирующий записи журналов на удаленный сервер

 

Все эти компоненты входят в centos-пакет systemd-journal-gateway, так что выполняем:

 

yum -y update && yum -y install systemd-journal-gateway

https://habrahabr.ru/company/southbridge/blog/317182/

https://serverfault.com/questions/758244/how-to-configure-systemd-journal-remote/758559