Блог компанії 3v-Hosting

Робота з журналами Linux: journalctl, grep, awk і sed

Адміністрування

6 хв.


Системні адміністратори Linux покладаються на файли журналів для моніторингу активності системи, усунення неполадок і забезпечення стабільності середовища. Уміння ефективно переміщатися, фільтрувати і працювати з журналами - критично важлива навичка, і Linux надає потужні інструменти, такі як journalctl, grep, awk і sed, щоб спростити цей процес. Ці утиліти допомагають витягувати необхідну інформацію, аналізувати поведінку системи та автоматизувати завдання обробки журналів. У цій статті ми розповімо про використання кожного інструменту, виділимо їхні переваги та практичне застосування в управлінні журналами Linux.

 

 


Логування в Linux

 

Системи Linux генерують величезну кількість журнальних даних, які зазвичай зберігаються в каталозі /var/log/. Ці журнали включають системні журнали, журнали автентифікації, журнали ядра і журнали, специфічні для додатків. Існують дві основні системи ведення журналів:

    Традиційні файли журналів: Зберігаються у вигляді звичайного тексту і доступні за допомогою таких інструментів, як cat, grep і awk.
    Журнал Systemd: Двійкова система ведення журналів, керована systemd-journald і доступна через journalctl.


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

 

 

 

 

Використання journalctl для аналізу журналів

 

journalctl - це основна команда для взаємодії з журналом systemd. На відміну від традиційних журналів, журнал структурований, індексований і здатний ефективно фільтрувати журнали.

 

Перегляд журналів

Основною командою для перегляду журналів є:

    journalctl

Вона відображає всі журнали в хронологічному порядку. Для відстеження журналів у реальному часі, аналогічно tail -f, використовуйте:

    journalctl -f

 

 

Фільтрація журналів за часом

Щоб проаналізувати певні періоди часу, використовуйте:

    journalctl --since «2024-02-01 00:00:00» --until «2024-02-02 23:59:59»

 

Для фільтрації за відносним часом:

    journalctl --since «1 hour ago»

 

 

Фільтрація за підрозділами або службами

Для отримання журналів, що належать до конкретної служби, використовуйте:

    journalctl -u sshd.service

 

Можна одночасно запитувати кілька модулів:

    journalctl -u nginx.service -u mysql.service

 

 

Перегляд журналів ядра

Журнали ядра необхідні для діагностики системних проблем:

    journalctl -k

Щоб переглянути журнали ядра з моменту завантаження:

    journalctl -k -b

 

 

Збереження журналів

За замовчуванням systemd-journald зберігає журнали в оперативній пам'яті. Щоб зробити їх постійними, налаштуйте файл /etc/systemd/journald.conf:

    [Journal]
    Storage=persistent

 

Перезапустіть службу, щоб застосувати зміни:

    systemctl restart systemd-journald

 

 

 

 

Пошук у журналах за допомогою grep

grep - це утиліта для пошуку тексту, яка дає змогу користувачам фільтрувати записи журналу за ключовими словами.

 

Основні способи пошуку

Пошук певного ключового слова у файлі журналу:

    grep «error» /var/log/syslog

 

Пошук без урахування регістру:

    grep -i «failed» /var/log/auth.log

 

 

Використання grep з journalctl

Об'єднайте journalctl і grep для більш точної фільтрації:

    journalctl | grep «disk failure»

 

 

Виділення збігів

Увімкніть виділення кольором для кращої читабельності:

    grep --color=auto «warning» /var/log/dmesg

 

 

Фільтрація кількох шаблонів

Для пошуку кількох шаблонів:

    grep -E «error|fail|critical» /var/log/syslog

 

 


 

Інші статті з адміністрування Linux у нашому блозі:


    - Як перевірити версію Ubuntu

    - Використання команди NsLookup у Windows та Linux

    - Як відкрити порт в UFW

    - Що таке LVM і як налаштувати LVM в Ubuntu

 


 

 

Обробка журналів за допомогою awk

 

awk - це потужний інструмент для опрацювання тексту, який дає змогу витягувати та форматувати дані з журналів.

 

Витяг певних полів

Для структурованих журналів awk допомагає витягти ключову інформацію. Приклад:

    awk '{print $1, $2, $3, $5}' /var/log/syslog

Витягуються перші три стовпці (дата і час) і п'ятий стовпець (повідомлення журналу).

 

 

Фільтрація журналів за умовами

Щоб відфільтрувати журнали за умовами:

    awk '$5 == «ERROR»' /var/log/syslog

Відобразяться тільки ті рядки, в яких п'яте поле дорівнює «ERROR».

 

Форматування виведення журналу

Щоб переформатувати журнали для зручності читання:

    awk '{print «Timestamp: “$1, ”Message: “$5}” /var/log/syslog

 

 

 

 

Маніпулювання журналами за допомогою sed

 

sed (Stream Editor - Редактор потоків) дає змогу «на льоту» маніпулювати текстом у журналах.


Заміна тексту

Щоб замінити входження слова:

    sed 's/error/ERROR/g' /var/log/syslog


Видалення непотрібних рядків

Видалення порожніх рядків із файлу журналу:

    sed '/^$/d' /var/log/syslog

 

Вилучення специфічної інформації

Щоб витягти рядки, що містять слово «failed», і видалити інший вміст:

    sed -n '/failed/p' /var/log/auth.log

 

 

 

 

Автоматизація обробки журналу

 

Поєднання journalctl, grep, awk і sed дає змогу автоматизувати аналіз журналів. Наприклад, щоб витягти помилки автентифікації та відформатувати їх:

    journalctl -u sshd | grep «Failed password» | awk '{print $1, $2, $3, $9}' | sed 's/root/admin/g'

Це витягне тимчасову мітку, ім'я користувача і переформатує висновок для наочності.

 

 

 

 

Висновок

Якщо ви хочете стати системним адміністратором, ви повинні розуміти, як ефективно працювати з журналами Linux. Використовуйте journalctl для розширеного інтерфейсу журналів systemd, а grep, awk і sed для пошуку, фільтрації та перетворення даних журналу. Освоївши ці утиліти, ви зможете спростити аналіз журналів, виявити аномалії та підвищити надійність системи. Ці інструменти підвищать ефективність усунення неполадок і дадуть змогу автоматизувати проактивний моніторинг системи.