Как да използвате journalctl за четене на системни регистрационни файлове на Linux

Системното регистриране на Linux се промени с въвеждането на systemd. Научете как да използвате командата journalctl за четене и филтриране на съобщения в системния регистър.

Централизирано регистриране

Не е непознат за противоречията, системният мениджър на systemd и услугата въведоха значителна промяна в начина, по който се събират системните регистрационни файлове. Дневниците се намираха на различни места във файловата система в зависимост от услугата или демона, който ги създава. Но всички те имаха едно общо нещо. Те бяха обикновени текстови файлове.

С systemd всички регистрационни файлове на системата, зареждането и ядрото се събират и управляват от централно, специално решение за регистриране. Форматът, в който се съхраняват, е двоичен. Едно нещо, което улеснява, е възможността за извличане на данните в различни формати, като напр JSON, както ще видим.

може също така да улесни кръстосаното препращане на свързана информация, която преди това е била записана в отделни регистрационни файлове. Тъй като данните вече се съхраняват в един журнал, данните от няколко източника, представляващи интерес, могат да бъдат избрани и показани в един преплетен списък от записи.

journalctl е инструментът работил със списанието.

journalctl Без излишни излишъци

Можете да извикате journalctl без параметри на командния ред:

journalctl

journalctl показва целия дневник, като най-старите записи са в горната част на списъка. Списъкът се показва в по-малко, което ви позволява да страниците и да търсите, като използвате обичайните функции за навигация на по-малко. Можете също да използвате клавишите със стрелка наляво и стрелка надясно, за да превъртите настрани, за да прочетете широки записи в дневника.

Натискането на клавиша Край ще скочи направо до края на списъка и най-новите записи в дневника.

Натиснете Ctrl+C, за да излезете.

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

sudo journalctl

Ако трябва, можете да накарате journalctl да изпраща своя изход към прозореца на терминала вместо към по-малко, като използвате опцията –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 може да използва.

  Как да покажете датата и часа в терминала на Linux (и да го използвате в Bash скриптове)

Изходът по подразбиране е краткият формат, който е много подобен на класическия формат на системния журнал. За да заявите изрично краткия формат, използвайте опцията -o (изход) с модификатора short.

sudo journalctl -n 10 -o short-full

Отляво надясно полетата са:

Часът на създаване на съобщението в местно време.
Името на хоста.
Името на процеса. Това е процесът, който генерира съобщението.
Съобщението в дневника.

За да получите пълен печат за дата и час, използвайте модификатора 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 вчера до „сега“.

  Как да напишете Bash скриптове за автоматизиране на Linux

Ако искате да проучите нещо, което се е случило в близкото минало, можете да посочите относителен период от време, измерен в часове. Тук преглеждаме съобщенията в регистъра от последния час:

sudo journalctl -S -1h

Показват се съобщенията от последния час. Можете също да използвате „m“, за да зададете относителни периоди от време, измерени в минути, и „w“ за седмици.

journalctl разбира днес, вчера и утре. Тези модификатори осигуряват удобен начин за определяне на общи периоди от време. За да видите всички събития, случили се вчера, използвайте тази команда:

sudo journalctl -S yesterday

Всички събития в дневника, случили се вчера, до полунощ 00:00:00, се извличат и показват за вас.

За да видите всички регистрационни съобщения, получени днес досега, използвайте тази команда:

sudo journalctl -S today

Показва се всичко от 00:00:00 до момента на издаване на командата.

Можете да смесвате различните модификатори на период от време. За да видите всичко от преди два дни до началото на днешния ден, използвайте тази команда:

sudo journalctl -S -2d -U today

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

Избиране на регистрационни съобщения по полета с данни

Можете да търсите съобщения в журнала които отговарят на широк спектър от полета в списанието. Тези търсения се опитват да намерят съвпадения в метаданните, прикачени към всяко съобщение. Препоръчително е да вижте списъка с полета и изберете тези, които ще ви бъдат най-полезни.

Имайте предвид, че дали дадено приложение попълва всяко поле или не, зависи изцяло от авторите на приложението. Не можете да гарантирате, че всяко поле ще бъде попълнено.

Всички модификатори на полета в дневника се използват по същия начин. Ще използваме няколко в нашите примери по-долу. За да търсите регистрационни съобщения от конкретно приложение, използвайте модификатора _COMM (команда). Ако използвате и опцията -f (следване), journalctl ще проследява новите съобщения от това приложение, когато пристигат.

sudo journalctl -f _COMM=geek-app

Можете да търсите записи в журнала с помощта на ID на процеса на процеса, генерирал съобщението в журнала. Използвайте командата 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

Можете да направите това с всеки от идентификатори на полета в журнала.

  Как да инсталирате Graylog на вашия Linux сървър

Изброяване на съобщения на ядрото

Има вграден начин за бързо изолиране на съобщенията на ядрото. Не е нужно сами да ги търсите и изолирате. Опцията -k (ядро) премахва всички други съобщения и ви дава незабавен преглед на записите в дневника на ядрото.

sudo journalctl -k

Маркирането отразява важността на съобщението, според стойностите в полето Приоритет.

Преглед на съобщения за зареждане

Ако имате проблем, свързан със зареждането, който искате да проучите, journalctl ще ви покрие. Може би сте добавили нов хардуер и той не отговаря, или някой преди това работещ хардуерен компонент вече не работи след последното ви надграждане на системата.

За да видите записите в журнала, свързани с последното ви зареждане, използвайте опцията -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 MB изобщо не са много място, но за демонстрационни цели все пак ще го отрежем обратно. Има два начина да направим това. Първият е да зададете ограничение за размера, до което искате дневникът да бъде намален обратно. Ще порасне отново, разбира се, но можем да го подрежем вече готов за този нов растеж.

Ще използваме чудесно озаглавената опция – вакуумен размер и ще предадем размера, до който бихме искали дневникът да бъде намален. Ще поискаме 100 MB. Начинът да мислим за това е, че молим journalctl да „изхвърли каквото можеш, но не слизайте по-малко от 100 MB.“

journalctl --vacuum-size=100M

Другият начин да намалите размера на дневника е да използвате опцията –vacuum-time. Тази опция казва на journalctl да изхвърли съобщения, които са по-стари от периода, който предоставяте в командния ред. Можете да използвате дни, седмици, месеци и години в периода от време.

Нека премахнем всички съобщения, по-стари от една седмица:

journalctl --vacuum-time=1weeks

Данни срещу информация

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

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