Як використовувати journalctl для читання системних журналів Linux

Системний журнал Linux змінився з появою systemd. Дізнайтеся, як використовувати команду journalctl для читання та фільтрації повідомлень системного журналу.

Централізоване ведення журналу

Не дивлячись на суперечки, менеджер системи та служб systemd вніс значні зміни у спосіб збирання системних журналів. Раніше журнали розміщувалися в різних місцях файлової системи відповідно до служби або демона, який їх створював. Але всіх їх об’єднувало одне. Це були звичайні текстові файли.

За допомогою systemd усі файли журналів системи, завантаження та ядра збираються та керуються центральним спеціалізованим рішенням для журналів. Формат, у якому вони зберігаються, є двійковим. Це полегшує можливість витягувати дані в різних форматах, наприклад JSON, як ми побачимо.

це також може полегшити перехресні посилання на пов’язану інформацію, яка раніше була б записана в окремих файлах журналів. Оскільки дані тепер зберігаються в одному журналі, дані з кількох джерел, що цікавлять, можна вибрати та відобразити в одному переплетеному списку записів.

journalctl є інструментом звик працювати з журналом.

journalctl Без надмірностей

Ви можете викликати journalctl без параметрів командного рядка:

journalctl

journalctl відображає весь журнал з найстарішими записами у верхній частині списку. Список відображається меншим розміром, що дозволяє переглядати сторінки та шукати за допомогою звичайних функцій навігації. Ви також можете використовувати клавіші зі стрілкою вліво та вправо для прокручування вбік, щоб прочитати широкі записи журналу.

Натискання клавіші End призведе до переходу в нижню частину списку та найновіші записи журналу.

Натисніть Ctrl+C, щоб вийти.

Хоча journalctl можна викликати без використання sudo, Ви переконаєтеся, що бачите всі деталі у журналі, якщо ви використовуєте sudo.

sudo journalctl

Якщо вам потрібно, ви можете змусити journalctl надсилати свій вихід у вікно терміналу, а не на less, використовуючи параметр –no-pager.

sudo journalctl --no-pager

Вивід швидко прокручується у вікні терміналу, і ви повертаєтеся до командного рядка.

Щоб обмежити кількість рядків, які повертає journalctl, використовуйте параметр -n (рядки). Давайте попросимо десять рядків виводу:

sudo journalctl -n 10

Після оновлення журналу

Щоб змусити journalctl відображати найновіші записи, коли вони надходять до журналу, використовуйте параметр -f (слідувати).

sudo journalctl -f

Найновіший запис має мітку часу 07:09:07. Коли відбувається нова діяльність, нові записи додаються в нижню частину дисплея. Оновлення майже в реальному часі — круто!

О 07:09:59 програма під назвою geek-app внесла в журнал запис із написом «Нове повідомлення від HTG».

Зміна формату відображення

Оскільки журнал є двійковим файлом, дані в ньому потрібно перекласти або проаналізувати в текст, перш ніж його можна буде відобразити. За допомогою різних синтаксичних аналізаторів можна створити різні вихідні формати з одних і тих самих двійкових вихідних даних. Існує кілька різних форматів, які може використовувати journalctl.

Виводом за замовчуванням є короткий формат, який дуже схожий на класичний формат системного журналу. Щоб явно запитати короткий формат, використовуйте параметр -o (виведення) з модифікатором short.

sudo journalctl -n 10 -o short-full

Зліва направо розташовані поля:

  Як встановити Graylog на ваш сервер Linux

Час створення повідомлення за місцевим часом.
Ім’я хоста.
Назва процесу. Це процес, який створив повідомлення.
Повідомлення журналу.

Щоб отримати повну відмітку дати та часу, використовуйте модифікатор short-full:

sudo journalctl -n 10 -o short-full

Формати дати та часу в цьому виводі – це формат, у якому вам потрібно вказати дати та час, коли ви вибираєте повідомлення журналу за періодом, як ми побачимо незабаром.

Щоб переглянути всі метадані, які супроводжують кожне повідомлення журналу, використовуйте модифікатор verbose.

sudo journalctl -n 10 -o verbose

Там є багато можливих полів, але рідко всі поля присутні в повідомленні.

Одне поле, яке варто обговорити, — це поле Пріоритет. У цьому прикладі воно має значення 6. Значення відображає важливість повідомлення:

0: Надзвичайна ситуація. Система непридатна для використання.
1: Сповіщення. Позначено стан, який слід негайно виправити.
2: Критично. Це охоплює збої, coredump та значні збої в основних програмах.
3: Помилка. Повідомлено про помилку, але вона не вважається серйозною.
4: Попередження. Звертає вашу увагу на умову, яка, якщо її проігнорувати, може стати помилкою.
5: Зверніть увагу. Використовується для повідомлення про незвичайні події, але не про помилки.
6: Інформація. Регулярні оперативні повідомлення. Ці дії не потребують.
7: Налагодження. Повідомлення вміщуються в програми, щоб полегшити їх налагодження.

Якщо ви хочете, щоб вихід був представлений як правильно сформований Нотація об’єктів JavaScript (JSON), використовуйте модифікатор json:

sudo journalctl -n 10 -o json

Кожне повідомлення належним чином обгорнуто як добре сформований об’єкт JSON і відображає одне повідомлення на рядок виводу.

Щоб мати вихід JSON гарно надрукований, використовуйте модифікатор json-pretty.

sudo journalctl -n 10 -o json-pretty

Кожен об’єкт JSON розбивається на кілька рядків, причому кожна пара ім’я-значення в новому рядку.

Щоб бачити лише повідомлення про записи журналу, без позначок часу чи інших метаданих, використовуйте модифікатор cat:

sudo journalctl -n 10 -o cat

Цей формат відображення може ускладнити визначення, який процес викликав подію журналу, хоча деякі повідомлення містять підказку.

Вибір повідомлень журналу за періодом часу

Щоб обмежити вихід з journalctl періодом часу, який вас цікавить, використовуйте параметри -S (з) і -U (до).

Щоб переглянути записи журналу за певний час і дату, скористайтеся цією командою:

sudo journalctl -S "2020-91-12 07:00:00"

sudo journalctl -S

На дисплеї відображаються лише повідомлення, які надійшли після дати та часу в команді.

Вихід із sudo journalctl -S

Щоб визначити період часу, про який ви хочете звітувати, використовуйте разом параметри -S (з) і -U (до). Ця команда переглядає повідомлення журналу за 15-хвилинний період часу.:

sudo journalctl -S "2020-91-12 07:00:00" -U "2020-91-12 07:15:00"

sudo journalctl -S

Це чудова комбінація, якщо ви знаєте, що у вашій системі сталося щось дивне і приблизно коли це сталося.

вихід із sudo journalctl -S

Використання відносних періодів часу

Ви можете використовувати відносну адресацію, коли вибираєте періоди часу. Це означає, що ви можете сказати щось на кшталт «показати мені всі події від одного дня до цього моменту». Це саме те, що означає ця команда. «d» означає «день», а «-1» означає один день у минулому.

sudo journalctl -S -1d

Повідомлення журналу відображаються з 00:00:00 вчора до “зараз”.

Якщо ви хочете дослідити щось, що сталося в недалекому минулому, ви можете вказати відносний період часу, виміряний годинами. Тут ми переглядаємо повідомлення журналу за останню годину:

sudo journalctl -S -1h

Для вас відображаються повідомлення за останню годину. Ви також можете використовувати «m», щоб встановити відносні періоди часу, виміряні в хвилинах, і «w» для тижнів.

  Як зберегти липкі нотатки в Linux за допомогою індикатора Stickynotes

journalctl розуміє сьогодні, вчора і завтра. Ці модифікатори забезпечують зручний спосіб вказувати загальні періоди часу. Щоб побачити всі події, які відбулися вчора, скористайтеся цією командою:

sudo journalctl -S yesterday

Усі події журналу, які відбулися вчора, до півночі 00:00:00, витягуються та відображаються для вас.

Щоб переглянути всі повідомлення журналу, отримані сьогодні, скористайтеся цією командою:

sudo journalctl -S today

Відображається все, починаючи з 00:00:00 до моменту введення команди.

Ви можете змішувати різні модифікатори періоду часу. Щоб побачити все від двох днів тому до початку сьогоднішнього дня, скористайтеся цією командою:

sudo journalctl -S -2d -U today

Все з позавчорашнього дня до сьогодні витягується та відображається.

Вибір повідомлень журналу за полями даних

Ви можете шукати повідомлення в журналі які відповідають широкому діапазону полів журналу. Ці пошуки намагаються знайти відповідності в метаданих, доданих до кожного повідомлення. Рекомендується вам зверніться до списку полів і виберіть ті, які будуть вам найбільш корисні.

Майте на увазі, чи заповнює програма кожне поле чи ні, повністю залежить від авторів програми. Ви не можете гарантувати, що кожне поле буде заповнено.

Усі модифікатори полів журналу використовуються однаково. Ми будемо використовувати кілька у наших прикладах нижче. Щоб шукати повідомлення журналу з певної програми, використовуйте модифікатор _COMM (команда). Якщо ви також використовуєте параметр -f (follow), journalctl відстежуватиме нові повідомлення з цієї програми в міру їх надходження.

sudo journalctl -f _COMM=geek-app

Ви можете шукати записи журналу за допомогою ідентифікатор процесу процесу, який створив повідомлення журналу. Використовуйте команду ps, щоб знайти ідентифікатор процесу демона або програми, яку ви збираєтеся шукати.

sudo journalctl _PID=751

