← Назад к вопросам

Как посмотреть логи в Linux

1.6 Junior🔥 291 комментариев
#Linux и администрирование#Мониторинг и логирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Основные подходы к просмотру логов в Linux

В Linux логи хранятся в каталоге /var/log и управляются службой rsyslog или systemd-journald. Существует несколько категорий и инструментов для их просмотра, выбор которых зависит от типа лога, его расположения и ваших задач.

Категории логов и их расположение

  • Системные логи: /var/log/syslog, /var/log/messages (общие системные события).
  • Логи авторизации: /var/log/auth.log, /var/log/secure (входы в систему, sudo).
  • Логи демонов/сервисов: /var/log/nginx/, /var/log/apache2/ (логи веб-серверов), /var/log/mysql/ (логи базы данных).
  • Логи загрузки и ядра: /var/log/kern.log (логи ядра Linux), /var/log/boot.log (процесс загрузки).
  • Логи системы journald: хранятся в бинарном формате и доступны через команду journalctl.

Основные инструменты командной строки

Для просмотра логов в реальном времени, поиска, фильтрации и анализа используются следующие команды:

  1. cat, less, tail, head — базовые инструменты для чтения файлов.
    *   `cat /var/log/syslog` — вывести весь файл.
    *   `less /var/log/auth.log` — просмотр с возможностью прокрутки и поиска.
    *   `tail -f /var/log/nginx/access.log` — **режим реального времени** (`-f`), следить за новыми записями.
    *   `tail -n 100 /var/log/syslog` — показать последние 100 строк.

  1. grep — ключевой инструмент для фильтрации и поиска.

    # Поиск всех записей с ошибками в syslog
    grep -i "error" /var/log/syslog
    
    # Поиск по конкретной дате и фильтрация по процессу
    grep "May 15" /var/log/auth.log | grep "ssh"
    
    # Режим реального времени с фильтрацией (очень полезно!)
    tail -f /var/log/syslog | grep "CRITICAL"
    
  2. journalctl — мощный инструмент для работы с логами systemd.

    # Показать все логи журнала
    journalctl
    
    # Логи в реальном времени
    journalctl -f
    
    # Логи за последний час
    journalctl --since "1 hour ago"
    
    # Логи конкретного сервиса (например, nginx)
    journalctl -u nginx.service
    
    # Логи с уровнем критичности (priority) ERROR и выше
    journalctl -p err
    

Анализ и агрегация логов

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

  • awk и sed: Для сложной обработки текста, например, подсчета количества определенных событий или преобразования формата.
    # Подсчитать количество успешных логинов SSH из auth.log
    awk '/Accepted publickey/ {count++} END {print count}' /var/log/auth.log
    
  • logwatch или goaccess: Генерируют удобные сводные отчеты по логам (например, ежедневный отчет по активности веб-сервера).
  • Централизованные системы мониторинга: Для промышленного использования логи отправляются в системы типа ELK Stack (Elasticsearch, Logstash, Kibana), Grafana Loki, Splunk или Datadog. Они обеспечивают агрегацию логов с множества серверов, мощный поиск, визуализацию и алертинг.

Практический пример: анализ проблемы с сервисом

Предположим, сервис myapp не запускается. Вот последовательность действий для анализа его логов:

# 1. Проверить логи systemd для этого сервиса
journalctl -u myapp.service --since "today" -p err

# 2. Если сервис пишет в свой собственный файл лога
tail -n 50 /var/log/myapp/app.log

# 3. Поиск связанных ошибок в системном логе
grep "myapp" /var/log/syslog | grep -E "fail|error|critical"

# 4. Если проблема связана с сетью или портами, проверить соответствующие логи
journalctl --since "10 min ago" | grep -i "port.*bind"

Ключевые рекомендации для DevOps:

  • Для постоянного мониторинга используйте tail -f в сочетании с grep или настройте алерты в централизованной системе.
  • Понимайте уровни логирования (syslog levels): от DEBUG (7) до EMERG (0). Фильтрация по уровню (journalctl -p warning) часто помогает быстро найти проблемы.
  • Настройте ротацию логов (logrotate) во избежание заполнения диска.
  • Для production-систем всегда используйте централизованный сбор логов. Просмотр логов на каждой машине через SSH не scalable и неэффективен при расследовании инцидентов, затрагивающих множество серверов.
  • Конфигурируйте структурированный формат логов (JSON) в своих приложениях — это значительно упрощает их дальнейший анализ в системах типа ELK.