Все буде Україна!

Логи в Linux. Як знайти та прочитати?

  Юрій  | 

  Оновл. 29 Тра 2022  | 

 57

Процес завантаження системи, робота додатків та служб, різні дії користувачів, повідомлення ядра ОС та багато іншого — всі ці події реєструються в спеціальних журналах операційної системи, так званих log-файлах (або просто “логах”). Якщо в роботі системи щось піде не так, то ці файли стануть вам корисним джерелом інформації, за допомогою якого ви зможете розібратися в причинах проблем і самостійно їх усунути.

Як подивитися логи в Linux?

Більшість логів у Linux генеруються системними демонами syslogd або rsyslogd і зберігаються у звичайному текстовому файлі ASCII у каталозі /var/log. Цей каталог містить лог-файли самої ОС, служб та різних програм, запущених у системі. Ось як цей каталог виглядає у системі Debian Linux:

$ cd /var/log
$ ls

Якщо ви спробуєте переглянути якийсь лог-файл від імені звичайного користувача, то в 99% випадків система відповість вам повідомленням про брак прав доступу. Тому я заздалегідь переключився на користувача root (команда su -) і всі подальші дії виконуватимуться від його імені.

Тепер можна перейти до безпосереднього вивчення вмісту лог-файлів. Проте спочатку ми заглянемо всередину boot.log. Цей лог-файл містить інформацію про всі етапи завантаження операційної системи:

root@debian:/var/log# tail boot.log

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

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

   tail — вивід останніх 10 рядків;

   head — вивід перших 10 рядків;

   cat — вивід вмісту всього лог-файлу;

   grep — пошук у лог-файлі всіх входжень заданого виразу або фільтрація лог-файлу по вказаному виразу;

   zcat — вивід вмісту зжатих лог-файлів (з розширенням *.gz);

   zmore — посторінковий перегляд зжатих лог-файлів, без їх розпакування;

   zgrep — пошук всередині зжатого лог-файлу.

Основні логи

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

   системні лог-файли;

   лог-файли подій;

   лог-файли служб;

   лог-файли додатків.

Багато з цих лог-файлів розташовуються в каталозі var/log. Найбільш поширеними логами є:

   /var/log/boot.log — журнал завантаження системи (в ньому зберігається вся інформація, пов’язана з етапами завантаження ОС);

   /var/log/kern.log — журнал ядра (в ньому зберігаються повідомлення та попередження, які надходять безпосередньо від ядра Linux);

   /var/log/syslog або /var/log/messages — журнали, в яких зберігається інформація про загальну активність в системі (включаючи повідомлення етапу завантаження);

   /var/log/auth.log або /var/log/secure — журнали автентифікації та безпеки (у них зберігаються записи про всі спроби входу в систему, включаючи як успішні, так і невдалі);

   /var/log/debug — журнал відлагодження (у ньому зберігається докладна відлагоджувальна інформація системи та додатків);

   /var/log/daemon.log — журнал демонів (містить інформацію про події, пов’язані з різними запущеними в системі демонами/службами);

   /var/log/maillog або /var/log/mail.log — журнали поштових серверів (у яких зберігається інформація, що відноситься до поштових серверів та архівування електронних листів);

   /var/log/cron — журнал, в якому зберігається інформація про заплановані задачі (cron);

   /var/log/faillog — інформація про невдалі входи до системи. Журнал корисний для вивчення потенційних порушень безпеки, таких як: зламування облікових записів, спроби перебору паролів тощо;

   /var/log/dmesg — журнал повідомлень драйверів пристроїв. Вміст журналу можна переглянути за допомогою команди dmesg. Варто зауважити, що при досягненні своєї межі, старі повідомлення перезаписуються новими.

   /var/log/Xorg.x.log — журнал повідомлень X-сервера.

Залежно від вибраного дистрибутива ви можете зустріти наступні лог-файли менеджерів пакетів:

   /var/log/dpkg.log — журнал пакетів, встановлених через утиліту dpkg в системах на основі Debian Linux.

   /var/log/yum.log — журнал пакетів, встановлених через утиліту yum в системах на основі Red Hat Linux.

   /var/log/emerge.log — журнал пакетів (ebuild), встановлених через утиліту emerge в Gentoo Linux.

