systemd

Master journalctl разбира системните дневници

Master journalctl разбира системните дневници
Systemd е новата услуга за управление на инструменти. Създаден първоначално от Red Hat, той позволява по-добро управление на услуги чрез централизиран процес, който следи и стартира услуги при необходимост. Но systemd включва и система от контейнери, cron система, начин за осигуряване на временни директории на услуги по сигурен начин и също система за регистриране - това е мястото, където ще се съсредоточим тук.

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

Къде се съхраняват системни дневници? И в какъв формат се съхранява?

Ще приемем, че имате нормална система, защото systemd може да бъде персонализиран да бъде на изключителни места. Освен това някои дистрибуции на Linux като Ubuntu 16.04 деактивира постоянното регистриране по подразбиране, което пречи на systemd да свърши работата си правилно. Ако имате такова разпространение, редактирайте / etc / systemd / journald.conf, променете Storage = auto на Storage = persistent и накрая рестартирайте.

Така че ще намерите нормално системните регистрационни файлове в / var / log / journal. Системата за дневници сама по себе си е услуга, наречена system-journal.обслужване.  Нека се опитаме да изброим файловете в тази директория:

# ls / var / log / journal / -R
/ var / log / journal /:
15e43c1734090ac7fbea6b40fcd99d31
 
/ var / log / journal / 15e43c1734090ac7fbea6b40fcd99d31:
система @ a39da368947bd2ba-231f9bfc18a7a356.дневник ~
система @ 62ac1299826d036cb043d6c06a9493b7-0000000000000001-00067d6410099a19.списание
потребител-1000 @ b27e98812223a9bc-387e0521703f73d9.дневник ~
потребител-1000 @ 2123bc076b58569fe1fb13e9dbc1b0e0-0000000000000001-0007fe36ac2810e0.списание
потребител-1000.списание
[много други файлове като тези по-горе ...]

Тъй като искам да продължите да четете, трябваше да съкратя изхода, тъй като съдържа много файлове (в моя пример повече от 60 файла), извинете за това! Изкушен да отвори някой може би?

