Home » Как просматривать и настраивать логи Linux на Ubuntu, Debian и CentOS
Как просматривать и настраивать логи Linux на Ubuntu, Debian и CentOS

Как просматривать и настраивать логи Linux на Ubuntu, Debian и CentOS

Логи — это нервная система любого сервера. Они говорят правду о том, что происходит в системе, когда админ спит, а пользователи активно ломают всё подряд. Если вы хотите понимать, что творится с вашим сервером, уметь быстро диагностировать проблемы и настраивать мониторинг — эта статья для вас. Здесь мы разберём, как работать с логами в трёх основных дистрибутивах Linux: Ubuntu, Debian и CentOS. Поговорим о встроенных инструментах, настройке логирования, парсинге и автоматизации. Сразу предупреждаю — будет много практических команд, которые вы сможете использовать прямо сейчас.

Где живут логи и как они устроены

В Linux-системах логи обычно складываются в /var/log/. Это как библиотека, где каждая полка отвечает за свой тип событий. Но за порядком в этой библиотеке следят разные “библиотекари” — системы логирования.

В современных дистрибутивах есть два основных подхода:

  • Традиционный syslog — текстовые файлы, которые можно читать любым редактором
  • systemd journal — бинарные логи с расширенными возможностями поиска

Ubuntu и Debian по умолчанию используют оба подхода: systemd собирает логи в journal, а rsyslog дублирует их в текстовые файлы. CentOS 7+ тоже использует systemd, но настройки могут отличаться.

Основные команды для работы с логами

Начнём с базовых команд, которые должен знать каждый админ:

# Просмотр основных системных логов
sudo journalctl                    # Все логи systemd
sudo journalctl -f                 # Следить за логами в реальном времени
sudo journalctl -u apache2         # Логи конкретного сервиса
sudo journalctl --since "1 hour ago"  # Логи за последний час

# Работа с традиционными логами
sudo tail -f /var/log/syslog      # Следить за системными логами
sudo tail -f /var/log/apache2/access.log  # Логи веб-сервера
sudo grep "ERROR" /var/log/syslog # Поиск ошибок
sudo less /var/log/auth.log       # Логи аутентификации

# Поиск и фильтрация
sudo journalctl -p err            # Только ошибки
sudo journalctl -p warning        # Предупреждения и выше
sudo journalctl --since "2023-01-01" --until "2023-01-02"  # По дате

Структура логов в разных дистрибутивах

Хотя основная структура похожа, есть нюансы:

Путь Ubuntu/Debian CentOS/RHEL Описание
/var/log/syslog Основной системный лог
/var/log/messages Системные сообщения
/var/log/auth.log Аутентификация
/var/log/secure Безопасность и аутентификация
/var/log/kern.log Логи ядра

Настройка rsyslog

Rsyslog — это мощный инструмент для маршрутизации и обработки логов. Конфигурация лежит в /etc/rsyslog.conf и файлах в /etc/rsyslog.d/.

Базовая настройка выглядит так:

# Создаём собственный лог-файл для приложения
sudo nano /etc/rsyslog.d/50-myapp.conf

# Добавляем правило
# Все сообщения с тегом 'myapp' отправляем в отдельный файл
:syslogtag, isequal, "myapp:" /var/log/myapp.log
& stop

# Перезапускаем rsyslog
sudo systemctl restart rsyslog

Для отправки логов на удалённый сервер:

# В /etc/rsyslog.conf добавляем строку
*.* @192.168.1.100:514    # UDP
*.* @@192.168.1.100:514   # TCP

Работа с systemd journal

Systemd journal — это современная система логирования, которая хранит структурированные данные и позволяет делать сложные запросы:

# Настройка journal
sudo nano /etc/systemd/journald.conf

# Основные параметры
Storage=persistent        # Сохранять логи на диск
SystemMaxUse=1G          # Максимальный размер
SystemMaxFileSize=100M   # Размер одного файла
MaxRetentionSec=2week    # Время хранения

# Применяем настройки
sudo systemctl restart systemd-journald

Мощные возможности поиска в journal:

# Поиск по полям
sudo journalctl _COMM=sshd              # По имени процесса
sudo journalctl _PID=1234               # По PID
sudo journalctl _UID=1000               # По пользователю
sudo journalctl PRIORITY=3              # По приоритету