На машині, яка використовується для дослідження цієї статті, SSH демон – це процес 751.

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

sudo journalctl _UID=1000

Усі повідомлення, пов’язані з будь-якими іншими ідентифікаторами користувача, відфільтровуються. Відображаються лише повідомлення, пов’язані з користувачем 1000:

Інший спосіб пошуку повідомлень журналу, пов’язаних із певною програмою, — це вказати шлях до виконуваного файлу.

sudo journalctl /usr/bin/anacron

Весь анакрон повідомлення журналу планувальника витягуються та відображаються.

Щоб полегшити пошук, ми можемо попросити journalctl перерахувати всі значення, які він містить, для будь-якого з полів журналу.

Щоб побачити ідентифікатор користувача, для якого journalctl записав повідомлення журналу, скористайтеся параметром -F (поля) та передайте ідентифікатор поля _UID.

journalctl -F _UID

Давайте зробимо це ще раз і подивимося на ідентифікатори груп (GID):

journalctl -F _GID

Ви можете зробити це за допомогою будь-якого з ідентифікатори полів журналу.

Перелік повідомлень ядра

Існує вбудований спосіб швидкої ізоляції повідомлень ядра. Вам не потрібно шукати та ізолювати їх самостійно. Параметр -k (ядро) видаляє всі інші повідомлення та дає вам миттєвий перегляд записів журналу ядра.

sudo journalctl -k

Підсвічування відображає важливість повідомлення відповідно до значень у полі Пріоритет.

Перегляд повідомлень про завантаження

Якщо у вас є проблема, пов’язана із завантаженням, яку ви хочете дослідити, journalctl допоможе вам. Можливо, ви додали нове обладнання, але воно не відповідає, або раніше працюючий апаратний компонент більше не працює після останнього оновлення системи.

  Як грати в The Room на Linux

Щоб переглянути записи журналу, пов’язані з вашим останнім завантаженням, використовуйте параметр -b (завантаження):

journalctl -b

Для вас відображаються записи журналу для останнього завантаження.

Коли ми говоримо «останнє завантаження», ми маємо на увазі процес завантаження, який оживив ваш комп’ютер під час поточного сеансу входу. Щоб побачити попередні завантаження, ви можете використати число, щоб повідомити journalctl, яке завантаження вас цікавить. Щоб побачити третє попереднє завантаження, скористайтеся цією командою:

journalctl -b 3

Загалом, якщо у вас виникла проблема і вам довелося перезавантажити комп’ютер, вас цікавить попередня послідовність завантаження. Отже, це звичайна форма команди.

З послідовністю чобіт легко зплутатися. Щоб допомогти, ми можемо попросити journalctl перерахувати завантаження, які він записав у своєму журналі, використовуючи параметр –list-boots.

journalctl --list-boots

Ви можете визначити завантаження, для якого хочете бачити повідомлення, за міткою дати та часу, а потім використовувати номер у лівій колонці, щоб отримати повідомлення журналу для цієї послідовності завантаження. Ви також можете вибрати 32-розрядний ідентифікатор завантаження та передати його в journalctl.

sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7

Повідомлення журналу із запитаної нами послідовності завантаження витягуються та відображаються.

Управління місцем на жорсткому диску журналу

Звичайно, журнал і всі його повідомлення зберігаються на вашому жорсткому диску. Це означає, що вони будуть займати місце на жорсткому диску. Щоб побачити, скільки місця було зайнято журналом, скористайтеся параметром –disk-usage.

journalctl --disk-usage

Із сучасних жорстких дисків 152 МБ — це зовсім небагато місця, але для демонстраційних цілей ми все одно зменшимо його. Ми можемо це зробити двома способами. По-перше, установіть обмеження розміру, до якого ви хочете зменшити журнал. Звичайно, він знову виросте, але ми можемо обрізати його зараз, готовий до нового зростання.

Ми скористаємося чудовою назвою – параметр вакуумного розміру та введемо розмір, до якого ми хотіли б зменшити журнал. Ми просимо 100 МБ. Як думати про це, ми просимо journalctl «викинути все, що можна, але не зменшуйся менше ніж 100 МБ».

journalctl --vacuum-size=100M

Інший спосіб скоротити розмір журналу — використовувати параметр –vacuum-time. Ця опція вказує journalctl відкидати повідомлення, старіші за період, який ви вказали в командному рядку. У період часу можна використовувати дні, тижні, місяці та роки.

Давайте вилучимо всі повідомлення старше одного тижня:

journalctl --vacuum-time=1weeks

Дані проти інформації

Дані не корисні, якщо ви не можете отримати їх і використовувати їх. Тоді це стає корисною інформацією. Команда journalctl є гнучким і складним інструментом, який дозволяє отримувати цікаву інформацію різними способами.

Ви можете використовувати майже будь-який фрагмент інформації, який маєте, у потрібних вам повідомленнях журналу.