# head --bytes = 512 / var / log / journal / 15e43c1734090ac7fbea6b40fcd99d31 / [имейл защитен]
b58569fe1fb13e9dbc1b0e0-0000000000000001-0007fe36ac2810e0.списание
?s, q?n / FLz???Ulz?л?]????
?_?б???z????o?y1KN ?i?eO??W?u?  ?=?x0?L?д?7??X4n #?д? d3l?
стр??o | MFO:?!qs?.tK??R?\??1?| 5  ????$?ж??#?С??;??B7???????T???Y????mN?q????ZQ
?Yv?д?????BD?° С?? wF??г |
?2?? 7???????[??Un?= 8????° С?2 = р?&?"   ?0
????*????_??  ???
5?????yk?G? ?6?|??u??w: # 12?Y??
3 TU;???'?jX??2?х'?=??[[имейл защитен]
[имейл защитен]?_?>??3S???,lR?.?$?ж?L???с?/ Е??М1??q???

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

systemd не съхранява само дневници. Целта му е да улесни наблюдението и проучването на регистрационните файлове. За да се помогне в тази задача, регистрационните съобщения всъщност са ред от текст, придружен от данни като сериозност на дневника (предупреждение, грешка и т.н.), или дори полета, които биха били полезни само за вашето приложение (например поискан URL адрес).

# journalctl --output = многословен --all
ПРИОРИТЕТ = 6
_UID = 0
_GID = 0
_CAP_EFFECTIVE = 3fffffffff
_BOOT_ID = ee4cc2ce7e8273aaffb5fc59c873ce7b
_MACHINE_ID = bc422e0feaab64bb7dd218c24e6830e5
_HOSTNAME = linux
SYSLOG_FACILITY = 3
SYSLOG_IDENTIFIER = systemd
UNIT = dnf-makecache.обслужване
_TRANSPORT = дневник
_PID = 1
_COMM = systemd
_EXE = / usr / lib / systemd / systemd
_CMDLINE = / usr / lib / systemd / systemd --switched-root --system - deserialize 76
_SYSTEMD_CGROUP = / иницииране.обхват
_SYSTEMD_UNIT = иницииране.обхват
_SYSTEMD_SLICE =-.резен
_SELINUX_CONTEXT = system_u: system_r: init_t: s0
CODE_FILE = src / core / job.° С
CODE_LINE = 795
CODE_FUNCTION = message_log_status_message
MESSAGE_ID = a76e08846f5f0971371dbb11126e62e1
СЪОБЩЕНИЕ = Стартиран dnf makecache.
# journalctl --catalog --lines = 3000 --pager-end "_TRANSPORT = ядро" РЕЗУЛТАТ = готово
_SOURCE_REALTIME_TIMESTAMP = 1532886335471422

Казах ви, че има много полета (тук има 25 полета или 29 броя отпечатъци), всичкият фрагмент по-горе е само за едно съобщение в дневника! Голямата полза е, че можете да стартирате търсене чрез филтриране в което и да е поле в това съобщение. Това наистина ви позволява да усъвършенствате филтрирането.

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

Но това количество данни означава и нещо друго: в почти всички случаи никога няма да отворите ръчно файл и никога няма да докоснете папката / var / log / journal. Ще използвате journalctl за всяка задача, свързана с регистриране. Няма такова нещо за въртене на регистрационните файлове, всичко се управлява от времето за съобщения в дневника.

Освен това броят на полетата ще зависи от това колко добра е интеграцията на systemd във вашето приложение. Колкото повече полета съдържа дневник съобщение, толкова по-добре е. За базовите системни услуги systemd вече се погрижи да направи добра интеграция, но за други приложения и услуги качеството на интеграцията варира много. Обикновено това трябва да се подобрява с течение на времето, тъй като хората свикват да систематизират.

Добре, сега е време да открием характеристиките на journalctl.

Най-използваните команди за journalctl

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

# journalctl --catalog --lines = 3000 --pager-end "_TRANSPORT = ядро"

Показва ви пейджър, където можете да видите последните съобщения. Можете да превъртате нагоре до последните 3000 реда, като използвате клавишите със стрелки (↑ / ↓) или Page Up / Page Down. Флагът -catalog инструктира journalctl да показва контекст около линиите на регистрационния файл, подобно на рестартиране на компютъра или, в друг контекст, спиране / стартиране на услуга. Винаги поставям този флаг, тъй като контекстът винаги има значение, помага да се знае в коя ситуация се е появила регистрационната линия, така че можете да познаете защо имате тази регистрационна линия.

Сега, може би искате да видите само дневниците от текущото зареждане:

# journalctl --catalog --lines = 35000 --pager-end --boot "_TRANSPORT = kernel"

Обърнете внимание, че аргументът на командния ред -boot работи във всички ситуации, не само с дневниците на ядрото. Ако предпочитате да започнете отначало:

# journalctl --catalog --boot "_TRANSPORT = ядро"

Не знам дали е така за вас, но имам достатъчно дневници на ядрото! А какво да кажем за общ преглед на вашата машина?

# journalctl --catalog --lines = 3000 --pager-end

Леле, в системата ви се случват много неща! Тук би било полезно малко филтриране. Един от най-често използваните филтри е съвпадение на определена услуга (като вашия SSH сървър или HTTP сървър), името на системния елемент за SSH услуга е sshd.услуга, така че:

# journalctl --catalog --lines = 3000 --pager-end --unit = sshd.обслужване

Това е готино, нали? Е, използваем е само ако знаете името на услугата - но в много случаи не знаете името на тази услуга. Ако сте в подобна ситуация, може да искате списък на услугите, техните описания и състоянието им:

# systemctl list-units --type = услуга

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

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

# journalctl --catalog --lines = 3000 --pager-end --grep = "port"

Сега, ако търсите дума като CPU, тя ще търси само CPU с всички главни букви, няма да търси CPU.

# journalctl --catalog --lines = 3000 --pager-end --grep = "CPU"

Помните съобщението за грешка от външната система? Като цяло тези съобщения съдържат клеймо за време. За да филтрирате регистрационното съобщение, може да искате да използвате този клеймо. journalctl може да ви изброи всички регистрационни съобщения от определена дата и час с аргумента -since:

# journalctl --catalog --since = "2018-07-30 09:30:00"

Ако тази външна система е отдалечена или използва времеви марки UTC, ще искате да филтрирате въз основа на дата и час UTC и да покажете в терминала часовите марки UTC, така че не е необходимо да го конвертирате в главата си, което обикновено е наистина объркващо. За целта ще трябва да добавите UTC след времевия низ в аргумента -since. След това ще трябва да добавите флага -utc. Така например:

# journalctl --catalog --since = "2018-07-30 10:45:00 UTC" --utc

Имайте предвид, че можете да използвате флага -utc сам, в този случай той основно ще показва всички дати и часове в часовата зона на UTC.

# journalctl --catalog --lines = 3000 --pager-end --utc

Дневниците се управляват по-добре с journalctl

Както можете да видите с всички предишни команди, systemd journaling прави филтрирането и така отстраняването на грешки по-лесно, тъй като можете да изберете през всички редове на дневника с помощта на една команда, journalctl. Някои от вас вероятно са знаели древни времена, когато е трябвало ръчно да отваряте всеки файл в / var / log, за да имате обща представа за проблема и за случилото се. С всички съвети, които научихте тук, ще притежавате солидни инструменти за разглеждане на вашите регистрационни съобщения по начина, по който ВИЕ искате.

Безплатни и игри с отворен код за разработване на Linux игри
Тази статия ще обхване списък с безплатни двигатели за игри с отворен код, които могат да се използват за разработване на 2D и 3D игри на Linux. Същес...
Урок Сянка на Tomb Raider за Linux
Shadow of the Tomb Raider е дванадесетото допълнение към поредицата Tomb Raider - франчайз за екшън-приключенска игра, създаден от Eidos Montreal. Игр...
Как да увеличите FPS в Linux?
FPS означава Кадри в секунда. Задачата на FPS е да измерва честотата на кадрите при възпроизвеждане на видео или игрални изпълнения. С прости думи бро...