10 примеров использования grep для поиска ошибок в логах
Команда grep — один из самых мощных инструментов для поиска в логах. В этой статье мы рассмотрим 10 практических примеров, которые помогут вам эффективно находить ошибки и проблемы в системных логах.
Основы использования grep в логах
Grep (Global Regular Expression Print) — это команда для поиска шаблонов в тексте. При работе с логами она позволяет быстро находить строки, содержащие определенные слова или паттерны.
Простой поиск
bash
grep "error" /var/log/syslog
Эта команда найдет все строки, содержащие слово "error" в файле /var/log/syslog.
1. Поиск любых ошибок в системном логе
bash
grep -i "error\|fail\|critical\|fatal" /var/log/syslog
Этот пример ищет различные варианты ошибок (с игнорированием регистра):
- error — ошибка
- fail — сбой
- critical — критическая ошибка
- fatal — фатальная ошибка
Флаг -i позволяет игнорировать регистр.
2. Поиск ошибок по времени
bash
grep "Mar 3.*error" /var/log/syslog
Этот пример находит все ошибки, произошедшие 3 марта. Паттерн Mar 3.*error означает:
- Mar — месяц (March)
- 3 — дата (с двумя пробелами перед числом, как в формате syslog)
- .* — любые символы между датой и словом error
- error — искомое слово
3. Поиск ошибок с контекстом
bash
grep -A 3 -B 3 "error" /var/log/nginx/error.log
Этот пример показывает не только строки с "error", но и:
- -A 3 — 3 строки после найденной
- -B 3 — 3 строки до найденной
- -C 3 — эквивалентно -A 3 -B 3
Контекст помогает понять, что происходило до и после ошибки.
4. Поиск ошибок в нескольких файлах
bash
grep -r "error" /var/log/apache2/
Эта команда рекурсивно ищет ошибки во всех файлах в директории /var/log/apache2/:
- -r или -R — рекурсивный поиск по поддиректориям
- Также можно использовать -l для вывода только имен файлов, содержащих ошибки
5. Поиск с регулярными выражениями
bash
grep -E "(failed|denied|refused).*connection" /var/log/auth.log
Этот пример ищет строки, содержащие "failed", "denied" или "refused", за которыми следует "connection":
- -E — использование расширенных регулярных выражений
- (failed|denied|refused) — любое из этих слов
- .*connection — любые символы, за которыми следует "connection"
6. Подсчет количества ошибок
bash
grep -c "error" /var/log/syslog
Флаг -c подсчитывает количество строк, содержащих "error".
Для более детального анализа можно комбинировать с другими командами:
```bash
Подсчет ошибок по часам
for hour in {00..23}; do echo "$hour: $(grep \"$hour:..:..\" /var/log/syslog | grep -c error)" done ```
7. Поиск ошибок с определенными IP-адресами
bash
grep -E "(error|fail).*([0-9]{1,3}\.){3}[0-9]{1,3}" /var/log/nginx/access.log
Этот пример ищет ошибки, связанные с IP-адресами:
- (error|fail) — слово "error" или "fail"
- .* — любые символы между
- ([0-9]{1,3}\.){3}[0-9]{1,3} — паттерн IP-адреса
8. Поиск ошибок с определенным кодом возврата
bash
grep " 5[0-9][0-9] " /var/log/nginx/access.log
Этот пример находит HTTP-ошибки сервера (5xx):
- 5[0-9][0-9] — три символа, начинающихся с 5, с пробелами с обеих сторон
- Это соответствует кодам 500, 501, 502 и т.д.
9. Поиск ошибок в реальном времени
bash
tail -f /var/log/syslog | grep --line-buffered "error"
Эта команда позволяет мониторить ошибки в реальном времени:
- tail -f — следование за концом файла
- --line-buffered — строковая буферизация для немедленного вывода
- Это удобно для мониторинга системы во время тестирования
10. Поиск ошибок с исключением шума
bash
grep -i "error" /var/log/syslog | grep -v "deprecated\|warning\|info"
Этот пример фильтрует ошибки, исключая "шум":
- Первый grep находит все строки с "error" (без учета регистра)
- Второй grep -v исключает строки, содержащие "deprecated", "warning" или "info"
- Флаг -v инвертирует результат (показывает строки, НЕ содержащие паттерн)
Дополнительные полезные флаги grep
Чувствительность к регистру
bash
grep -i "pattern" file.log # без учета регистра
Только имена файлов
bash
grep -l "error" /var/log/* # только имена файлов с ошибками
Номера строк
bash
grep -n "error" file.log # показывает номера строк
Инвертированный поиск
bash
grep -v "success" file.log # все строки, кроме содержащих "success"
Бинарный режим
bash
grep -a "error" binary.log # обрабатывает бинарные файлы как текст
Практические рекомендации
Комбинация с другими командами
```bash
Поиск уникальных ошибок
grep "error" /var/log/syslog | sort | uniq -c | sort -nr
Поиск ошибок за последние 100 строк лога
tail -100 /var/log/syslog | grep "error"
Поиск ошибок и сохранение в отдельный файл
grep "error" /var/log/syslog > errors_found.txt ```
Использование вместе с sed и awk
```bash
Извлечение только времени и сообщения об ошибке
grep "error" /var/log/syslog | awk '{print $1" "$2" "$3" "$NF}'
Замена чувствительной информации перед выводом
grep "error" /var/log/auth.log | sed 's/[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/XXX.XXX.XXX.XXX/g' ```
Создание алиасов для частого использования
В файле ~/.bashrc можно добавить:
bash
alias syserror='grep -i "error\|fail\|critical" /var/log/syslog'
alias autherror='grep -i "error\|fail\|denied" /var/log/auth.log'
alias loggrep='grep -A 2 -B 2 -i'
Заключение
Grep — невероятно мощный инструмент для поиска ошибок в логах. Эти 10 примеров охватывают наиболее распространенные сценарии, но возможности grep гораздо шире. Регулярные выражения, сочетание с другими командами и различные флаги позволяют создавать очень сложные и точные поисковые запросы.
Практика с этими примерами поможет вам быстро находить проблемы в системе и эффективно диагностировать ошибки. Помните, что правильный поиск в логах может сэкономить часы ручной диагностики.