Введение
Анализ логов — ключевой навык для любого администратора Linux. Логи содержат информацию о работе системы, служб и приложений, помогая быстро диагностировать сбои, отслеживать безопасность и оптимизировать производительность. В этом гайде вы узнаете, как эффективно работать с логами в Linux, используя как стандартные утилиты, так и современные инструменты.
Требования
Перед началом убедитесь, что:
- У вас есть доступ к Linux-системе (физической или виртуальной) с установленным дистрибутивом на базе systemd (например, Ubuntu 22.04, CentOS 8).
- Вы знакомы с базовыми командами командной строки.
- Для доступа к некоторым логам могут потребоваться права суперпользователя (используйте
sudo).
Шаг 1: Понимание структуры логов в Linux
В Linux логи хранятся в двух основных форматах:
- Файловые логи: традиционные текстовые файлы в директории
/var/log/. Сюда попадают логи ядра (kern.log), системы (syslog), аутентификации (auth.log), пакетного менеджера (dpkg.logилиyum.log) и многие другие. - Системный журнал systemd: бинарный журнал, управляемый
systemd-journald. Доступен через командуjournalctl, хранится в/var/log/journal/(если включено постоянное хранение).
По умолчанию, многие современные дистрибутивы используют systemd journal, но также могут писать в файловые логи через службы вроде rsyslog или syslog-ng.
Чтобы увидеть список логов в /var/log/, выполните:
ls -la /var/log/
Для просмотра активного journal:
sudo journalctl --disk-usage # проверить размер журнала
Шаг 2: Использование базовых команд для просмотра логов
Для работы с файловыми логами используйте стандартные утилиты:
less: постраничный просмотр.less /var/log/syslogtail: просмотр последних строк.tail -f /var/log/syslogдля реального времени.grep: поиск по шаблону.grep "error" /var/log/sysloghead: просмотр первых строк.head -n 50 /var/log/syslog
Комбинируйте команды для эффективного анализа. Например, чтобы найти последние 10 ошибок в syslog:
grep "error" /var/log/syslog | tail -n 10
Для journalctl аналогичные операции:
journalctl: просмотр всего журнала.journalctl -f: отслеживание в реальном времени.journalctl -u ssh.service: логи конкретной службы.journalctl --since "2026-02-14 09:00:00": фильтрация по времени.
Шаг 3: Фильтрация и поиск в логах
Более сложная фильтрация требует использования grep с регулярными выражениями или awk для извлечения полей.
Пример: найти все неудачные попытки SSH в auth.log:
grep "Failed password" /var/log/auth.log
С помощью awk можно извлечь IP-адреса:
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr
Это покажет количество неудачных попыток с каждого IP.
Для journalctl используйте встроенные фильтры:
journalctl _COMM=sshd # только логи sshd
journalctl PRIORITY=err # только ошибки
journalctl --boot -1 # логи предыдущей загрузки
Шаг 4: Анализ логов безопасности
Логи безопасности критически важны. Основные файлы:
/var/log/auth.log(Debian/Ubuntu) или/var/log/secure(RHEL/CentOS) для аутентификации./var/log/faillogдля неудачных попысков входа (просмотр черезfaillog).- Логи брандмауэра (например,
ufwв/var/log/ufw.log).
Регулярно проверяйте на подозрительную активность. Автоматизируйте с помощью скриптов или инструментов вроде fail2ban, которые сами анализируют логи и блокируют IP.
Шаг 5: Автоматизация и мониторинг
Для постоянного мониторинга используйте:
- logwatch: ежедневные отчеты по почте. Установка:
sudo apt install logwatch(Debian/Ubuntu) илиsudo yum install logwatch(RHEL). Настройка в/etc/logwatch/. - Logrotate: автоматическая ротация логов, настроена по умолчанию. Проверьте
/etc/logrotate.conf/. - ELK stack (Elasticsearch, Logstash, Kibana) или Grafana Loki для централизованного сбора и визуализации логов в больших средах.
Пример простого скрипта для оповещения о критических ошибках:
#!/bin/bash
if journalctl -p err --since "1 hour ago" | grep -q ".*"; then
echo "Обнаружены ошибки в логах за последний час" | mail -s "Ошибки в системе" admin@example.com
fi
Добавьте в cron для регулярного запуска.
Проверка результата
После прохождения гайда вы должны уметь:
- Находить и открывать основные логи системы.
- Использовать
grep,awk,journalctlдля фильтрации. - Диагностировать распространенные проблемы (например, ошибки служб, неудачные логины).
- Настраивать базовый мониторинг логов.
Проверьте себя: попробуйте найти все ошибки kernel за последний день или определить, какая служба генерирует больше всего логов.
Возможные проблемы
- Ошибки доступа: Некоторые логи требуют прав root. Используйте
sudoили добавьте пользователя в группуadm(Debian/Ubuntu) илиwheel(RHEL). - Большой объем логов: Journal может занимать много места. Настройте ограничения в
/etc/systemd/journald.conf(параметрыSystemMaxUse,MaxRetentionSec). Для файловых логов настройте logrotate. - Неправильные фильтры: Убедитесь, что используете правильные имена служб или пути. Для journalctl проверьте доступные поля через
journalctl -F. - Отсутствие логов: Некоторые службы могут не писать в стандартные логи. Проверьте их конфигурацию (например, в
/etc/rsyslog.confили для systemd-сервисов черезStandardOutput).
Если логи не появляются, перезапустите службу или systemd-journald.