red |
|
Темы:
30
Сообщения:
1517
Участник с: 31 августа 2011
|
1. Доступ к журналу 2. Чтение журнала 2.1 Просмотр логов по сети 3. Запись в журнал 4. Поиск информации в журнале 5. Примеры ведения лога в скрипте (это не подробное руководство, здесь лишь описаны некоторые основные аспекты использования журнала в systemd) 1. Доступ к журналу для доступа к журналу пользователь должен входить в одну из трёх групп: wheel, adm или systemd-journal. Добавить пользователя в группу: Чтобы посмотреть группы в которые входит пользователь наберите groups $USERТакже журнал доступен из под рута напрямую(su) либо косвенно(через sudo). Файлы журнала располагаются по адресу: /var/log/journal/... - находиться на жёстком диске, при удалении этой папки логи после перезагрузки пушиться в /run/log/journal/ вместо перезагрузки можно перезапустить сервис либо/run/log/journal/... - находиться в оперативной памяти, как следствие полностью стирается после каждой перезагрузки компа. Хочу заметить что иногда может возникнуть проблема с доступом к журналу из за того что все или часть файлов в папке с логами принадлежит группе root вместо группы systemd-journal. Чтобы исправить это меняем группу:
Один из способов копирования логов с удалённого хоста имея ssh-доступ в текущую папку: естественно вместо user@remote.host ставим нужные данные2. Чтение журнала Так как логи у нас хранятся в бинарном виде то для просмотра нужна утилита из состава systemd - journalctl. Вывод последних 20-и (по умолчанию 10) сообщений из журнала: Отслеживания логов в реальном времени, предварительно также выводит последние 10 сообщений: Вывод всех сообщений с момента одной из последних загрузок: Также при выводе можно указать приоритет выводимых сообщений (про виды приоритетов написано ниже): Показывает все сообщения определённого процесса: Просмотр всех метаданных указанного процесса: Чтобы прочитать файлы журнала находящиеся не в стандартной директории (к примеру, скопировали логи с другого компа): более подробно можно глянуть в ArchWiki Journal2.1 Просмотр логов по сети Устанавливаем лёгкий HTTP сервер: Создаём системного пользователя systemd-journal-gateway: Запускаем: Проверяем: или в адресной строке браузера:
Более подробно можно почитать тут и тут 3. Запись в журнал Для записи в журнал используется утилита входящая в состав systemd - systemd-cat. (можно также использовать и logger утилита входящая в пакет util-linux, но здесь речь будет идти не о ней) Самый простой способ записи в журнал: Смотрим:
Теперь немного подробнее. -p - указывается приоритет, либо словом либо цифрой, по умолчанию - 6 (информационный).-t - указывается идентификатор сообщения, можно использовать потом для фильтрации нужной информации. После ввода через консоль или скриптом в журнал попадут сообщения: При появлении экстренного (0 - emerg) сообщения в журнале, информация о нём передаётся на все запущенные терминалы компьютера: Ещё кое что о приоритетах в systemd: заметил что если в подряд записывать сообщения в журнал с высоким приоритетом(2,1,0) то эти сообщения могут не попасть в него ну или как минимум могут возникнуть проблемы с их выводом на экран. Проблема решается установкой секундной паузы между записями(sleep 1). Также заметил что при высоких приоритетах(2,1,0) нецелесообразно использовать многострочные записи в журнал, так как информация урезается до первой строки: выведет только единицу:
Для записи в журнал можно использовать также и конвейер, но это чревато потерей потока ошибок (stdrr): поток ошибок выводиться на консоль, а поток вывода перенаправляется в журнал
Чтобы перенаправлять в канал помимо стандартного потока вывода ещё и поток ошибок нужно использовать конструкцию "|&":
Либо вообще можно поменять потоки местами: поток ошибок попадёт в журнал, а стандартный поток вывода на консоль man systemd-cat4. Поиск информации в журнале выводит все сообщения имеющие идентификатор сообщения Test. (из примера выше про приоритеты сообщений)Это и многое другое 1, 2 Помимо встроенных средств фильтрации можно использовать и стандартные: Также будет полезно полистать русский перевод systemd для администраторов5. Примеры ведения лога в скрипте Пример 1. создадим скрипт test1.sh
Вывод в консоли где запускали нашу программу:
Для наглядности можно отслеживать журнал в реальном времени по нужному нам маркеру, для этого запустим отдельную консоль и введём команду:
Некоторые пояснения. Каждая команда в языке линукс возвращает так называемый код завершения. Этот код в большинстве случаев при успешном завершении программы возвращает цифру 0, при неудаче возвращает число отличное от нуля. $? - это специальный параметр который хранит код завершения последний команды. Подробнее о кодах завершения тут и тут. Пример 2. Пример ф-и обёртки над systemd-cat. Данная функция: - обрабатывает код завершения команды - при успешном или нет выполнении команды делать запись об этом в журнал - также при ошибке поток ошибок направляется в журнал, а на стандартный вывод выводится предупреждение об ошибке - направляет дополнительную (поясняющую) запись в журнал со стандартного потока вывода Работа с функцией будет выглядеть примерно так:
|
tchgefest |
|
Темы:
51
Сообщения:
1505
Участник с: 20 октября 2008
|
Вот выдает journalctl SYSLOG_IDENTIFIER=TEST-- Logs begin at Сб 2014-04-19 15:03:33 , end at Вс 2014-04-20 20:06:38 И что я должен увидеть.Вы уж напишите,для такого как я,кто не читает wiki и не использует переводчик.Что значит параметр SYSLOG_IDENTIFIER в wiki это написано так......,а для чего я должен запускать такjournalctl SYSLOG_IDENTIFIER=TEST,что я увижу?Легче было спросить,как вы используете journalctl и какие параметры применяете,а потом систематизировать вот и все.Спасибо.
Последний крик моды - эхо 30-летней давности.
|
red |
|
Темы:
30
Сообщения:
1517
Участник с: 31 августа 2011
|
tchgefest tchgefest redвыводит все сообщения имеющие идентификатор сообщения TEST. redтакже там после описания параметра -t чуть ниже показан сам вывод, вот такой же вывод у вас должен получиться если бы вместо прочтения попробовали ввести пример где рассказывалось про приоритеты сообщений. если чуть подробнее то поле SYSLOG_IDENTIFIER - это идентификатор хранящий маркер вашего сообщения который вы даёте ему при отправке его в журнал посредством параметра -t в утилите systemd-cat (к примеру вот так: systemd-cat -t "TEST" echo "Текст сообщения"). По этому маркеру можно легко найти ваше сообщение или сообщения. Используя grep при поиске ключевого слова(маркера) можно тоже вывести все сообщения с ним, но это также может вывести и сообщения которые не содержат в своём идентификаторе нашего маркера, а похожее словосочетание может просто встретиться в теле самого сообщения. то есть используя SYSLOG_IDENTIFIER мы ведём поиск только по полям где находятся маркеры сообщений, а используя grep мы ведём поиск по всем полям, в том числе и по маркерам. tchgefestЖурналирование пока в процессе изучения, по сути оно мне понадобилось при написании программы для которой нужно вести логи. Для решения данной задачи решил воспользоваться средствами systemd. Статью скорее всего я ещё буду дополнять и подправлять, так что если по написанному тексту есть вопросы, задавайте, с радостью отвечу. |
tchgefest |
|
Темы:
51
Сообщения:
1505
Участник с: 20 октября 2008
|
Самое главное забыли
Последний крик моды - эхо 30-летней давности.
|
red |
|
Темы:
30
Сообщения:
1517
Участник с: 31 августа 2011
|
tchgefestок, добавил |
pethead |
|
Темы:
23
Сообщения:
127
Участник с: 21 февраля 2015
|
1. А чем журнал загрузки systemd отличается от dmesg?
This Must Be The Place I Waited Years To Leave
|
Aivar |
|
Темы:
4
Сообщения:
6897
Участник с: 17 февраля 2011
|
pethead, сравните - увидите. ) dmesg - лог сообщений ядра, многое из него дублируется в лог systemd, но если вам удобнее первое - не вопрос. |
pethead |
|
Темы:
23
Сообщения:
127
Участник с: 21 февраля 2015
|
AivarЯ ведь не праздно спрашивал, а принципиально. Что значит "многое", и где остальное, и почему нужно дублирование. если бы он вбирал в себя весь лог ядра + свое тогда понятно, а то "многое". Слишком неоднозначно. Сравнил. Весь лог ядра в этом журнале только время реальное а не от старта системы + вперемежку с логами самого демона. Вопрос такой. А где посмотреть лог который на экран выводится если нет флага quiet? Там еще выводится Welcome to ArchLinux. :) Или как его сделать чтоб тоже в файл кидался, если нет в файле.
This Must Be The Place I Waited Years To Leave
|
Aivar |
|
Темы:
4
Сообщения:
6897
Участник с: 17 февраля 2011
|
petheadВ таком же виде - нигде. Считайте, что сообщения "не молчаливой" загрузки - это интерпретация journalctl -b. |
pethead |
|
Темы:
23
Сообщения:
127
Участник с: 21 февраля 2015
|
Тогда перефразирую где подправить "Welcome to Arch Linux!" на свое? :) Нашел http://cgit.freedesktop.org/systemd/systemd/tree/src/shared/util.c?id=v205#n3035
This Must Be The Place I Waited Years To Leave
|