Просмотр логов в реальном времени: 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." 🚀
Генератор паролей с длинной 64 символа
Женская одежда с бахромой
Кадастровые работы в Бийске
Как Aptum хостинг помогает малым бизнесам в управлении CRM-системами
Как выбрать планировку сайта для блогов на DreamHost
Как выбрать Vdsina вечный хостинг для своего проекта
Казань окна VEKA - профессионализм и опыт
Курьерская вода
Новостройки Оренбурга: недвижимость с отличной ценой
Онлайн чат-партнерство
Пиломатериалы для возведения бани
Почему VDSina — лучший выбор хостинга
Секреты Вконтакте: тонкости и хитрости
Скидки до 50% на тур в Коста-Рике
Видеочат рулетка бесплатно