# Комбинирование условий
sudo journalctl _COMM=apache2 PRIORITY=3

# Вывод в JSON для парсинга
sudo journalctl -o json-pretty | head -20

Ротация логов с logrotate

Logrotate предотвращает переполнение диска, архивируя старые логи:

# Настройка для собственного приложения
sudo nano /etc/logrotate.d/myapp

/var/log/myapp.log {
    daily                    # Ротация каждый день
    rotate 7                 # Хранить 7 архивов
    compress                 # Сжимать старые файлы
    delaycompress           # Сжимать со второй ротации
    missingok               # Не ругаться, если файл отсутствует
    notifempty              # Не ротировать пустые файлы
    postrotate
        systemctl reload myapp
    endscript
}

# Тестируем конфигурацию
sudo logrotate -d /etc/logrotate.d/myapp

Практические кейсы и решения

Кейс 1: Мониторинг неудачных входов SSH

# Создаём скрипт мониторинга
#!/bin/bash
# /usr/local/bin/ssh-monitor.sh

# Для Ubuntu/Debian
AUTH_LOG="/var/log/auth.log"
# Для CentOS
# AUTH_LOG="/var/log/secure"

# Ищем неудачные попытки входа за последние 10 минут
FAILED_ATTEMPTS=$(grep "Failed password" $AUTH_LOG | \
    grep "$(date +%b\ %d\ %H:%M -d '10 minutes ago')" | \
    wc -l)

if [ $FAILED_ATTEMPTS -gt 10 ]; then
    echo "ALERT: $FAILED_ATTEMPTS failed SSH attempts detected!"
    # Отправляем уведомление
    mail -s "SSH Alert" admin@example.com <<< "Too many failed attempts"
fi

Кейс 2: Анализ логов веб-сервера

# Топ IP-адресов по количеству запросов
sudo awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -10

# Топ страниц по количеству обращений
sudo awk '{print $7}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -10

# Поиск ошибок 404
sudo grep " 404 " /var/log/apache2/access.log | head -10

# Статистика по User-Agent
sudo awk -F'"' '{print $6}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -10

Кейс 3: Централизованное логирование

Настройка сервера для сбора логов:

# На сервере логов (Ubuntu/Debian)
sudo nano /etc/rsyslog.conf

# Раскомментируем UDP и TCP приём
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514

# Создаём шаблон для сохранения по хостам
$template RemoteHost,"/var/log/remote/%HOSTNAME%/%$YEAR%-%$MONTH%-%$DAY%.log"
*.* ?RemoteHost

# Перезапускаем
sudo systemctl restart rsyslog

Инструменты для анализа логов

Помимо стандартных утилит, есть специализированные инструменты:

  • GoAccess — веб-анализатор логов в реальном времени
  • MultiTail — просмотр нескольких логов одновременно
  • lnav — продвинутый просмотрщик логов
  • Logwatch — автоматические отчёты по логам
# Установка полезных утилит
# Ubuntu/Debian
sudo apt install goaccess multitail lnav logwatch

# CentOS
sudo yum install goaccess multitail lnav logwatch

# Использование
sudo multitail /var/log/syslog /var/log/apache2/access.log
sudo lnav /var/log/syslog
sudo goaccess /var/log/apache2/access.log --log-format=COMBINED

Автоматизация и скрипты

Создаём универсальный скрипт для анализа логов:

#!/bin/bash
# /usr/local/bin/log-analyzer.sh

# Определяем дистрибутив
if [ -f /etc/debian_version ]; then
    SYSLOG="/var/log/syslog"
    AUTHLOG="/var/log/auth.log"
elif [ -f /etc/redhat-release ]; then
    SYSLOG="/var/log/messages"
    AUTHLOG="/var/log/secure"
fi

echo "=== System Log Analysis ==="
echo "Last 10 errors from system log:"
sudo grep -i error $SYSLOG | tail -10

echo -e "\n=== Authentication Analysis ==="
echo "Failed login attempts in last hour:"
sudo grep "Failed password" $AUTHLOG | \
    grep "$(date +%b\ %d\ %H)" | wc -l

