Блог компании 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 для поиска, фильтрации и преобразования данных журнала. Освоив эти утилиты, вы сможете упростить анализ журналов, обнаружить аномалии и повысить надежность системы. Эти инструменты повысят эффективность устранения неполадок и позволят автоматизировать проактивный мониторинг системы.