Просмотр логов в реальном времени: tail, grep и journalctl
Хочу себе такие же кнопкиПросмотр логов в реальном времени: tail, grep и journalctl
Как следить за сервером, как детектив за подозреваемым — быстро, точно и без лишнего шума
Вы когда-нибудь чувствовали, что ваш сервер ведёт себя подозрительно? То ли сайт внезапно тормозит, то ли трафик арбитражных кампаний идёт мимо целей, то ли ботнет пытается подобрать пароль к SSH. Логи — это чёрный ящик сервера, где записано всё: ошибки, предупреждения, успешные операции и даже попытки взлома.
Но логи бесполезны, если вы не умеете их читать в реальном времени. Представьте, что вы смотрите трансляцию футбольного матча с задержкой в час — вы пропустите гол, красную карточку и пенальти. Так же и с сервером: если вы проверяете логи раз в неделю, вы пропустите атаку, сбой базы данных или утечку трафика.
В этом уроке вы научитесь: ✅ Отслеживать логи в реальном времени (как оператор дрона следит за полётом). ✅ Фильтровать важную информацию (как детектив ищет отпечатки пальцев на месте преступления). ✅ Работать с разными типами логов (системные, веб-сервера, приложений).
1. Почему логи важны для веб-мастера и арбитражника?
Логи — это история жизни вашего сервера. Они помогают:
- Выявлять ошибки (например, почему Nginx отдаёт 502 Bad Gateway).
- Отслеживать атаки (брутфорс SSH, сканирование портов).
- Анализировать трафик (откуда идут запросы, какие страницы популярны).
- Диагностировать производительность (медленные SQL-запросы, перегрузка CPU).
Пример из жизни арбитражника: Вы запустили кампанию, но конверсии нет. Проверяете логи Nginx и видите, что 90% трафика идёт с ботов, а не с реальных пользователей. Без логов вы бы слили бюджет впустую.
2. Основные инструменты для работы с логами
Мы будем использовать три команды:
tail— показывает конец файла (идеально для реального времени).grep— фильтрует текст по ключевым словам (как поиск по Ctrl+F).journalctl— работает с системными логами (если у васsystemd).
| Команда | Назначение | Пример использования |
|---|---|---|
tail |
Просмотр конца файла в реальном времени | tail -f /var/log/nginx/access.log |
grep |
Поиск по ключевым словам | grep "404" /var/log/nginx/error.log |
journalctl |
Просмотр системных логов | journalctl -u nginx -f |
3. tail: Следим за логами в реальном времени
Как работает tail?
Команда tail (от англ. хвост) показывает последние строки файла. Ключ -f (follow) позволяет отслеживать изменения в реальном времени — как если бы вы смотрели прямую трансляцию.
Базовый синтаксис:
tail [опции] /путь/к/файлу
Основные опции tail
| Опция | Описание | Пример |
|---|---|---|
-f |
Следить за изменениями (follow) | tail -f access.log |
-n |
Показать N последних строк | tail -n 20 error.log |
-q |
Не выводить имена файлов | tail -q *.log |
Примеры использования
-
Следить за логами Nginx в реальном времени:
tail -f /var/log/nginx/access.logВы увидите все новые запросы к вашему веб-серверу.
-
Посмотреть последние 50 строк лога ошибок:
tail -n 50 /var/log/nginx/error.logПолезно, если сервер только что упал и вы ищете причину.
-
Следить за несколькими логами одновременно:
tail -f /var/log/nginx/access.log /var/log/nginx/error.logВывод будет с указанием, из какого файла какая строка.
4. grep: Ищем иголку в стоге сена
Зачем нужен grep?
Логи могут содержать тысячи строк в секунду. Чтобы не тонуть в информации, нужно фильтровать только то, что важно. grep (от Global Regular Expression Print) ищет строки по шаблону.
Базовый синтаксис:
grep [опции] "шаблон" файл
Основные опции grep
| Опция | Описание | Пример |
|---|---|---|
-i |
Игнорировать регистр | grep -i "error" log.txt |
-v |
Исключить строки с шаблоном | grep -v "bot" access.log |
-E |
Расширенные регулярные выражения | grep -E "404|500" error.log |
-C |
Показать N строк вокруг совпадения | grep -C 3 "fail" auth.log |
Примеры использования
-
Найти все ошибки 404 в логах Nginx:
grep "404" /var/log/nginx/access.log -
Искать попытки взлома SSH (неудачные логины):
grep "Failed password" /var/log/auth.logЭто покажет все неудачные попытки входа по SSH.
-
Исключить ботов из логов (например, Googlebot):
grep -v "Googlebot" /var/log/nginx/access.log -
Комбинируем
tailиgrepдля реального времени:tail -f /var/log/nginx/access.log | grep "POST /api"Эта команда покажет только POST-запросы к
/apiв реальном времени.
5. journalctl: Системные логи для продвинутых
Если ваш сервер работает на systemd (а это 99% современных Linux-дистрибутивов), то системные логи хранятся в binary format и читаются через journalctl.
Базовый синтаксис:
journalctl [опции]
Основные опции journalctl
| Опция | Описание | Пример |
|---|---|---|
-u |
Логи конкретного сервиса | journalctl -u nginx |
-f |
Следить в реальном времени | journalctl -f |
--since |
Логи с определённого времени | journalctl --since "1 hour ago" |
-p |
Фильтр по уровню важности | journalctl -p err |
Уровни важности логов (приоритеты)
| Уровень | Код | Описание |
|---|---|---|
| Emergency | 0 | Система неработоспособна |
| Alert | 1 | Требуется немедленное действие |
| Critical | 2 | Критическая ошибка |
| Error | 3 | Ошибка (например, сбой сервиса) |
| Warning | 4 | Предупреждение |
| Notice | 5 | Важное сообщение |
| Info | 6 | Информационное сообщение |
| Debug | 7 | Отладочная информация |
Примеры использования
-
Посмотреть логи Nginx за последний час:
journalctl -u nginx --since "1 hour ago" -
Следить за критическими ошибками в реальном времени:
journalctl -f -p 3Покажет только ошибки уровня Error и выше.
-
Найти логи, связанные с конкретным процессом (например, PHP-FPM):
journalctl -u php-fpm --no-pager | grep "slow"Полезно для поиска медленных скриптов.
6. Продвинутые приёмы: Комбинируем команды
Реальная мощь раскрывается, когда вы соединяете команды через пайп (|).
Пример 1: Ищем DDoS-атаку
tail -f /var/log/nginx/access.log | grep -E "GET /|POST /" | awk '{print $1}' | sort | uniq -c | sort -nr
Что делает эта команда?
tail -f— следит за логами Nginx.grep -E "GET /|POST /"— фильтрует только HTTP-запросы.awk '{print $1}'— вытаскивает IP-адреса.sort | uniq -c | sort -nr— считает количество запросов с каждого IP и сортирует по убыванию.
Если какой-то IP делает 1000 запросов в секунду — это явный признак атаки.
Пример 2: Мониторинг ошибок MySQL
journalctl -u mysql -f | grep -i "error"
Покажет все ошибки MySQL в реальном времени.
Пример 3: Поиск медленных SQL-запросов
grep "slow query" /var/log/mysql/mysql-slow.log | tail -n 20
Полезно для оптимизации базы данных.
7. Где хранятся логи?
Расположение логов зависит от сервиса. Вот основные пути:
| Сервис | Путь к логам | Что там ищем? |
|---|---|---|
| Nginx | /var/log/nginx/access.log |
Запросы к веб-серверу |
/var/log/nginx/error.log |
Ошибки Nginx | |
| Apache | /var/log/apache2/access.log |
Аналогично Nginx |
| MySQL | /var/log/mysql/error.log |
Ошибки базы данных |
| SSH | /var/log/auth.log |
Попытки входа по SSH |
| Системные | journalctl |
Логи ядра, сервисов, демонов |
| PHP | /var/log/php_error.log |
Ошибки PHP-скриптов |
8. Советы по работе с логами
-
Используйте
lessдля больших файлов:less /var/log/nginx/access.logПозволяет листать логи вверх-вниз (клавиши
↑,↓,/для поиска). -
Архивируйте и ротируйте логи:
- Логи со временем занимают много места. Настройте logrotate (утилита для архивации логов).
- Пример конфига для Nginx:
/var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty }
-
Настройте уведомления о критических ошибках:
- Используйте
cron+grepдля отправки алертов на почту или в Telegram. - Пример (ищем ошибки 500 и отправляем на почту):
grep "500" /var/log/nginx/error.log | mail -s "Server Error 500" admin@example.com
- Используйте
-
Используйте
multitailдля удобного просмотра:multitail /var/log/nginx/access.log /var/log/nginx/error.logПозволяет следить за несколькими логами в одном окне с цветовой разметкой.
Практика для закрепления
Упражнение 1. Базовый мониторинг
- Запустите
tail -fдля логов Nginx (access.log). - Откройте свой сайт в браузере и наблюдайте, как появляются новые записи.
- Вопрос: Какие данные записываются в
access.logпри каждом запросе?
Упражнение 2. Поиск ошибок
- Найдите все ошибки 404 в логах Nginx за последние 24 часа.
- Подсказка: Используйте
grep+tailилиjournalctl.
Упражнение 3. Анализ атак
- Проверьте
/var/log/auth.logна наличие неудачных попыток входа по SSH. - Вопрос: Какой IP чаще всего пытается подобрать пароль?
Упражнение 4. Комбинированная команда
- Напишите команду, которая:
- Следит за
access.logв реальном времени. - Фильтрует только запросы к
/admin. - Выводит только IP-адреса и URL.
- Следит за
- Подсказка: Используйте
tail -f,grepиawk.
Упражнение 5. Системные логи
- Посмотрите логи сервиса
sshdза последний день с помощьюjournalctl. - Вопрос: Сколько раз перезапускался SSH-сервер?
Ответы и разбор упражнений вы найдёте в следующем уроке! (Но попробуйте сначала сделать самостоятельно — это лучший способ научиться.)
Итог
Теперь вы умеете:
✔ Следить за логами в реальном времени (tail -f).
✔ Фильтровать важную информацию (grep).
✔ Работать с системными логами (journalctl).
✔ Комбинировать команды для сложного анализа.
Логи — это ваш главный инструмент диагностики. Чем лучше вы их понимаете, тем быстрее найдёте и исправите проблемы на сервере.
Домашнее задание:
- Настройте alias в
.bashrcдля быстрого доступа к логам:alias nginxlogs='tail -f /var/log/nginx/access.log' alias sshlogs='tail -f /var/log/auth.log' - Автоматизируйте поиск критических ошибок с помощью
cron.
В следующем уроке: "Как настроить ротацию логов и отправлять алерты в Telegram." 🚀
Введение: чем VDS отличается от шаред-хостинга и зачем это веб-мастеру
Как правильно выбрать тариф: CPU, RAM, NVMe или SSD, канал
Выбор операционной системы: почему Ubuntu 22.04/24.04 — стандарт индустрии
Регистрация домена и первичная настройка DNS-записей (A, AAAA, CNAME)
Генерация SSH-ключей на локальном компьютере (Windows/Mac/Linux)
Добавление публичного ключа на сервер и первый вход по SSH
Отключение входа по паролю и запрет авторизации для root
Смена стандартного порта SSH для снижения шума в логах
Создание основного рабочего пользователя с правами sudo
Базовое обновление системы и установка необходимых утилит (curl, wget, git, htop)
Настройка часового пояса и синхронизация времени (NTP)
Установка и базовая настройка фаервола UFW
Разрешение только необходимых портов (SSH, HTTP, HTTPS)
Установка Fail2Ban для защиты от перебора паролей
Настройка правил Fail2Ban для SSH и веб-сервера
Знакомство с Docker: установка движка и CLI
Установка Docker Compose для управления мульти-контейнерными приложениями
Основы изоляции: почему каждый проект должен быть в своем контейнере
Подготовка файловой структуры сервера для удобного хранения проектов
Развертывание Nginx как обратного прокси-сервера через Docker
Настройка конфигурации Nginx для статических сайтов
Установка PHP-FPM в отдельном контейнере
Связка Nginx и PHP-FPM через внутреннюю Docker-сеть
Оптимизация настроек PHP-FPM (pm.max_children, memory_limit) под нагрузку
Установка MariaDB/MySQL в изолированном контейнере
Безопасное хранение паролей от БД через переменные окружения (.env)
Подключение к базе данных из внешнего клиента (DBeaver/Navicat) через туннель
Установка Redis для кэширования запросов и сессий
Интеграция Redis с PHP-приложением для ускорения работы
Автоматическая выдача SSL-сертификатов через Certbot (Let's Encrypt)
Настройка автопродления SSL-сертификатов по крону
Принудительный редирект с HTTP на HTTPS в Nginx
Включение gzip и brotli сжатия для ускорения загрузки страниц
Настройка кэширования статики (browser caching) в заголовках Nginx
Защита от простых DDoS и ботов: модуль limit_req в Nginx
Настройка резервного копирования баз данных (mysqldump) по расписанию
Настройка резервного копирования файлов проектов (tar)
Отправка бэкапов на удаленное хранилище (S3-compatible storage или другой сервер)
Ротация и очистка старых логов, чтобы не забить диск
Мониторинг нагрузки: установка и настройка htop и iotop
Просмотр логов в реальном времени: tail, grep и journalctl
Установка простого мониторинга доступности (Uptime Kuma или скрипт в Telegram)
Изоляция арбитражных инструментов: запуск ботов в отдельных контейнерах
Установка SOCKS5/HTTP прокси (3proxy) внутри Docker для мультиаккаунтинга
Настройка аутентификации и ограничения доступа к прокси по IP
Проверка анонимности и работы прокси-сервера
Оптимизация ядра Linux (sysctl.conf) для высоких нагрузок и сетевых соединений
Настройка swap-файла: когда он нужен, а когда вредит
Чек-лист финальной проверки безопасности перед запуском проекта
План действий при взломе или падении сервера: восстановление из бэкапа
АПТЕЧКА ДЛЯ ЖИВОТНЫХ
Автомобили Германии — FORD, MERSEDES, VW, IVECO
Чат рулетка 2026: чаты, где каждый момент — шанс
Чат рулетка онлайн
Чат с Аней: психологический разговор
Чатрулетка: новый способ общения
Чай и кофе: сила вкуса
Детские игрушки из безопасных материалов
Эксплуатация шин: Рекомендации по использованию
Фототехника для пейзажей
Как Aptum хостинг помогает малым бизнесам в управлении CRM-системами
Как выбрать Vdsina вечный хостинг для своего проекта
Компоненты безопасности IP
Конкуренция на российском автомобильном рынке
Онлайн генератор паролей для Windows
Оптимизация обработки форм GEO проекта
Сервер для социальных сетей: Безопасность, Скорость, Изоляция
Смешные моменты
Сравнение Arsys хостинг сервисов для блогеров с WordPress на 2023 год
Весь экран под циферблат