Блог компанії 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-journal
d
Пошук у журналах за допомогою 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 для пошуку, фільтрації та перетворення даних журналу. Освоївши ці утиліти, ви зможете спростити аналіз журналів, виявити аномалії та підвищити надійність системи. Ці інструменти підвищать ефективність усунення неполадок і дадуть змогу автоматизувати проактивний моніторинг системи.