Ответ
Для фильтрации ошибок из логов я обычно использую grep с паттернами, соответствующими формату логов конкретного приложения. Ключевой момент — понимать, как ошибки маркируются в вашей системе.
Базовый пример для системных логов:
grep -i "error|fail|critical|exception" /var/log/syslog
-i— игнорирует регистр (Error, ERROR).|в паттерне — логическое ИЛИ.
Для структурированных логов (JSON):
grep '"level":"error"' /var/log/app.log | jq . # jq для красивого вывода
Практические примеры из моей работы:
- Nginx/Apache: Ищу HTTP-коды состояния 5xx и 4xx.
grep -E " 5[0-9]{2} | 4[0-9]{2} " /var/log/nginx/access.log - Docker контейнеры: Просмотр логов конкретного контейнера с фильтром.
docker logs my-app-container 2>&1 | grep -A 2 -B 2 "ERROR"Флаг
-A 2 -B 2показывает 2 строки до и после совпадения для контекста. - Журнал systemd (journalctl): Более мощный и структурированный способ.
journalctl -u my-service.service --since "1 hour ago" -p errПараметр
-pзадает приоритет (emerg, alert, crit, err).
Важно: Для постоянного мониторинга настройте сбор логов в централизованную систему (ELK Stack, Loki, Datadog), где фильтрация и алертинг на ошибки настраиваются через UI или конфигурационные файлы.
Ответ 18+ 🔞
А, ну это же классика, ёпта! Ты про фильтрацию логов спрашиваешь? Да это ж святое дело, я этим каждый день занимаюсь, ебать мои старые костыли.
Смотри, чувак, основа основ — это grep. Без него нихуя не сделаешь. Главное — понять, как у тебя эти ошибки в логах выглядят. Иногда они такие замаскированные, что их только с лупой найдёшь, а иногда — прям кричат на всю строку "ERROR", тут уж волнение ебать не нужно.
Вот самый простой пример, с которого все начинают:
grep -i "error|fail|critical|exception" /var/log/syslog
Видишь этот |? Это типа "или". То есть ищет или error, или fail, или critical. А -i — это чтобы ему было похуй на регистр, найдет и ERROR, и Error, и eRrOr. Удобная штука.
А вот если у тебя логи в JSON пишутся — это уже цивилизация, можно красиво:
grep '"level":"error"' /var/log/app.log | jq . # jq для красивого вывода
Тут jq — это вообще магия, он тебе этот JSON развернёт как надо, а не сплошной стеной текста.
Из моего личного опыта, вот что часто выручает:
-
Для веб-серверов (Nginx/Apache): Там всё по кодам статуса. Пятисотые (5xx) — это серверные косяки, четырёхсотые (4xx) — клиентские. Ищешь так:
grep -E " 5[0-9]{2} | 4[0-9]{2} " /var/log/nginx/access.logРегулярка
[0-9]{2}— это чтобы две цифры подряд поймать. Без неё можно и мимо промахнуться. -
Docker контейнеры: Тут бывает такое, что контейнер накрылся медным тазом, а ты сидишь и думаешь — какого хуя? Смотри:
docker logs my-app-container 2>&1 | grep -A 2 -B 2 "ERROR"Флаги
-A 2 -B 2— золотые. Они покажут тебе 2 строки ДО ошибки и 2 строки ПОСЛЕ. Контекст, блядь! А то найдёшь одну строчку с "ERROR", а что вокруг было — хуй знает. Без контекста иногда нихуя не понятно. -
Systemd (через journalctl): Это уже овердохуища мощный инструмент, если ты на системе с systemd.
journalctl -u my-service.service --since "1 hour ago" -p errТут
-p err— это фильтр по приоритету. Можно иcrit, иalertуказать. А--since "1 hour ago"— чтобы не вываливать тебе лог за всю жизнь, а только за последний час. Умно, да?
Но слушай, самый главный совет. Если ты это делаешь руками каждый день — ты, прости, ебанько. Надо настраивать централизованный сбор логов. ELK Stack, Loki, Grafana — да что угодно. Там ты в веб-морде настраиваешь фильтры, дашборды, алерты. И когда что-то сломается, система сама тебе в телегу или слак напишет: "Чувак, там у тебя сервис payment-gateway хуй в пальто выдал, иди смотри". Вот это — правильный путь. А ковыряться в grep по 10 файлам одновременно — это как будто на дворе 2002-й год.