Не всі журнали зручні для читання. Деякі з них призначені лише для читання системними програмами та представлені у бінарному форматі даних:

   /var/log/utmp та /var/log/utmp — журнали обліку входів користувачів до системи. Для перегляду повідомлень використовується команда utmpdump, наприклад:

# utmpdump /var/log/wtmp

   /var/log/lastlog — журнал з інформацією про останні входи користувачів. Для перегляду повідомлень використовується команда lastlog:

Ротація лог-файлів

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

Суть ротації полягає у стисканні застарілих лог-файлів, які займають багато місця. Лог-файли, наприкінці імен яких додані нулі, є ротованими (їх імена були автоматично змінені системою). Ротацію лог-файлів можна виконати за допомогою команди logrotate, наприклад:

# logrotate /var/log/daemon.log

Налаштування ротації лог-файлів зберігаються у файлі конфігурації /etc/logrotate.conf:

var/log/ім'я_журналу.log {
Missingok
Notifempty
Compress
Size 20k
Daily
Create 0600 root root
}

Розглянемо кожен рядок вищенаведеного фрагмента:

   Missingok — вказує команді logrotate не виводити помилку, якщо лог-файл відсутній.

   Notifempty — якщо лог-файл пустий, то ротації не буде.

   Compress — лог-файл необхідно зжати.

   Size 20k — гарантує, що лог-файл не перевищує заданого розміру, інакше проводиться його ротація.

   Daily — ротація лог-файлів за щоденним розкладом. Також можна задати щогодинний (Hourly), щотижневий (Weekly), щомісячний (Monthly) або щорічний (Yearly) графік.

   Create 0600 root root — створює екземпляр лог-файлу, власником та групою якого є root.

Тепер, розібравшись з тим, що означає кожен параметр, можна кожному лог-файлу задавати індивідуальний параметр ротації.

systemd та journald

systemd — це підсистема ініціалізації та управління службами в Linux, що фактично витіснила у 2010-і роки традиційну підсистему init. Разом з нею працює і journaldдемон збору логів, що є частиною systemd. Він збирає логи з усієї системи та зберігає їх у бінарному вигляді у каталозі /var/log/journal. Для їх перегляду використовують спеціальну утиліту journalctl. Розглянемо кілька прикладів її застосування

Щоб переглянути останні 10 рядків логів усіх запусків системи, достатньо виконати наступну команду:

# journalctl --list-boots | tail

Бачите стовпець, який я обвів червоним? Цифрою 0 у ньому позначено поточне завантаження системи, цифрою -1 — попереднє і т.д. Якщо ви хочете переглянути логи якогось конкретного завантаження, наприклад, позаминулого, то достатньо ввести:

# journalctl -b -2

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

# journalctl -u NetworkManager

Або ж вивести повідомлення ядра ОС:

# journalctl -k

Для отримання своїх, якихось конкретніших результатів, допускається комбінувати опції та параметри команди journalctl:

# journalctl -b -1 -u NetworkManager

Для виводу інформації лише за кількома останніми записами, застосовується опція -n, яка задає їх кількість:

# journalctl -u NetworkManager -n 5

Якщо говорити про systemd, то, напевно, варто згадати і про команду systemd-analyze, яка відповідає за збір статистики завантаження системи. Застосування цієї команди без параметрів відобразить загальний час завантаження системи:

# systemd-analyze

За допомогою параметра blame можна побачити, скільки часу знадобилося для завантаження кожної конкретної служби (при цьому зверху відобразяться найповільніші):

# systemd-analyze blame

Пріоритет повідомлень в лог-файлах

Повідомлення в лог-файлах створюються залежно від типу подій. У свою чергу, подія має певний рівень важливості. Залежно від цієї важливості події надається певний пріоритет:

   emerg — найвищий пріоритет, щось зламалося, привід панікувати;

   alert — тривога, варто хвилюватися;

   crit — критична подія, варто насторожитися;

   err — помилка;

   warning — попередження;

   notice — сповіщення, можна не заморочуватися;

   info — інформаційне повідомлення, прийняти до відома та забути;

   debug — відлагоджувальна інформація.

Застосовуючи вищеописані значення пріоритетів, можна переглядати повідомлення лог-файлів, фільтруючи їх за заданим пріоритетом:

# grep 'err' /var/log/syslog

Або ж для journalctl:

# journalctl -p warning -b 0

Висновки

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

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (2 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *