- Home »

Как просматривать и настраивать логи 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.
Основные принципы работы с логами:
- Логируйте осмысленно — слишком много логов хуже, чем их отсутствие
- Структурируйте данные — используйте единый формат для всех приложений
- Мониторьте в реальном времени — не ждите, пока что-то сломается
- Автоматизируйте анализ — компьютер найдёт проблемы быстрее вас
- Храните логи безопасно — они содержат критически важную информацию
Помните: логи — это не просто файлы на диске, это история вашей системы. Научитесь её читать, и вы станете намного более эффективным системным администратором.
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.