Как из файла логов вывести только ошибки (error)?

«Как из файла логов вывести только ошибки (error)?» — вопрос из категории Мониторинг и логирование, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для фильтрации ошибок из логов я обычно использую grep с паттернами, соответствующими формату логов конкретного приложения. Ключевой момент — понимать, как ошибки маркируются в вашей системе.

Базовый пример для системных логов:

grep -i "error|fail|critical|exception" /var/log/syslog
  • -i — игнорирует регистр (Error, ERROR).
  • | в паттерне — логическое ИЛИ.

Для структурированных логов (JSON):

grep '"level":"error"' /var/log/app.log | jq .  # jq для красивого вывода

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

  1. Nginx/Apache: Ищу HTTP-коды состояния 5xx и 4xx.
    grep -E " 5[0-9]{2} | 4[0-9]{2} " /var/log/nginx/access.log
  2. Docker контейнеры: Просмотр логов конкретного контейнера с фильтром.
    docker logs my-app-container 2>&1 | grep -A 2 -B 2 "ERROR"

    Флаг -A 2 -B 2 показывает 2 строки до и после совпадения для контекста.

  3. Журнал systemd (journalctl): Более мощный и структурированный способ.
    journalctl -u my-service.service --since "1 hour ago" -p err

    Параметр -p задает приоритет (emerg, alert, crit, err).

Важно: Для постоянного мониторинга настройте сбор логов в централизованную систему (ELK Stack, Loki, Datadog), где фильтрация и алертинг на ошибки настраиваются через UI или конфигурационные файлы.