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 гораздо шире. Регулярные выражения, сочетание с другими командами и различные флаги позволяют создавать очень сложные и точные поисковые запросы.

Практика с этими примерами поможет вам быстро находить проблемы в системе и эффективно диагностировать ошибки. Помните, что правильный поиск в логах может сэкономить часы ручной диагностики.