Ответ
При анализе инцидентов в DevOps критически важно видеть не только саму ошибку, но и события, которые к ней привели. Вот основные методы работы с контекстом логов.
1. Использование grep с контекстом:
# Показать 5 строк до и после каждой ошибки
grep -B 5 -A 5 "ERROR|Exception|FAILED" /var/log/application.log
# Показать 10 строк контекста в обе стороны (эквивалент -B 10 -A 10)
grep -C 10 "panic" /var/log/system.log
# Игнорировать регистр + контекст
grep -i -C 5 "timeout" /var/log/app/*.log
2. Работа с journalctl (systemd):
# Показать логи сервиса с контекстом ошибок
journalctl -u nginx.service --since "1 hour ago" | grep -B 3 -A 3 "error"
# Интерактивный просмотр с навигацией
journalctl -u app.service -f | grep --line-buffered -B 2 -A 2 "exception"
# Сохранить контекст ошибок в файл для анализа
journalctl -u service_name --since "today" | grep -B 5 -A 5 -i "fail" > error_context.log
3. Для Docker контейнеров:
# Просмотр логов контейнера с контекстом
docker logs --tail 200 container_name 2>&1 | grep -C 10 "error"
# Просмотр логов за последний час с временными метками
docker logs --since "1h" container_name | grep -B 5 -A 5 "exception"
# Анализ логов нескольких контейнеров сервиса
docker-compose logs --tail=50 | grep -C 5 "ERROR"
4. Продвинутые методы для production:
# Использование awk для показа N строк вокруг ошибки
tail -1000 /var/log/app.log | awk '/ERROR/{for(i=NR-4;i<=NR+4;i++)if(i>0)print a[i%5]}{a[NR%5]=$0}'
# Поиск паттерна с показом временных меток ±30 секунд от ошибки
grep -B 10 -A 10 "OutOfMemory" /var/log/app.log | grep -E "^d{4}-d{2}-d{2}"
# Анализ с помощью less (интерактивный поиск с контекстом)
less +"?ERROR" -N /var/log/large.log
# В less: нажмите 'n' для следующего вхождения, 'N' для предыдущего
5. Интеграция с мониторингом:
- В ELK Stack (Elasticsearch, Logstash, Kibana) используйте фильтры
grokдля выделения контекста - В Grafana Loki применяйте запросы с
|=для фильтрации и| logfmtдля структурирования - Prometheus Alertmanager можно настроить на включение контекстных логов в оповещения
DevOps рекомендации:
- Всегда логируйте с временными метками в UTC
- Добавляйте correlation IDs для трассировки запросов через микросервисы
- Настройте автоматический сбор логов с контекстом при срабатывании алертов
- Используйте структурированное логирование (JSON) для машинного анализа