echo -e "\n=== Disk Usage of Log Directory ==="
sudo du -sh /var/log/* | sort -hr | head -10

echo -e "\n=== Service Status ==="
systemctl --failed --no-legend | wc -l
echo "failed services"

Мониторинг и алерты

Настраиваем автоматический мониторинг с помощью cron:

# Добавляем в crontab
sudo crontab -e

# Проверяем логи каждые 15 минут
*/15 * * * * /usr/local/bin/ssh-monitor.sh

# Еженедельный отчёт
0 6 * * 1 /usr/local/bin/log-analyzer.sh | mail -s "Weekly Log Report" admin@example.com

# Проверка размера логов
0 */6 * * * [ $(du -s /var/log | cut -f1) -gt 1000000 ] && echo "Log directory is getting large" | mail -s "Log Size Alert" admin@example.com

Интеграция с внешними системами

Отправка логов в Elasticsearch или другие системы:

# Установка Filebeat для отправки в ELK
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.15.0-linux-x86_64.tar.gz
tar xzvf filebeat-7.15.0-linux-x86_64.tar.gz

# Базовая конфигурация filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/syslog
    - /var/log/apache2/*.log

output.elasticsearch:
  hosts: ["localhost:9200"]

Оптимизация и производительность

Несколько советов для оптимизации работы с логами:

  • Используйте индексы — для больших логов создавайте индексы по времени
  • Настройте уровни логирования — не логируйте debug в продакшене
  • Ротируйте логи — не давайте им занимать весь диск
  • Используйте tmpfs для временных логов — ускоряет запись
# Создаём tmpfs для временных логов
sudo nano /etc/fstab
tmpfs /var/log/tmp tmpfs defaults,noatime,nosuid,nodev,noexec,mode=1777,size=100M 0 0

# Монтируем
sudo mount -a

Безопасность логов

Логи содержат чувствительную информацию, поэтому важно их защищать:

# Настройка прав доступа
sudo chmod 640 /var/log/auth.log
sudo chown root:adm /var/log/auth.log

# Отправка логов на удалённый сервер с TLS
# В /etc/rsyslog.conf
$DefaultNetstreamDriverCAFile /etc/ssl/certs/ca.pem
$ActionSendStreamDriver gtls
$ActionSendStreamDriverMode 1
$ActionSendStreamDriverAuthMode x509/name
*.* @@log-server.example.com:6514

Интересные факты и нестандартные применения

Логи можно использовать не только для отладки:

  • Аналитика пользователей — анализ паттернов поведения через веб-логи
  • Детектор аномалий — машинное обучение на основе логов
  • Мониторинг производительности — анализ времени ответа через логи
  • Форензика — расследование инцидентов безопасности

Пример скрипта для детекции аномалий:

#!/bin/bash
# Простой детектор аномалий на основе количества запросов

NORMAL_RPS=100  # Нормальное количество запросов в секунду
CURRENT_RPS=$(tail -1000 /var/log/apache2/access.log | \
    grep "$(date +%d/%b/%Y:%H:%M)" | wc -l)

if [ $CURRENT_RPS -gt $((NORMAL_RPS * 3)) ]; then
    echo "ALERT: Possible DDoS attack detected. Current RPS: $CURRENT_RPS"
    # Можно автоматически включить защиту
    # sudo fail2ban-client set apache-badbots bantime 3600
fi

Выбор VPS для работы с логами

Для серьёзной работы с логами вам понадобится надёжный сервер. Если планируете централизованное логирование или храните большие объёмы данных, рекомендую рассмотреть VPS с достаточным объёмом дискового пространства. Для высоконагруженных систем с интенсивным логированием лучше использовать выделенный сервер.

Заключение и рекомендации

Работа с логами — это искусство, которое приходит с опытом. Начните с базовых команд tail, grep и journalctl. Постепенно изучайте настройки rsyslog и systemd journal. Автоматизируйте рутинные задачи с помощью скриптов и cron.

Основные принципы работы с логами:

  • Логируйте осмысленно — слишком много логов хуже, чем их отсутствие
  • Структурируйте данные — используйте единый формат для всех приложений
  • Мониторьте в реальном времени — не ждите, пока что-то сломается
  • Автоматизируйте анализ — компьютер найдёт проблемы быстрее вас
  • Храните логи безопасно — они содержат критически важную информацию

Помните: логи — это не просто файлы на диске, это история вашей системы. Научитесь её читать, и вы станете намного более эффективным системным администратором.


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked