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

Как через терминал найти нужные исключения в логах?

1.2 Junior🔥 201 комментариев
#DevOps и инфраструктура

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

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

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

Поиск исключений в логах через терминал

Поиск нужных исключений — критический навык для отладки production-проблем. Рассмотрю основные подходы.

1. Базовый поиск через grep

Самый простой способ — использовать grep:

# Поиск всех исключений
grep -i "exception\|error\|traceback" app.log

# Поиск конкретного типа исключения
grep "ValueError" app.log

# Игнорируя регистр
grep -i "connectionerror" app.log

# Вывод строк до и после совпадения
grep -B 5 -A 10 "TimeoutError" app.log

2. Рег-выражения для более точного поиска

Для сложных паттернов используй grep -E (extended regex):

# Поиск исключений с номером строки
grep -E "^[0-9]{4}-[0-9]{2}-[0-9]{2}.*Error" app.log

# Поиск исключений между двумя временами
grep "2024-03-22 14:" app.log | grep "Exception"

# Исключения в определённом модуле
grep "myapp.handlers.*Error" app.log

3. Использование awk и sed

awk мощнее для структурированной обработки:

# Вывод только сообщений об ошибках
awk "/Error|Exception/ {print NR\": \"$0}" app.log

# Подсчёт типов исключений
awk -F\"Exception\" "/Exception/ {print \"$2\" | \"sort | uniq -c\"}" app.log

# Вывод исключений с метаданными
awk "/Traceback/ {found=1} found {print} /^$/ {found=0}" app.log

4. Фильтрация по временным диапазонам

Для больших логов ограничивай диапазон:

# Логи за последний час
grep "2024-03-22 15:" app.log | grep "Error"

# Используя sed для выбора строк с N по M
sed -n 1000,2000p app.log | grep "Exception"

# Используя tail/head для последних ошибок
tail -1000 app.log | grep "Error"

5. Группировка и статистика

Используй sort и uniq для анализа частоты:

# Количество каждого типа исключения
grep "Exception\|Error" app.log | sed \"s/.*\\([A-Za-z]*Error\\).*/\\1/\" | sort | uniq -c | sort -rn

# Топ исключений
grep -oE \"(Error|Exception)[A-Za-z]*\" app.log | sort | uniq -c | sort -rn | head -10

# Количество ошибок в часу
grep "Error" app.log | cut -d: -f1-2 | uniq -c

6. Поиск с контекстом стека

Для трейсбэков (многострочные ошибки):

# Поиск полного стека вызовов
grep -B 2 -A 20 \"Traceback\" app.log

# Поиск файла и номера строки
grep \"File \\\".*\\\", line" app.log

# Самая частая строка в трейсбэке
grep -A 5 \"Traceback\" app.log | grep \"File\" | cut -d\"\" -f2 | sort | uniq -c | sort -rn

7. Практические примеры

# Найти все ошибки за сегодня в production логе
grep "$(date +%Y-%m-%d)" production.log | grep -E \"ERROR|CRITICAL\"

# Поиск исключений определённого класса
grep \"Django\" app.log | grep -E \"(DatabaseError|PermissionDenied)\"

# Исключения в Celery тасках
grep \"celery\" app.log | grep \"Exception\" | tail -20

# Количество уникальных ошибок
grep -oE \"[A-Za-z]*Error: .*\" app.log | cut -d: -f1 | sort -u | wc -l

8. Продвинутый поиск с jq (для JSON логов)

Если логи в JSON формате:

# Фильтр по уровню
jq \"select(.level==\\\"ERROR\\\") | .message\" app.log

# Поиск по типу исключения
jq \"select(.exception | test(\\\"ValueError\\\")) | .\" app.log

# Статистика по типам
jq -r \".exception\" app.log | grep -v null | sort | uniq -c | sort -rn

Лучшие практики

1. Структурированное логирование — логируй в JSON с полями (timestamp, level, module, exception_type) 2. Ограничивай контекст — используй временные диапазоны и фильтры 3. Сохраняй результаты — редирект в файл: grep "Error" app.log > errors.txt 4. Используй инструментыtail -f для live просмотра, less для навигации 5. Комбинируй команды — пайпы мощнее одной команды

Инструменты для больших логов

Для production логов (гигабайты) рассмотри:

  • ripgrep (rg) — быстрее grep в 10 раз
  • lnav — интерактивный просмотр логов
  • Splunk/ELK — профессиональные решения
  • tail -f + grep — для live мониторинга

Помни: правильная стратегия поиска экономит часы отладки!

Как через терминал найти нужные исключения в логах? | PrepBro